广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    IOS打开系统相机的闪光灯

    2018-04-03 22:30:28 次阅读 稿源:互联网
    广告

    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];
    }

    以上所述就是本文的全部内容了,希望大家能够喜欢。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告