控制器1:
#import "ViewController.h"
#import <AssetsLibrary/AssetsLibrary.h>//資產庫框架
#import <MobileCoreServices/MobileCoreServices.h>//移動核心服務框架
//設置委託協議
@interface ViewController ()<UIImagePickerControllerDelegate,
UINavigationControllerDelegate>
//拍照
- (IBAction)takePhoto:(UIButton *)sender;
//拍攝視頻
- (IBAction)shootVideo:(UIButton *)sender;
//選取照片
- (IBAction)selectPhotos:(UIButton *)sender;
//圖像選擇控制器
@property(nonatomic,strong)UIImagePickerController *picker;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//初始化圖像選擇控制器
_picker = [[UIImagePickerController alloc]init];
//遵守代理
_picker.delegate =self;
}
#pragma mark - 拍照
- (IBAction)takePhoto:(UIButton *)sender {
// 如果拍攝的攝像頭可用
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera])
{
// 將sourceType設爲UIImagePickerControllerSourceTypeCamera代表拍照或拍視頻
_picker.sourceType = UIImagePickerControllerSourceTypeCamera;
// 設置拍攝照片
_picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
// 設置使用手機的後置攝像頭(默認使用後置攝像頭)
_picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
// 設置使用手機的前置攝像頭。
//picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
// 設置拍攝的照片允許編輯
_picker.allowsEditing =YES;
}else{
NSLog(@"模擬器無法打開攝像頭");
}
// 顯示picker視圖控制器
[self presentViewController:_picker animated:YES completion:nil];
}
#pragma mark - 拍攝視頻
- (IBAction)shootVideo:(UIButton *)sender {
// 如果拍攝的攝像頭可用
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera])
{
// 將sourceType設爲UIImagePickerControllerSourceTypeCamera代表拍照或拍視頻
_picker.sourceType =UIImagePickerControllerSourceTypeCamera;
// 將mediaTypes設爲所有支持的多媒體類型
_picker.mediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:
UIImagePickerControllerSourceTypeCamera];
// 設置拍攝視頻
_picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
// 設置拍攝高質量的視頻
_picker.videoQuality = UIImagePickerControllerQualityTypeHigh;
}else {
NSLog(@"模擬器無法打開攝像頭");
}
// 顯示picker視圖控制器
[self presentViewController:_picker animated:YES completion:nil];
}
#pragma mark - 選取照片
- (IBAction)selectPhotos:(UIButton *)sender {
// 設置選擇載相冊的圖片或視頻
_picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//是否允許編輯
_picker.allowsEditing =NO;
// 顯示picker視圖控制器
[self presentViewController:_picker animated:YES completion:nil];
}
#pragma mark - 圖像選擇控制器代理實現
// 當得到照片或者視頻後,調用該方法
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"info--->成功:%@", info);
// 獲取用戶拍攝的是照片還是視頻
NSString * mediaType = [info objectForKey:UIImagePickerControllerMediaType];
// 判斷獲取類型:圖片,並且是剛拍攝的照片
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]
&& picker.sourceType == UIImagePickerControllerSourceTypeCamera)
{
UIImage *theImage =nil;
// 判斷,圖片是否允許修改
if ([picker allowsEditing])
{
// 獲取用戶編輯之後的圖像
theImage = [info objectForKey:UIImagePickerControllerEditedImage];
}else {
// 獲取原始的照片
theImage = [info objectForKey:UIImagePickerControllerOriginalImage];
}
// 保存圖片到相冊中
UIImageWriteToSavedPhotosAlbum(theImage,self,nil,nil);
}else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//判斷獲取類型:視頻,並且是剛拍攝的視頻
//獲取視頻文件的url
NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
//創建ALAssetsLibrary對象並將視頻保存到媒體庫
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
// 將視頻保存到相冊中
[assetsLibrary writeVideoAtPathToSavedPhotosAlbum:mediaURL
completionBlock:^(NSURL *assetURL,NSError *error)
{
// 如果沒有錯誤,顯示保存成功。
if (!error)
{
NSLog(@"視頻保存成功!");
}else {
NSLog(@"保存視頻出現錯誤:%@", error);
}
}];
}
// 隱藏UIImagePickerController
[picker dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - 當用戶取消時,調用該方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
NSLog(@"用戶取消的拍攝!");
// 隱藏UIImagePickerController
[picker dismissViewControllerAnimated:YES completion:nil];
}
@end