iOS學習筆記31-從圖冊獲取圖片和視頻

一、從圖冊中獲取本地圖片和視頻

從圖冊中獲取文件,我們使用的是UIImagePickerController,這個類我們在之前的攝像頭中使用過,這里是鏈接:iOS學習筆記27-攝像頭,這里我們使用的是它的另外一個功能,那就是從圖冊中獲取圖片和視頻

基本步驟:
  1. 創建UIImagePickerController對象,并設置代理
  1. 設置拾取源為圖冊,設置可編輯屬性
  2. 如果只是獲取圖片,就設置圖片的媒體類型,如果只是獲取視頻,就設置視頻的媒體類型,如果兩者都要獲取,就設置兩者的媒體類型(實例采用)
  3. 彈出圖片選擇控制器
  4. 處理圖片選擇控制器的代理方法
下面是使用實例:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>

@interface ViewController () <UINavigationControllerDelegate, 
                              UIImagePickerControllerDelegate>

@property (strong, nonatomic) UIImagePickerController *ipc;/* 相冊選擇器 */
@property (strong, nonatomic) AVPlayerViewController *playerVC;/* 視頻播放器 */
@property (weak, nonatomic) IBOutlet UIImageView *showImageView;/* 顯示圖片 */

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //設置顯示圖片可交互
    self.showImageView.userInteractionEnabled = YES;
    //創建AVPlayerViewController控制器
    AVPlayerViewController *playerVC = [[AVPlayerViewController alloc] init];
    playerVC.view.frame = self.showImageView.bounds;
    [self.showImageView addSubview:playerVC.view];
    self.playerVC = playerVC;
    self.playerVC.view.hidden = YES;
}
#pragma mark - UI點擊
/* 點擊打開本地相冊 */
- (IBAction)pickImage:(id)sender
{
    //如果正在播放視頻,停止播放
    if (self.playerVC.player) {
        [self.playerVC.player pause];
    }
    //創建圖片選擇控制器
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    //設置拾取源類型
    ipc.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
    //設置媒體類型,這里設置圖冊支持的所有媒體類型,圖片和視頻
    ipc.mediaTypes = 
            [UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType];
    ipc.delegate = self;//設置代理
    ipc.allowsEditing = YES;//設置可編輯
    self.ipc = ipc;
    //彈出圖片選擇控制器
    [self presentViewController:ipc animated:YES completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate代理方法
/* 選擇了一個圖片或者視頻后調用 */
- (void)imagePickerController:(UIImagePickerController *)picker 
        didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    //獲取選擇文件的媒體類型
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    NSURL *videoURL = nil;
    if ([mediaType isEqualToString:@"public.image"]){//選擇了圖片
        //獲取選擇的圖片
        UIImage *selectedImage = [info objectForKey:UIImagePickerControllerOriginalImage];
        //顯示圖片
        self.showImageView.image = selectedImage;
        self.showImageView.contentMode = UIViewContentModeScaleAspectFill;
        NSLog(@"found an image %@",selectedImage);
        //刪除視頻
        self.playerVC.player = nil;
        self.playerVC.view.hidden = YES;
       
    } else if ([mediaType isEqualToString:@"public.movie"]){//選擇了視頻
        //獲取臨時保存視頻的URL
        videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
        NSLog(@"found a video %@",videoURL);
        //直接創建AVPlayer,它內部也是先創建AVPlayerItem,這個只是快捷方法
        AVPlayer *player = [AVPlayer playerWithURL:videoURL];
        self.playerVC.player = player;
        self.playerVC.view.hidden = NO;
    }
    [self dismissViewControllerAnimated:YES completion:^{
        if (videoURL) {
            //調用控制器的屬性player的開始播放方法
            [self.playerVC.player play];
        }
    }];
}
/* 取消選擇后調用 */
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self dismissViewControllerAnimated:YES completion:^{
        //取消選擇后繼續播放視頻
        if (self.playerVC.player) {
            [self.playerVC.player play];
        }
    }];
    NSLog(@"取消選擇");
}
@end

Demo代碼點這里:learnDemo里面的PickerTest

獲取視頻的時候,會有一個拷貝圖冊里的視頻文件到本地沙盒tmp路徑下的過程,需要等待拷貝完成,才會調用代理方法。
這一節屬于知識補充,就沒有很多新內容,大部分內容之前講過。

如果有什么問題,就在下方評論區中提出!O(∩_∩)O哈!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容