一、UIImagePickerController
這個文章大部分摘別人的,自己總結下來更方便用一點
UIImagePickerController是系統提供的用來獲取圖片和視頻的接口
獲取的途徑爲相機,圖庫,相冊
分爲以下幾個步驟:
1. 初始化UIImagePickerController 類;
2. 設置UIImagePickerController 實例的數據來源類型(下面解釋);
3. 設置代理;
4. 如果需要做圖片修改的話設置allowsEditing =yes。
數據來源的類型有三種
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屬性,可以實現旋轉,縮放功能
// imagepicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI*45/180);
// imagepicker.cameraViewTransform = CGAffineTransformMakeScale(1.5, 1.5);
//所有含有cameraXXX的屬性都必須要sourceType是UIImagePickerControllerSourceTypeCamera時設置纔有效果,否則會有異常
//設置UIImagePickerController的代理
imagepicker.delegate = self;
//用模態方式呈現imagepicker,這個方法之後就會跳到對應的源位置,相機或者相冊圖庫
[self presentModalViewController:imagepicker animated:YES];
}
代理方法
當用戶選取完成後調用;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
當用戶取消選取時調用;
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info;
最後是我自己的實現,一般也就這麼用了,點擊相框進入相冊,選一張圖點choose,出來後相框就是選擇的圖了
//
#import "ThirdViewController.h"
//簽訂協議
@interface ThirdViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (nonatomic,retain)UIImageView *myImageView;
@end
@implementation ThirdViewController
- (void)viewDidLoad {
[super viewDidLoad];
//創建一塊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];
}
//實現手勢的方法,進入相冊
-(void)selectImage:(UIButton*)sender
{ //創建ImagePickController
UIImagePickerController *myPicker = [[UIImagePickerController alloc]init];
//創建源類型
UIImagePickerControllerSourceType mySourceType = UIImagePickerControllerSourceTypePhotoLibrary;
myPicker.sourceType = mySourceType;
//設置代理
myPicker.delegate = self;
//設置可編輯
myPicker.allowsEditing = YES;
//通過模態的方式推出系統相冊
[self presentViewController:myPicker animated:YES completion:^{
NSLog(@"進入相冊");
}];
}
#pragma mark -- 實現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(@"模態返回") ;
}];
}
@end
效果如下
中間有個相框,點一下進入相冊,在相冊中選擇一張圖片,點choose,出來相框的圖片就變了