IOS打开系统相机的闪光灯
ios有两种的拍照和视频的方式:
1.直接使用uiimagepickercontroller,这个类提供了一个简单便捷的拍照与选择图片库里图片的功能。
2.另一种是通过avfoundation.framework框架完全自定义拍照的界面和选择图片库界面。我只做了第一种,就先给大家介绍第一种做法:
一、首先调用接口前,我们需要先判断当前设备是否支持uiimagepickercontroller,用issourcetypeavailable:来判断是否可用
二、查看符合的媒体类型,这个时候我们调用availablemediatypeforsourcetype:判断
在调用uiimagepickercontroller时我们需要加入他的两个代理方法:
uinavigationcontrollerdelegate和uiimagepickercontrollerdelegate,在调用摄像头的时候还可以调闪光灯,一会代码里有。
要调用闪光灯需要先建一个avcapturesession类的实例对象:
// created by 张茫原 on 13-1-23.
// copyright (c) 2013年 张茫原. all rights reserved.
//
#import <uikit/uikit.h>
//调用闪光灯调用框架
#import <avfoundation/avfoundation.h>
@interface cameraviewcontroller : uiviewcontroller<uinavigationcontrollerdelegate, uiimagepickercontrollerdelegate>
{
avcapturesession * _avsession;//调用闪光灯的时候创建的类
}
@property(nonatomic,retain)avcapturesession * avsession;
@end
在.m的- (void)viewdidload里建立4button,camera调用相机、library调用图片库、flashlight打开闪光灯、close关闭闪光灯,这里创建button的代码我就不再写了。
//打开相机
-(void)addcarema
{
//判断是否可以打开相机,模拟器此功能无法使用
if ([uiimagepickercontroller issourcetypeavailable:uiimagepickercontrollersourcetypecamera]) {
uiimagepickercontroller * picker = [[uiimagepickercontroller alloc]init];
picker.delegate = self;
picker.allowsediting = yes; //是否可编辑
//摄像头
picker.sourcetype = uiimagepickercontrollersourcetypecamera;
[self presentmodalviewcontroller:picker animated:yes];
[picker release];
}else{
//如果没有提示用户
uialertview *alert = [[uialertview alloc] initwithtitle:@"error" message:@"你没有摄像头" delegate:nil cancelbuttontitle:@"drat!" otherbuttontitles:nil];
[alert show];
}
}
打开相机后,然后需要调用uiimagepickercontrollerdelegate里的方法,拍摄完成后执行的方法和点击cancel之后执行的方法:
//拍摄完成后要执行的方法
-(void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingmediawithinfo:(nsdictionary *)info
{
//得到图片
uiimage * image = [info objectforkey:uiimagepickercontrolleroriginalimage];
//图片存入相册
uiimagewritetosavedphotosalbum(image, nil, nil, nil);
[self dismissmodalviewcontrolleranimated:yes];
}
//点击cancel按钮后执行方法
-(void)imagepickercontrollerdidcancel:(uiimagepickercontroller *)picker
{
[self dismissmodalviewcontrolleranimated:yes];
}
调用相机照片和保存到图片库已经完成。
接着介绍打开照片库:
-(void)openpiclibrary
{
//相册是可以用模拟器打开的
if ([uiimagepickercontroller issourcetypeavailable:uiimagepickercontrollersourcetypephotolibrary]) {
uiimagepickercontroller * picker = [[uiimagepickercontroller alloc]init];
picker.delegate = self;
picker.allowsediting = yes;//是否可以编辑
//打开相册选择照片
picker.sourcetype = uiimagepickercontrollersourcetypephotolibrary;
[self presentmodalviewcontroller:picker animated:yes];
[picker release];
}else{
uialertview *alert = [[uialertview alloc] initwithtitle:@"error" message:@"你没有摄像头" delegate:nil cancelbuttontitle:@"drat!" otherbuttontitles:nil];
[alert show];
}
}
//选中图片进入的代理方法
-(void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingimage:(uiimage *)image editinginfo:(nsdictionary *)editinginfo
{
[self dismissmodalviewcontrolleranimated:yes];
}
调用闪光灯的代码,由于我也不是很理解,所以没法加注释,但是已经亲测可用,但是调闪光灯时有一个算是bug吧,闪光灯会闲一下,然后再一直亮
-(void)openflashlight
{
avcapturedevice * device = [avcapturedevice defaultdevicewithmediatype:avmediatypevideo];
if (device.torchmode == avcapturetorchmodeoff) {
//create an av session
avcapturesession * session = [[avcapturesession alloc]init];
// create device input and add to current session
avcapturedeviceinput * input = [avcapturedeviceinput deviceinputwithdevice:device error:nil];
[session addinput:input];
// create video output and add to current session
avcapturevideodataoutput * output = [[avcapturevideodataoutput alloc]init];
[session addoutput:output];
// start session configuration
[session beginconfiguration];
[device lockforconfiguration:nil];
// set torch to on
[device settorchmode:avcapturetorchmodeon];
[device unlockforconfiguration];
[session commitconfiguration];
// start the session
[session startrunning];
// keep the session around
[self setavsession:self.avsession];
[output release];
}
}
-(void)closeflashlight
{
[self.avsession stoprunning];
[self.avsession release];
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
上一篇: iOS、Mac OS X系统中编程实现汉字转拼音的方法(超级简单)
下一篇: 北京过年吃的传统食物
推荐阅读
-
Win7系统每次打开ie浏览器都要重新登录的原因及解决方法图文教程
-
任正非:华为不需2-3年就能打造一个媲美iOS的鸿蒙手机系统
-
Win10系统EML文件怎么打开?Win10打开EML文件的四种方法详解
-
封闭了这么久的iOS系统:苹果准备给它开扇窗
-
iOS还是最安全的系统么?黑客:2秒破解 3秒越狱
-
iPad总提示IOS系统更新怎么办 iPad关闭系统更新提醒的设置方法
-
Windows系统打开计算器的快捷键 计算器快捷键大全
-
win8系统打不开迅雷怎么办?win8系统电脑迅雷无法打开的五种原因及解决方法
-
win7系统打开Excel提示配置标识不正确系统无法开始服务器进程的解决方法图文教程
-
Win8.1系统打开IE浏览器提示服务器正在运行中的解决方法图文教程