오늘의 할일
1. 반대 카메라 찾기(내부, 외부 카메라)
2. 새로운 디바이스를 가지고 session업데이트
3. 토글버튼 업데이트
오늘은 토글버튼을 통해서 카메라 외/내부 카메라 전환을 해보겠습니다.
1. 반대 카메라 찾기
sessionQueue.async {
let currentVideoDevice = self.videoDeviceInput.device
//현재 잡혀진 카메라 디바이스를 찾습니다.
let currentPosition = currentVideoDevice.position
//앞카메라인지 뒤카메라인지 할당해줍니다
let isFront = currentPosition == .front
// 앞 카메라인지 할당해줍니다.
let preferredPosition: AVCaptureDevice.Position = isFront ? .back : .front
//현재카메라가 앞이면 뒤카메라 가져와야되고 현재카메라가 뒤면 앞카메라 가져오라는 명령입니다.
let devices = self.videoDeviceDiscoverySession.devices
var newVideoDevice: AVCaptureDevice?
newVideoDevice = devices.first(where: { device in
return preferredPosition == device.position
//videoDeviceDiscoverySession에 있는 디바이스중에서 해당하는 포지션에있는 카메라를 찾아서 첫번째 거를 뉴디바이스에 세팅해줍니다.
})
2. 새로운 디바이스를 가지고 session업데이트
if let newDevice = newVideoDevice {
do {
let videoDeviceInput = try AVCaptureDeviceInput(device: newDevice)
self.captureSession.beginConfiguration()
self.captureSession.removeInput(self.videoDeviceInput)
//지난시간과 마찬가지로 세션에 넣을 때는 if문으로 물어보고 넣어야합니다.
if self.captureSession.canAddInput(videoDeviceInput) {
self.captureSession.addInput(videoDeviceInput)
self.videoDeviceInput = videoDeviceInput
// 새로운 디바이스 인풋 넣어 줍니다.
} else {
self.captureSession.addInput(self.videoDeviceInput)
// 없으면 기존에 있던 것 다시 넣겠다는 코드입니다.
}
self.captureSession.commitConfiguration()
} catch let error {
print("error occured while creating device input: \(error.localizedDescription)")
}
}
3. 토글버튼 업데이트
func updateSwitchCameraIcon(position: AVCaptureDevice.Position) {
switch position {
case .front:
let image = imageLiteral(resourceName: "ic_camera_front")
switchButton.setImage(image, for: .normal)
case .back:
let image = imageLiteral(resourceName: "ic_camera_rear")
switchButton.setImage(image, for: .normal)
default:
break
}
}
'iOS > Swift 어플 따라하기' 카테고리의 다른 글
[Swift] How to Play a Sound (0) | 2022.06.02 |
---|---|
[Swift] Camera App 4(Photo Capture Delegate, 저장) (0) | 2022.04.27 |
[Swift] Camera App 2(captureSession 구성) (0) | 2022.04.12 |
[Swift] Camera App 1(captureSession설정) (0) | 2022.04.08 |
[Swift] info를 이용한 사용자 권한 받기 (0) | 2022.04.07 |