Oc UIImagePickerController(拍照、拍攝照片、選取照片)~demo

20170813223628279.png

20170813223703913.png

20170814184745356.png

控制器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
發佈了57 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章