カメラで撮影の時に暗所ではflash LEDが点灯しますが、このflashのみを点灯させてたり、明るさを変えたりしてみたいと思います。
Xcode 11.3.1
torchMode
FlashとかTorchと言われるものでカメラでフラッシュを焚く代わりの明るいLED発光です。
これはそもそもカメラで使うものですが、このライトだけ欲しいと考える人は結構いると思いますし、実際簡単なペンライトの代わりになります。同じように画面全体を白で発光させてライトの代わりにしようというアイディアも出てきます。
カメラ機能に付随するのでAVFoundationをインポートして、
AVCaptureDevice.TorchMode.on
AVCaptureDevice.TorchMode.off
からLEDの点灯を制御できます。
ON/OFFだけでなく、レベルを変えることもできます。
setTorchModeOnWithLevel(level)
これはSliderで可変させてみるとわかりやすいでしょう。
ちなみに、このLEDをflashlightとして使うアプリは概ねRejectされます。
4.3 スパム
…また、すでに飽和状態のカテゴリにアプリケーションを追加することは避けてください。App Storeには、おなら、げっぷ、懐中電灯、カーマ・スートラといったアプリケーションが多数あります。App Storeでスパム行為をすると、Developer Programから除名される可能性があります。
Ref: App Store審査ガイドライン – Apple Developer
この中の懐中電灯がflashlightでLEDを使ったアプリなどをさしています。App Storeを見るとライト以外に様々機能を追加しているアプリがありますが、もはやそれはflashlightアプリでは無いのではと思ってしまいます。
サンプルコード
Buttonタップで点灯・消灯を繰り返す
Sliderで点灯時のレベルを変更してみます。
ViewController.swift
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
import UIKit import AVFoundation class ViewController: UIViewController { var toggle:Bool = true override func viewDidLoad() { super.viewDidLoad() } @IBAction func buttonTapped(_ sender : Any) { if(toggle){ ledFlash(flg: true) toggle = false } else{ ledFlash(flg: false) toggle = true } } func ledFlash(flg: Bool){ let avDevice = AVCaptureDevice.default(for: AVMediaType.video)! if avDevice.hasTorch { do { // torch device lock on try avDevice.lockForConfiguration() if (flg){ // flash LED ON avDevice.torchMode = AVCaptureDevice.TorchMode.on } else { // flash LED OFF avDevice.torchMode = AVCaptureDevice.TorchMode.off } // torch device unlock avDevice.unlockForConfiguration() } catch { print("Torch could not be used") } } else { print("Torch is not available") } } @IBAction func SliderChanged(_ sl: UISlider){ let level = Float(sl.value) if let avDevice = AVCaptureDevice.default(for: AVMediaType.video){ if avDevice.hasTorch { do { // torch device lock on try avDevice.lockForConfiguration() if (level > 0.0){ do { try avDevice.setTorchModeOn(level: level) } catch { print("error") } } else { // flash LED OFF // 注意しないといけないのは、0.0はエラーになるのでLEDをoffさせます。 avDevice.torchMode = AVCaptureDevice.TorchMode.off } // torch device unlock avDevice.unlockForConfiguration() } catch { print("Torch could not be used") } } else { print("Torch is not available") } } else{ // no support } } } |
storyboardでUIButtonとUISliderを画面に置き、UISliderは「Value Changed」をコードと紐付けすると完成です。
Simlatorではエラーになるので実機で実行して確認しましょう。
関連ページ:
- Battery 電池残量を調べる
- フラッシュLEDを点灯させる
- スクリーンの輝度取得と変更
References:
torchMode – AVCaptureDevice | Apple Developer Documentation
AVCaptureDevice.TorchMode – AVCaptureDevice | Apple Developer Documentation
setTorchModeOn(level:) – AVCaptureDevice | Apple Developer Documentation