iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 12
1
自我挑戰組

老蕭咖啡館,情境式學習基礎iOS Swift系列 第 12

[2019鐵人賽Day12]老蕭咖啡館-Light Painting 光影塗鴉的工具(手電筒 Flashlight)

[IT鐵人碎碎念篇]
https://ithelp.ithome.com.tw/upload/images/20181027/20091333MbwZFTV9xR.png

這倒是真的,對自己的履歷與經歷都是有加分的
尤其是在找工作時,會因為有此經歷而有所變數唷!
各位加油!!


嗯,讓我們繼續故事吧


蕭亦翔之後有找我一同去看夜景,而我剛好也想去拍夜景
Man talk就是那樣嗎...(以下省略三萬字)
疑?別給我這麼省略啊!!!(林宇)

好啦,那天他跟我說...

阿宏,其實我一直都喜歡霏語你應該是知道的吧(亦翔)
我知道啊,跟你這麼多年了,哪位不清楚你腦子裡在想什麼,除了霏語不知道而已
啊不,她現在知道了,因你那時年貨大街做的蠢事,哈哈哈
哎呦,那時我一定被附身了,才會說這那種話(亦翔)
老實說,我挺羨慕你們的,也很希望你們能再一起修成正果
「如果自己還能再堅強一點的話,那份壓抑在心裡的思念,或許我會嘗試伸出手握緊妳」(亦翔)
啥!握我幹嘛~滾!
我性向很正常,你離俺遠點,去旁變畫圈圈思你的念!!
呃,你可以在淦話一點,少在那自我感覺良好!(亦翔)
好啦,別說兄弟不幫你一把,反正都來夜曝了,那我們就來玩玩光塗鴉吧!
光塗鴉?(亦翔)

「老蕭的不負責任解說」
Light Painting 光影塗鴉原理
光影塗鴉的原理Very So Easy,只要相機的快門時間拉長,然後拿著一隻激光劍,拍攝下激光劍在揮舞時的軌跡,影像上便會有成像了

激光劍...你當這是星際大戰唷...(亦翔)
啊,那就手機的手電筒也可以啊
那...要畫什麼字啊(亦翔)
那就畫一個「LOVE」吧!

(本故事純屬虛構,如有雷同實屬巧合)


想必,你應該知道我們等等要做什麼App來當練習了吧
手機的手電筒控制App嗎?(林宇)
正是如此,不愧是我看上的女人!!
呃...(林宇)


Step1. 開個新專案名稱為「Flashlight」
https://ithelp.ithome.com.tw/upload/images/20181027/20091333WpIBnfXkaZ.png

Step2. 接著拉出一個Switch元件,等等要來當作開關使用
https://ithelp.ithome.com.tw/upload/images/20181027/20091333NTBZTEFPiw.png

Step3. 步驟1 先點選元件->點選步驟2的地方,叫出元件屬性->步驟3 State選擇「Off」
https://ithelp.ithome.com.tw/upload/images/20181027/20091333pyxCwIhviJ.png

Step4. 開啟「輔助設計模式」,將Switch元件選擇「Value Changed」連結,名稱為「SwitchBtn」
https://ithelp.ithome.com.tw/upload/images/20181028/20091333ensGbDD35V.png

https://ithelp.ithome.com.tw/upload/images/20181028/20091333jTQUpomDG6.png

Step5. 鍵入以下程式碼,可以注意到判斷Switch State值會出現錯誤訊息,因為上面取得的值類別為Any,而非一個布林值,將Any改為UISwitch

@IBAction func SwitchBtn(_ sender: UISwitch) {
    if let AVCDeviceVideo = AVCaptureDevice.default(for: .video) {
        // AVCaptureDevice.default(for: .video) 為獲得後方鏡頭的訪問

        if AVCDeviceVideo.hasTorch {
            // 確認後方鏡頭支援燈光功能
            do {
                //注意改變設備屬性前一定要首先使用lockForConfiguration->使用完之後使用unlockForConfiguration方法解鎖

                // 取得設備配置屬性的訪問權限
                try AVCDeviceVideo.lockForConfiguration()

                // 控制LED
                // 判斷元件State
                if sender.isOn {
                    AVCDeviceVideo.torchMode = .on
                } else {
                    AVCDeviceVideo.torchMode = .off
                }

                AVCDeviceVideo.unlockForConfiguration()
            } catch {
                print(error)
            }
        }
    }
}

[改變前]
https://ithelp.ithome.com.tw/upload/images/20181028/20091333hGoxmlisRw.png

[改變後]
https://ithelp.ithome.com.tw/upload/images/20181028/20091333aWwMpRvJ32.png

Step6. 編譯測試看看,手機點選Switch切換後可順利使用,Finish
[Off狀態]
https://ithelp.ithome.com.tw/upload/images/20181028/20091333s69DHpCU6l.jpg

[On狀態]
)https://ithelp.ithome.com.tw/upload/images/20181028/20091333byLVnHu6vF.jpg

完整程式碼提供:

import UIKit
import AVFoundation //導入AVFoundation

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    @IBAction func SwitchBtn(_ sender: UISwitch) {
        if let AVCDeviceVideo = AVCaptureDevice.default(for: .video) {
            // AVCaptureDevice.default(for: .video) 為獲得後方鏡頭的訪問
            
            if AVCDeviceVideo.hasTorch {
                // 確認後方鏡頭支援燈光功能
                do {
                    //注意改變設備屬性前一定要首先使用lockForConfiguration->使用完之後使用unlockForConfiguration方法解鎖
                    
                    // 取得設備配置屬性的訪問權限
                    try AVCDeviceVideo.lockForConfiguration()
                    
                    // 控制LED
                    // 判斷元件State
                    if sender.isOn {
                        AVCDeviceVideo.torchMode = .on
                    } else {
                        AVCDeviceVideo.torchMode = .off
                    }
                    
                    AVCDeviceVideo.unlockForConfiguration()
                } catch {
                    print(error)
                }
            }
        }
    }
}

上一篇
[2019鐵人賽Day11]老蕭咖啡館-小技巧篇,iOS App Icons(快速製作各尺寸與設置方法)
下一篇
[2019鐵人賽Day13]老蕭咖啡館-眼底星空,卻搞不清方向(內附 簡易南針(compass羅盤)實例)
系列文
老蕭咖啡館,情境式學習基礎iOS Swift30

尚未有邦友留言

立即登入留言