[swift] Swift 카메라 기능

Swift는 iOS 앱 개발을 위한 강력한 프로그래밍 언어입니다. Swift를 사용하여 앱에 카메라 기능을 추가하는 방법을 살펴보겠습니다.

카메라 세팅하기

먼저, 앱에서 카메라를 사용하기 위해 카메라 권한을 설정해야 합니다. Info.plist 파일에 NSCameraUsageDescription 키를 추가하여 사용자에게 카메라 접근 허용 메시지를 표시할 수 있습니다.

<key>NSCameraUsageDescription</key>
<string>카메라에 접근하여 사진을 찍으려고 합니다.</string>

이제 카메라를 사용할 준비가 되었습니다.

카메라 뷰 만들기

카메라를 사용하기 위한 뷰를 만들어야 합니다. AVCaptureSession, AVCaptureVideoPreviewLayer 등의 클래스를 사용하여 카메라 뷰를 설정할 수 있습니다.

import AVFoundation
import UIKit

class CameraViewController: UIViewController {

    var session: AVCaptureSession?
    var previewLayer: AVCaptureVideoPreviewLayer?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupCamera()
    }

    func setupCamera() {
        session = AVCaptureSession()
        guard let session = session, let camera = AVCaptureDevice.default(for: .video) else { return }
        
        do {
            let input = try AVCaptureDeviceInput(device: camera)
            session.addInput(input)
            
            previewLayer = AVCaptureVideoPreviewLayer(session: session)
            previewLayer?.frame = view.bounds
            previewLayer?.videoGravity = .resizeAspectFill
            view.layer.addSublayer(previewLayer!)
            
            session.startRunning()
        } catch {
            print("Error setting up camera: \(error)")
        }
    }
}

위의 코드는 기본 카메라 설정 및 카메라 미리보기를 제공하는 간단한 뷰 컨트롤러입니다.

사진 찍기

지금은 카메라 뷰를 보여주는 것만으로는 충분하지 않습니다. 실제로 카메라에서 사진을 찍을 수 있어야 합니다.

import AVFoundation
import UIKit

class CameraViewController: UIViewController {

    // ...

    func capturePhoto() {
        guard let session = session else { return }
        
        let settings = AVCapturePhotoSettings()
        let photoOutput = AVCapturePhotoOutput()
        
        session.addOutput(photoOutput)
        
        if let photoConnection = photoOutput.connection(with: .video) {
            photoConnection.videoOrientation = .portrait
        }
        
        photoOutput.capturePhoto(with: settings, delegate: self)
    }
}

extension CameraViewController: AVCapturePhotoCaptureDelegate {
    func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
        if let imageData = photo.fileDataRepresentation(), let image = UIImage(data: imageData) {
            // 사진을 캡처한 후에 여기에서 필요한 로직을 추가할 수 있습니다.
            // 예를 들어, 이미지를 저장하거나 다른 뷰로 전달할 수 있습니다.
        }
    }
}

capturePhoto() 메서드는 현재 세션에서 사진을 캡처하고, 해당 사진을 처리하는 기능을 제공합니다. 위의 코드는 간단한 콜백 함수가 이미지 데이터를 처리하는 예시입니다.

참고 자료

Swift를 사용하여 iOS 앱에서 카메라 기능을 추가하는 방법을 알아보았습니다. 카메라 세팅, 카메라 뷰 만들기, 사진 찍기 등의 과정을 따라가면 앱에 간단한 카메라 기능을 추가할 수 있습니다.