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];
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
推荐阅读
-
win8系统打不开迅雷怎么办?win8系统电脑迅雷无法打开的五种原因及解决方法
-
win7系统打开Excel提示配置标识不正确系统无法开始服务器进程的解决方法图文教程
-
Win8.1系统打开IE浏览器提示服务器正在运行中的解决方法图文教程
-
iOS系统的底层通知框架库示例详解
-
Win7系统打开Microsoft Outlook显示已停止工作的具体解决方法
-
微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
-
[编写高质量iOS代码的52个有效方法](十一)系统框架
-
iOS中使用schema协议调用APP和使用iframe打开APP的例子分析
-
Win7系统右键计算机不能打开管理选项的解决方法
-
Win10系统打开网页提示SSL连接错误的原因及解决方法图文教程