SwiftUIでアプリ開発をしている際に背面についているライトを光らせたい場面がありました。
その際、参考になるサイトが全然見つからず、最終的には海外のYouTubeでようやく見つけた方法なので、備忘録の意味も込めてやり方を書いておきます。
このプログラムでできること
この記事のプログラムを使えば、iPhoneの背面のライトを光らせることができます。
プログラム
実際のプログラムは下記になります。
import SwiftUI
import AVFoundation
struct ContentView: View {
@State var on: Bool = true
var body: some View {
VStack{
Spacer()
Button(action:{
light_OnOff()
}){
Text("ライト").font(.largeTitle)
.padding(10)
.foregroundColor(Color.white)
}.background(Color.black)
Spacer()
}
}
func light_OnOff(){
guard let device = AVCaptureDevice.default(for: .video)
else {return}
if device.hasTorch{
do{
try device.lockForConfiguration()
if on == true{
device.torchMode = .on
on = false
}else{
device.torchMode = .off
on = true
}
}catch{
print("Tourch could not used now!")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
プログラム解説
簡単にプログラムの説明をしていきます。
まずimport部でAVFoundationをimportします。これによってdeviceのライトにアクセスすることができるようになります。これがないと、AVCaptureDevice.default(for: .video)部分でエラーが発生してしまいます。
VStack部は単純にライトのオン、オフを行う関数を呼び出すためのボタンを作っているだけになります。
light_OnOff関数が実際のLEDライトのオンオフ部になります。deviceという変数で動いているiPhoneの情報を用意します。うまくいかなければreturnで戻ります。
もし無事iPhoneの情報が用意できたら、try device.lockForConfiguration()でiPhone操作権を関数がもらって、いざLEDライトのオン、オフを行えます。
device.torchMode = .onでライトが点いている状態に。
device.torchMode = .offでライトが消えている状態に変更することができます。
Do、catchをやっている理由はもし、ライトがうまくつかなかった場合はエラーコードが出るような設計になっているからです。
@State var on: Bool = true
に関してはボタンを1回目に押すとライトがオンに、もう一度押すとライトがオフになるようにするために状態を保存するために変数を用意しています。l
以上がプログラムの説明になります。
本プログラムを活かしたアプリが「叫ぶモールス信号アプリ」になります。
まとめ
今回はSwiftUIでiPhoneのライトをオンオフする方法について書いてきました。
アプリ開発の参考や助けになれば嬉しいです。
かなり苦労してようやく見つけた方法です。
Swiftの情報は多くあっても案外SwiftUIについての情報は少なくて困ります。
Swiftを学んだほうがいいんですかね?と思いつつ、ついつい作るのに慣れているSwiftUIに逃げてしまいます。
そのうちSwiftも挑戦してみようと思います。
では、あなたのアプリ開発がうまくいきますように。
コメント