Swift控制手电筒操作(iOS)

手电筒是iphone的一个常用功能,最常用的操作就是turn on和turn off,下面我们来实现一个简单的手电筒操作程序:一个按钮来控制iphone手电筒的On和Off,并且按钮的text也做相应的改变。

首先,我们知道手电筒是依附于某个拍摄设备的,我们要想控制它,必须要获取拍摄设备的instance,然后做相应的操作,所以实现步骤如下:

1. 导入AVFoundation库(主要是利用拍摄设备)

2. 创建Media type为Video的设备实例(AVCaptureDevice)

3. 锁定设备请求更新设置(申请独有的硬件访问权限)

4. 修改手电筒的显示模式(on或者off)

5. 解除设置锁定(step3中的锁定和step5中的解锁是成对出现的,修改完成后必须解锁,要不然其他APP就不能对设备设置进行修改了)

下边上代码吧

~~~~~~~~~~~~~我是代码~~~~~~~~~~~~~~~~~~

//
//  ViewController.swift
//  LightControl
//
//  Created by XuAlvin on 3/1/16.
//  Copyright © 2016年 XuAlvin. All rights reserved.
//

import UIKit
//导入AVFoundation库来调用拍摄设备
import AVFoundation

class ViewController: UIViewController {

    
    @IBOutlet weak var btnLightButton: UIButton!
    
    //创建Video设备
    let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    //手电筒显示状态标识
    var isLightOn = true
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //添加button的style,这块可以不写
        self.btnLightButton.layer.borderWidth=0.5;
        self.btnLightButton.layer.borderColor=UIColor.lightGrayColor().CGColor
        self.btnLightButton.layer.cornerRadius=15
        self.btnLightButton.layer.masksToBounds=true
        self.btnLightButton.backgroundColor=UIColor(colorLiteralRed: 255, green: 255, blue: 255, alpha: 0.5)

    }

    //捕获点击按钮
    @IBAction func lightControlButtonTouched(sender: UIButton) {
        if device==nil{
            return
        }
        do{
            //锁定设备以便进行手电筒状态修改
            try device?.lockForConfiguration()
            if isLightOn{
                //设置手电筒模式为亮灯(On)
                device?.torchMode = AVCaptureTorchMode.On
                isLightOn = false
                //改变按钮标题
                self.btnLightButton.setTitle("Turn Off", forState: UIControlState.Normal)
            }else{
                //设置手电筒模式为关灯(Off)
                device?.torchMode = AVCaptureTorchMode.Off
                isLightOn = true
                //改变按钮标题
                self.btnLightButton.setTitle("Turn On", forState: UIControlState.Normal)
            }
            //解锁设备锁定以便其他APP做配置更新
            device?.unlockForConfiguration()
        }catch{
            return
        }
    }
}

  在AVCaputrueDevice这个类中还有个很多关于手电筒(Torch)的操作,大家可以通过官方文档学习~

posted on 2016-01-03 16:37  Alvin_Xu  阅读(1381)  评论(0编辑  收藏  举报