手电筒是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. dubbo面向服务使用

    首先启动zookeeper dubbo集群,使用两个dubbo,一个服务,一个调用,使用zookeeper管理 zeekeeper的功能:管理集群,保证集群成员的数据一致性和动作的协调 服务端: se ...

  2. .NET 类库研究必备参考 添加微软企业库源码

    前不久,为大家提供了一个.NET 类库参考源码的网站,扣丁格鲁(谐音“coding guru”),使用了段时间,发现一些不方便的地方,特意做了一些更改,希望大家多提意见,下面是此次更改的地方. 更改1 ...

  3. 笔记:EF出现列名 'Discriminator' 无效、类没有加入数据库上下文也被数据迁移生成表

    笔记: EF出现列名 'Discriminator' 无效: 类没有加入数据库上下文也被数据迁移生成表: 出现该问题一般是使用了某个基类继承了实体类: 原因是code first的POCO实体对象的继 ...

  4. SQLSERVER 使用XP开头的系统默认存储过程

    1. 根据官网上面的内容进行执行命令 EXEC xp_cmdshell 'dir *.exe'; 但是会报错 消息 ,级别 ,状态 ,过程 xp_cmdshell,行 [批起始行 ] SQL Serv ...

  5. matlab for 运算的提速

    [1]主要思想:matlab是按列存储,定义s(nums,1)比定义s(1,nums)要快哦                       需要重复query的元素看看能不能再for之前就定义好 经典案 ...

  6. 【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  7. C++ STL 常用查找算法

    C++ STL 常用查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. ...

  8. codevs1839洞穴勘测

    题目链接:http://codevs.cn/problem/1839/ 题目描述 Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉 ...

  9. Linux中的防火墙----iptables

    防火墙,它是一种位于内部网络与外部网络之间的网络安全系统.一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过. 防火墙根据主要的功能可分为网络层防火墙.应用层防火墙.数据库防火墙. 网 ...

  10. 【bzoj2876】 Noi2012—骑行川藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=2876 (题目链接) 题意 在满足约束条件$${\sum_{i=1}^ns_ik_i(v_i-v_i' ...