一、UIImagePickerController
這個文章大部分摘別人的杀餐,自己總結下來更方便用一點
UIImagePickerController是系統(tǒng)提供的用來獲取圖片和視頻的接口
獲取的途徑為相機,圖庫顶岸,相冊
分為以下幾個步驟:
- 初始化UIImagePickerController 類;
- 設置UIImagePickerController 實例的數(shù)據(jù)來源類型(下面解釋)燕侠;
- 設置代理凸主;
- 如果需要做圖片修改的話設置allowsEditing =yes鸥拧。
數(shù)據(jù)來源的類型有三種
enum {
UIImagePickerControllerSourceTypePhotoLibrary ,//來自圖庫
UIImagePickerControllerSourceTypeCamera ,//來自相機
UIImagePickerControllerSourceTypeSavedPhotosAlbum //來自相冊
};
用之前要檢測設備是否支持
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
NSLog(@"支持相機");
}
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
NSLog(@"支持圖庫");
}
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
NSLog(@"支持相片庫");
}
二、UIImagePickerController屬性詳解:
//指定使用照相機模式,可以指定使用相冊/照片庫
imagepicker.sourceType = UIImagePickerControllerSourceTypeCamera;
//設置當拍照完或在相冊選完照片后累榜,是否跳到編輯模式進行圖片剪裁营勤。只有當showsCameraControls屬性為true時才有效果
imagepicker.allowsEditing = YES;
//設置拍照時的下方的工具欄是否顯示,如果需要自定義拍攝界面,則可把該工具欄隱藏
imagepicker.showsCameraControls = YES;
//設置使用后置攝像頭葛作,可以使用前置攝像頭
imagepicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
//設置閃光燈模式
/* typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) { UIImagePickerControllerCameraFlashModeOff = -1, UIImagePickerControllerCameraFlashModeAuto = 0, UIImagePickerControllerCameraFlashModeOn = 1 }; */
imagepicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
//設置相機支持的類型寿羞,拍照和錄像
imagepicker.mediaTypes = @[(NSString*)kUTTypeImage,(NSString*)kUTTypeMovie];
//設置拍攝時屏幕的view的transform屬性,可以實現(xiàn)旋轉赂蠢,縮放功能
// imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);
// imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);
//所有含有cameraXXX的屬性都必須要sourceType是UIImagePickerControllerSourceTypeCamera時設置才有效果绪穆,否則會有異常
//設置UIImagePickerController的代理
imagepicker.delegate = self;
-(void)showCamera{ //用模態(tài)方式呈現(xiàn)imagepicker,這個方法之后就會跳到對應的源位置虱岂,相機或者相冊圖庫 [self presentModalViewController:imagepicker animated:YES];}
代理方法
當用戶選取完成后調用霞幅;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
當用戶取消選取時調用;
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info;
最后是我自己的實現(xiàn)量瓜,一般也就這么用了司恳,點擊相框進入相冊,選一張圖點choose绍傲,出來后相框就是選擇的圖了
#import "ThirdViewController.h"
//簽訂協(xié)議
@interface ThirdViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (nonatomic,retain)UIImageView *myImageView;
@end
@implementation ThirdViewController
- (void)viewDidLoad {
[super viewDidLoad];
//創(chuàng)建一塊imageView
_myImageView = [[UIImageView alloc]initWithFrame:CGRectMake((414-300)/2, 200, 300, 300)];
_myImageView.backgroundColor = [UIColor whiteColor];
//打開交互
_myImageView.userInteractionEnabled = YES;
[self.view addSubview:_myImageView];
//添加一個手勢
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(selectImage:)];
[_myImageView addGestureRecognizer:tapGesture];
}
//實現(xiàn)手勢的方法扔傅,進入相冊
-(void)selectImage:(UIButton*)sender
{ //創(chuàng)建ImagePickController
UIImagePickerController *myPicker = [[UIImagePickerController alloc]init];
//創(chuàng)建源類型
UIImagePickerControllerSourceType mySourceType = UIImagePickerControllerSourceTypePhotoLibrary;
myPicker.sourceType = mySourceType;
//設置代理
myPicker.delegate = self;
//設置可編輯
myPicker.allowsEditing = YES;
//通過模態(tài)的方式推出系統(tǒng)相冊
[self presentViewController:myPicker animated:YES completion:^{
NSLog(@"進入相冊");
}];
}
#pragma mark -- 實現(xiàn)imagePicker的代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
//取得所選取的圖片,原大小,可編輯等,info是選取的圖片的信息字典
UIImage *selectImage = [info objectForKey:UIImagePickerControllerEditedImage];
//設置圖片進相框
self.myImageView.image = selectImage;
[picker dismissViewControllerAnimated:YES completion:^{
NSLog(@"模態(tài)返回") ;
}];
}
@end
效果如下
中間有個相框烫饼,點一下進入相冊猎塞,在相冊中選擇一張圖片,點choose杠纵,出來相框的圖片就變了