Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift에서 UIView에 라이브 카메라 미리보기 추가하는 방법

Swift로 UIView에 실시간 카메라 미리보기 구현하기

Swift에서 기본 UIView에 라이브 카메라 미리보기를 추가하려면 두 가지 방법을 사용할 수 있습니다. 하나는 iOS SDK에서 제공하는 AVFoundation 프레임워크이고, 다른 하나는 네이티브 UIImagePickerController()입니다.

이번 예제에서는 UIView 위에 카메라 미리보기를 간단히 띄우는 것이 목적이므로 ImagePicker를 사용합니다. 반면, 카메라에 대한 세밀한 커스터마이징이나 다양한 사용자 지정 동작이 필요하다면 AVFoundation을 사용하는 것이 더 적합합니다.

카메라 미리보기 표시를 위한 단계

  • UIImagePickerController 객체를 생성합니다.
  • 클래스가 UIImagePickerControllerDelegate와 UINavigationControllerDelegate 프로토콜을 채택하도록 합니다.
  • 생성한 객체에 델리게이트(delegate)를 할당합니다.
  • 생성한 객체를 자식 뷰 컨트롤러(child view controller)로 추가합니다.
  • 자식 뷰 컨트롤러의 뷰를 UIView의 서브뷰(subview)로 추가합니다.

구현 코드

위 단계를 코드로 구현하면 다음과 같습니다.

override func viewDidLoad() {
    super.viewDidLoad()
    // 뷰 로딩 후 추가 설정
    let imgPicker = UIImagePickerController()
    if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerController.CameraDevice.front) {
        imgPicker.delegate = self
        imgPicker.sourceType = .camera

        addChild(imgPicker)
        self.view.addSubview(imgPicker.view)
        imgPicker.view.frame = self.view.bounds
        imgPicker.allowsEditing = false
        imgPicker.showsCameraControls = false
        imgPicker.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    }
}

추가 팁 및 주의사항

이 예제에서는 별도의 함수 없이 viewDidLoad 내에서 객체를 직접 생성했지만, 실제 프로젝트에서는 사용 여부가 불확실한 변수의 경우 lazy 변수(lazy var)로 선언하는 것이 좋은 습관입니다. lazy 변수는 실제로 접근되는 시점에 초기화되므로 불필요한 리소스 낭비를 줄일 수 있습니다.

또한 이 코드는 실제 카메라 하드웨어를 사용하기 때문에 시뮬레이터에서는 동작하지 않습니다. 반드시 실제 디바이스에서 테스트해야 합니다. 아래는 iPhone 7+에서 위 코드를 실행한 결과 화면입니다.

Swift에서 UIView에 라이브 카메라 미리보기 추가하는 방법