手电筒是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)的操作,大家可以通过官方文档学习~

Swift控制手电筒操作(iOS)的更多相关文章

  1. swift 编写欢迎界面-- ios开发

    转载自:http://blog.csdn.net/u014455765/article/details/49622947 现在很多iOS开发人员都从oc转向Swift, swift 也必将成为ios开 ...

  2. Selenium3 + Python3自动化测试系列三——控制浏览器操作

    控制浏览器操作 控制浏览器窗口大小 在测试过程中,我们在打开浏览器后,根据需求可自定义调整浏览器的尺寸大小.WebDriver提供了set_window_size()方法来设置浏览器的大小. 如果页面 ...

  3. 归纳整理Linux下C语言常用的库函数----内存及字符串控制及操作

    在没有IDE的时候,记住一些常用的库函数的函数名.参数.基本用法及注意事项是很有必要的. 参照Linux_C_HS.chm的目录,我大致将常用的函数分为一下几类: 1. 内存及字符串控制及操作 2. ...

  4. 035——VUE中表单控件处理之使用vue控制select操作文字栏目列表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. selenium控制浏览器操作

    selenium控制浏览器操作 控制浏览器有哪些操作? 控制页面大小 前进.后退 刷新 自动输入.提交 ........  控制页面大小,实例: # -*- coding:utf-8 -*- from ...

  6. VFP控制Excel操作集

    ◆访问EXCEL:ExcelSheet = GetObject('','Excel.Sheet')返回结果为类,则成功.例:ExcelSheet = GetObject('','Excel.Sheet ...

  7. iOS开发——实用篇Swift篇&状态栏操作

    状态栏操作 在Swift开发过程中,针对状态栏操作的过程有很多. 1.在ViewController中操作当前ViewController的状态栏 /** 隐藏状态栏 */ override func ...

  8. iOS - 使用WKWebView时OC调JS的user-select属性控制用户操作

    // 页面加载完成之后调用 - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigatio ...

  9. Swift - 使用HTML5进行iOS开发(将HTML5打包成iOS应用)

    最近越来越流行使用HTML5进行跨平台应用开发,先不说运行效率如何.从人力成本来说,只要写一套html页面就可以打包发布到安卓和iOS等多个平台,确实会省下不少时间和人力(这个领导最喜欢了). 下面简 ...

随机推荐

  1. git使用教程推荐

    Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是 ...

  2. [转帖]Kerberos简介

    1.  Kerberos简介 https://www.cnblogs.com/wukenaihe/p/3732141.html 1.1. 功能 一个安全认证协议 用tickets验证 避免本地保存密码 ...

  3. Best Time to Buy and Sell Stock IV

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  4. 网页正文提取,降噪的实现(readability/Document)

    安装: pip install readability-lxml 使用: # encoding:utf-8import html2textimport requestsimport refrom re ...

  5. lucene介绍

    1.https://blog.csdn.net/shuaicihai/article/details/65111523 2.https://www.cnblogs.com/rodge-run/p/65 ...

  6. Lattice Point or Not UVA - 11768(拓展欧几里得)

    原文地址:https://www.cnblogs.com/zyb993963526/p/6783532.html 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB ...

  7. Min Cost Climbing Stairs - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Min Cost Climbing Stairs - LeetCode 注意点 注意边界条件 解法 解法一:这道题也是一道dp题.dp[i]表示爬到第i层 ...

  8. 【bzoj1026】 SCOI2009—windy数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1026 (题目链接) 题意 在区间${[A,B]}$有多少个数相邻两个数位上的数之差至少为2. Sol ...

  9. tokenizer

    http://blog.csdn.net/beyond__devil/article/details/52829241

  10. bzoj4035【HAOI2015】数组游戏

    题目描述 有一个长度为N的数组,甲乙两人在上面进行这样一个游戏:首先,数组上有一些格子是白的,有一些是黑的.然 后两人轮流进行操作.每次操作选择一个白色的格子,假设它的下标为x.接着,选择一个大小在1 ...