IOS打開系統(tǒng)相機(jī)的閃光燈
IOS有兩種的拍照和視頻的方式:
1.直接使用UIImagePickerController,這個類提供了一個簡單便捷的拍照與選擇圖片庫里圖片的功能。
2.另一種是通過AVFoundation.framework框架完全自定義拍照的界面和選擇圖片庫界面。我只做了第一種,就先給大家介紹第一種做法:
一、首先調(diào)用接口前,我們需要先判斷當(dāng)前設(shè)備是否支持UIImagePickerController,用isSourceTypeAvailable:來判斷是否可用
二、查看符合的媒體類型,這個時候我們調(diào)用availableMediaTypeForSourceType:判斷
在調(diào)用UIImagePickerController時我們需要加入他的兩個代理方法:
UINavigationControllerDelegate和UIImagePickerControllerDelegate,在調(diào)用攝像頭的時候還可以調(diào)閃光燈,一會代碼里有。
要調(diào)用閃光燈需要先建一個AVCaptureSession類的實例對象:
// Created by 張茫原 on 13-1-23.
// Copyright (c) 2013年 張茫原. All rights reserved.
//
#import <UIKit/UIKit.h>
//調(diào)用閃光燈調(diào)用框架
#import <AVFoundation/AVFoundation.h>
@interface CameraViewController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
{
AVCaptureSession * _AVSession;//調(diào)用閃光燈的時候創(chuàng)建的類
}
@property(nonatomic,retain)AVCaptureSession * AVSession;
@end
在.m的- (void)viewDidLoad里建立4Button,Camera調(diào)用相機(jī)、Library調(diào)用圖片庫、flashlight打開閃光燈、close關(guān)閉閃光燈,這里創(chuàng)建Button的代碼我就不再寫了。
//打開相機(jī)
-(void)addCarema
{
//判斷是否可以打開相機(jī),模擬器此功能無法使用
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];
}
}
打開相機(jī)后,然后需要調(diào)用UIImagePickerControllerDelegate里的方法,拍攝完成后執(zhí)行的方法和點擊Cancel之后執(zhí)行的方法:
//拍攝完成后要執(zhí)行的方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//得到圖片
UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];
//圖片存入相冊
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
[self dismissModalViewControllerAnimated:YES];
}
//點擊Cancel按鈕后執(zhí)行方法
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissModalViewControllerAnimated:YES];
}
調(diào)用相機(jī)照片和保存到圖片庫已經(jīng)完成。
接著介紹打開照片庫:
-(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];
}
}
//選中圖片進(jìn)入的代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[self dismissModalViewControllerAnimated:YES];
}
調(diào)用閃光燈的代碼,由于我也不是很理解,所以沒法加注釋,但是已經(jīng)親測可用,但是調(diào)閃光燈時有一個算是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];
}
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
相關(guān)文章
iOS中使用NSURLConnection處理HTTP同步與異步請求
NSURLConnection的作用現(xiàn)在已經(jīng)基本被NSURLSession所取代,所以我們簡單了解下iOS中使用NSURLConnection處理HTTP同步與異步請求的方法即可:2016-07-07iOS block循環(huán)引用詳解及常見誤區(qū)
這篇文章主要介紹了iOS block循環(huán)引用詳解和應(yīng)用,常見誤區(qū)詳解,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08iOS開發(fā)筆記之鍵盤、靜態(tài)庫、動畫和Crash定位
最近在學(xué)習(xí)iOS開發(fā),進(jìn)行了一些實戰(zhàn),所以下面這篇文章主要給大家介紹了關(guān)于iOS開發(fā)筆記之鍵盤、靜態(tài)庫、動畫和Crash定位的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-04-04詳解Swift中對C語言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法
這篇文章主要介紹了詳解Swift中對C語言接口緩存的使用以及數(shù)組與字符串轉(zhuǎn)為指針類型的方法的相關(guān)資料,這里提供簡單實例,代碼注釋介紹也清楚,需要的朋友可以參考下2017-07-07替代pod update速度慢的lg_pod_plugin安裝使用詳解
這篇文章主要介紹了替代pod update速度慢lg_pod_plugin安裝使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09