투케이2K

171. (ios/swift) AVCaptureDevice 사용해 카메라 플래시 (camera flash) on , off 수행 실시 본문

IOS

171. (ios/swift) AVCaptureDevice 사용해 카메라 플래시 (camera flash) on , off 수행 실시

투케이2K 2022. 8. 19. 11:19
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

import UIKit


// MARK: - [플래시 사용을 위한 import 정의]
import AVFoundation


// MARK: [클래스 정의]
class ViewController: UIViewController {
    
    
    // MARK: [뷰 메모리 로드 수행 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("")
        print("===============================")
        print("[ViewController >> viewDidLoad() :: 뷰 메모리 로드 실시]")
        print("===============================")
        print("")
    }
    
    
    
    
    
    // MARK: - [뷰 화면 표시]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("===============================")
        print("[ViewController >> viewDidAppear() :: 뷰 화면 표시]")
        print("===============================")
        print("")
        
        // [카메라 플래시 켜기 호출]
        self.cameraFlash()
    }
    
    
    
    
    
    // MARK: - [뷰 종료 상태]
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("===============================")
        print("[ViewController >> viewDidDisappear() :: 뷰 종료 상태]")
        print("===============================")
        print("")
        
        // [카메라 플래시 끄기 호출]
        self.cameraFlash()
    }
    
    
    
    
    
    // MARK: - [카메라 플래시 켜기 / 끄기 수행]
    func cameraFlash(){
        print("")
        print("===============================")
        print("[ViewController >> cameraFlash() :: 카메라 플래시 켜시 실시]")
        print("===============================")
        print("")
        
        /*
         // ----------------------------------
         // [사전 필요 설정]
         // ----------------------------------
         1. import 구문 추가 : import AVFoundation
         // ----------------------------------
         2. 실제 디바이스 기기를 사용해서 체크 실시
         // ----------------------------------
         */
        
        DispatchQueue.main.async {
            
            // [guard let 구문을 사용해 플래시 지원 디바이스 체크 실시]
            guard let device = AVCaptureDevice.default(for: .video)
            else {
                print("")
                print("===============================")
                print("[ViewController >> cameraFlash() :: 카메라 플래시 지원하지 않는 디바이스]")
                print("===============================")
                print("")
                return
            }
            
            
            // [터치 지원 확인 실시]
            if device.hasTorch {
                do {
                    
                    // [잠금 기능 획득 실시]
                    try device.lockForConfiguration()
                    
                    print("")
                    print("===============================")
                    print("[ViewController >> cameraFlash() :: 카메라 플래시 활성 상태 여부 확인]")
                    print("[플래시 활성 상태 :: \(device.torchMode)]")
                    print("===============================")
                    print("")
                    
                    // [On 인 경우 >> Off / Off 인 경우 >> On 으로 변경 실시]
                    if device.torchMode == .on { // [off 로 변경]
                        device.torchMode = .off
                        print("")
                        print("===============================")
                        print("[ViewController >> cameraFlash() :: 카메라 플래시 끄기 실시]")
                        print("===============================")
                        print("")
                    }
                    else { // [on 로 변경]
                        device.torchMode = .on
                        print("")
                        print("===============================")
                        print("[ViewController >> cameraFlash() :: 카메라 플래시 켜기 실시]")
                        print("===============================")
                        print("")
                    }
                }
                catch {
                    print("")
                    print("===============================")
                    print("[ViewController >> cameraFlash() :: 카메라 플래시 활성 에러]")
                    print("[error :: \(error.localizedDescription)]")
                    print("===============================")
                    print("")
                }
            }
            else {
                print("")
                print("===============================")
                print("[ViewController >> cameraFlash() :: 터치 지원하지 않는 디바이스]")
                print("===============================")
                print("")
            }
        }
    }



} // [클래스 종료]
 

[결과 출력]

 

 

반응형
Comments