您的位置:首页 > 移动开发 > IOS开发

iOS 打开本地图库看图看视频

2016-03-18 16:48 387 查看
//

//  ViewController.m

//  PhotoAndVideo

//

//  Created by LuoShimei on 16/3/15.

//  Copyright © 2016年 Shime. All rights reserved.

//

#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

#import <MobileCoreServices/MobileCoreServices.h>

#import <AVKit/AVKit.h>

@interface
ViewController () <UINavigationControllerDelegate,UIImagePickerControllerDelegate>

@property(nonatomic,strong)
UIImagePickerController *pickerVC;

@property (weak,
nonatomic) IBOutlet
UIImageView *imageView;

@property(nonatomic,strong)
AVPlayer *player;

@property(nonatomic,strong)
AVPlayerLayer *layer;

@property(nonatomic,strong)
NSURL *url;

@end

@implementation ViewController

- (AVPlayer *)player {

    if(_player ==
nil) {

        _player = [[AVPlayer
alloc] init];

        AVPlayerItem *item = [AVPlayerItem
playerItemWithURL:self.url];

        _player = [AVPlayer
playerWithPlayerItem:item];

        AVPlayerLayer *layer = [AVPlayerLayer
playerLayerWithPlayer:self.player];

        layer.frame =
CGRectMake(0,
20, self.view.bounds.size.width,
200);

        layer.backgroundColor = (__bridge
CGColorRef _Nullable)([UIColor
lightGrayColor]);

        self.layer = layer;

        [self.view.layer
addSublayer:layer];

    }

    return
_player;

}

- (UIImagePickerController *)pickerVC{

    if (!_pickerVC) {

        _pickerVC = [UIImagePickerController
new];

    }

    return
_pickerVC;

}

//选择图片后者是视频文件

- (IBAction)selectSource:(id)sender {

    NSLog(@"selectSource方法被调用...");

    

   
//进入图库选择资源的时候,应该暂停视频的播放

    [self.player
pause];

    

    

    //注意

//    self.pickerVC = [UIImagePickerController new];

    /** pickerVC.delegate代理需要遵循两个协议

     *  UINavigationControllerDelegate,UIImagePickerControllerDelegate

     */

    self.pickerVC.delegate =
self;

    

    //开启编辑功能

    self.pickerVC.allowsEditing =
YES;

    

    

    /**
若果要使用kUTTypeImage,kUTTypeMovie等类型需要导入MobileCoreServices.framework

        框架,而且需要#import <MobileCoreServices/MobileCoreServices.h>

    **/

   
//设置选择的数据类型,默认的情况下只显示图片

    self.pickerVC.mediaTypes =
@[(NSString *)kUTTypeImage,(NSString *)kUTTypeMovie];

    

   
/*  文件的来源:默认的情况下是来自图库,即:

        UIImagePickerControllerSourceTypeCamera
:来自摄像机

        UIImagePickerControllerSourceTypePhotoLibrary
:来自图库

        UIImagePickerControllerSourceTypeSavedPhotosAlbum
: 来自...

    */

    self.pickerVC.sourceType
= UIImagePickerControllerSourceTypePhotoLibrary;

    

   
//推出图库的窗口

    [self
presentViewController:self.pickerVC
animated:YES
completion:^{

        NSLog(@"推出图库的窗口...");

    }];

}

#pragma -- mark UIImagePickerControllerDelegate代理类的方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable
NSDictionary<NSString *,id> *)editingInfo
NS_DEPRECATED_IOS(2_0,
3_0){

}

/**

 *  当用户选取完成后调用

 *

 *  @param info   选取的信息都在info中,info
是一个字典

    UIImagePickerControllerMediaType ;指定用户选择的媒体类型

    UIImagePickerControllerOriginalImage ;原始图片

    UIImagePickerControllerEditedImage ;修改后的图片

    UIImagePickerControllerCropRect ;裁剪尺寸

    UIImagePickerControllerMediaURL ;媒体的URL

    UIImagePickerControllerReferenceURL ;原件的URL

    UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效

 */

- (void)imagePickerController:(UIImagePickerC
c439
ontroller *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString
*,id> *)info{

    

    NSString *imageType = [info
objectForKey:UIImagePickerControllerMediaType];

    if ([imageType
isEqualToString:(NSString *)kUTTypeImage]) {//如果选择是图片

        if (self.player !=
nil) {

            self.player =
nil;

            [self.layer
removeFromSuperlayer];

        }

        NSLog(@"选择的是图片...");

        UIImage *image = info[UIImagePickerControllerEditedImage];

        self.imageView.image = image;

    }else if ([imageType
isEqualToString:(NSString *)kUTTypeMovie]){

        self.player =
nil;

        NSLog(@"选择的是视频...");

        self.imageView.image =
nil;

        

        

       
//选中视频后,保存视频的地址

        self.url = info[UIImagePickerControllerReferenceURL];

        

        if (self.layer)
{//如果之前已经播放过视频,则将之前添加的layer先移除

            [self.layer
removeFromSuperlayer];

        }

        

        [self.player
play];

    }

    

   
//让显示图库的窗口消失

    [self
dismissViewControllerAnimated:YES
completion:^{

        NSLog(@"让显示图库的窗口消失。。。");

    }];

}

/**

 *  当用户取消选取时调用

 *

 */

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

}

//暂停播放

- (IBAction)pauseVideo:(id)sender {

    NSLog(@"暂停播放。。。");

    [self.player
pause];

}

//继续播放

- (IBAction)beginVideo:(id)sender {

    NSLog(@"继续播放。。。");

    [self.player
play];

}

- (void)viewDidLoad {

    [super
viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning {

    [super
didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: