[swift] Swift에서 카메라로 풍경 촬영하기

Swift를 사용하여 iOS 앱을 개발하다 보면 카메라로 풍경을 촬영하고 싶을 때가 있습니다. 이번 블로그 포스트에서는 Swift를 사용하여 카메라로 풍경을 촬영하는 방법에 대해 알아보겠습니다.

카메라 접근 권한 설정하기

먼저, 앱에서 카메라에 접근하기 위해 Info.plist 파일에 카메라 접근 권한 설정을 추가해야 합니다. NSCameraUsageDescription 키를 추가하고 원하는 권한 설명을 값으로 설정합니다.

<key>NSCameraUsageDescription</key>
<string>카메라 접근 권한 설명</string>

카메라 뷰 만들기

카메라로 풍경을 촬영하기 위해 카메라 뷰를 만들어야 합니다. AVCaptureVideoPreviewLayer를 사용하여 카메라 뷰를 생성하고 화면에 표시합니다.

import AVFoundation
import UIKit

class CameraViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let session = AVCaptureSession()
        guard let device = AVCaptureDevice.default(for: .video) else { return }
        
        do {
            let input = try AVCaptureDeviceInput(device: device)
            session.addInput(input)
        } catch {
            print(error.localizedDescription)
        }
        
        let previewLayer = AVCaptureVideoPreviewLayer(session: session)
        previewLayer.frame = view.layer.bounds
        view.layer.addSublayer(previewLayer)
        
        session.startRunning()
    }
    
}

촬영 버튼 추가하기

카메라 뷰 위에 촬영 버튼을 추가하여 사용자가 풍경을 촬영할 수 있도록 합니다.

class CameraViewController: UIViewController {
    
    // ...

    private let captureButton: UIButton = {
        let button = UIButton()
        button.setTitle("촬영", for: .normal)
        button.addTarget(self, action: #selector(didTapCaptureButton), for: .touchUpInside)
        return button
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 카메라 뷰 설정
        
        view.addSubview(captureButton)
    }
    
    @objc private func didTapCaptureButton() {
        // 촬영 버튼 클릭 시 동작 구현
    }
    
}

촬영된 사진 저장하기

촬영 버튼을 클릭하면 촬영된 사진을 저장할 수 있도록 구현합니다.

@objc private func didTapCaptureButton() {
    guard let videoConnection = stillImageOutput?.connection(with: .video) else { return }

    stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) in
        if let buffer = sampleBuffer {
            let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
            if let image = UIImage(data: imageData) {
                // 이미지 저장
                UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
            }
        }
    })
}

이제 Swift를 사용하여 카메라로 풍경을 촬영하는 기본적인 방법을 알아보았습니다. 앱에서 카메라 기능을 활용하여 다양한 기능을 구현할 수 있으니 창의적으로 활용해보시기 바랍니다.

더 많은 정보는 Apple Developer 사이트를 참고하시기 바랍니다.