clyne의 개발 기록
[AVFoundation] 손전등 Torch (Flash) 사용법 본문
안녕하세요! iOS 개발자 CNOO 입니다!!
오늘은 기기 자체 기능인 Torch에 대해서 알아보도록 하곘습니다.
Torch랑 Flash는 어떻게 다를까요??
애플 공식문서를 보면 그 차이가 명확하고 자세하게 서술되어있습니다. (물론 영어로요... ㅎㅎ)
https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html
하지만, 갈길이 바쁜 저희 개발자들에게는 미리 읽어본 사람이 요약해주는 것이 인지상정 아니겠습니까?
1. Torch (손전등)
요약하자면
Torch는 우측 이미지와 같이, 손전등이 켜져있음이 유지되어있는 상태를 의미합니다.
저렇게 손전등이 켜져있는 상태를 원하신다면 Torch를 사용하시면 되겠습니다.
(기기의 플래시가 계속해서 켜져있는 상태입니다.)
2. Flash (카메라 플래시)
AVFoundation에서의 Flash는 오른쪽 사진과 같이, 카메라가 찍히는 순간
번쩍이며 들어오는 빛입니다.
이 중에서 저희가 이번에 볼 것은 Torch입니다. 바로 손전등 기능이죠.
Torch ON OFF 구현하기
이번에도 렛터디의 출석인증 화면에서 새벽에도 쓰기 편리하도록 구현해놓은 Torch기능을 예제로 보여드릴게요!
손전등이 켜졌다 꺼졌다 하죠?
이제 코드로 봅시다!
@IBOutlet weak var torchButton: UIButton!
private let avDevice = AVCaptureDevice.default(for: AVMediaType.video)!
private func bindView(){
if avDevice.hasTorch { // 손전등 기능이 있는 기기인지 분기처리
torchButton.isHidden = false
torchButton.rx.tapGesture().when(.recognized)
.map{ _ in return () }
.bind(onNext: setTorch)
.disposed(by: disposeBag)
} else {
torchButton.isHidden = true
}
}
먼저 avDevice라는 변수에 현재 기기의 정보를 세팅해줍니다.
그리고 저는 손전등 버튼에 RxGesture라는 모듈을 활용하여 클릭시 동작은 바인딩 해주었습니다.
( 굳이 이렇게 안하고, 그냥 터치 액션 넣어주셔도 돼요!!)
private func setTorch(){
do { // 기기의 설정을 잠근 후
try avDevice.lockForConfiguration()
} catch {
print(error)
}
if avDevice.isTorchActive {
setTorchUi(on: false)
avDevice.torchMode = AVCaptureDevice.TorchMode.off
} else {
setTorchUi(on: true)
do {
try avDevice.setTorchModeOn(level: 1.0) // 100% 밝기
} catch {
print(error)
}
}
// 토치를 켜거나 끈 후에 다시 잠금을 해제해주면 됩니다.
avDevice.unlockForConfiguration()
}
// 여기는 UI를 꾸미는 부분입니다. 원하시는대로 구현하시면 됩니다.
private func setTorchUi(on: Bool){
let torchImageName = "flashlight.\(on ? "on" : "off").fill"
torchButton.setImage(UIImage(systemName: torchImageName), for: .normal)
torchButton.backgroundColor = on ? .white : .black
torchButton.tintColor = on ? .black : .white
}
setTorch라는 함수로 손전등을 켜고 끌 수가 있습니다.
손전등을 켜고 끌 때, 사용자가 보는 화면의 아이콘도 같이 움직여주면 좋으니까 setTorchUi라는 메서드로 처리를 해주었는데요
이부분은 여러분들의 입맛에 맞게 사용하시면 되겠습니다! ㅎㅎ
iOS개발자분들에게 도움이 되는 포스팅이 되었으면 좋겠네요!
오늘도 파이팅입니다.
'iOS > Swift' 카테고리의 다른 글
[Swift] 특정 모서리만 코너 Round주기 (corner, border) (0) | 2021.04.30 |
---|---|
[Swift] 간단하게 nil을 필터링! CompactMap! (0) | 2021.04.29 |
[AVFoundation] Camera프리뷰 및 사진찍기 (기본 예제) (0) | 2021.04.27 |
[Swift] 카메라/사진 권한 요청 (0) | 2021.04.26 |
[Swift] WebKit 사용법에 대하여(JS interface Native call) (0) | 2021.04.13 |