iOS個人整理15-UIImagePickerController,照片選擇器

一、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;


-(void)showCamera{
    //用模態方式呈現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,出來相框的圖片就變了

  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章