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
// 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
相关文章推荐
- iOS 随记
- iOS获取字符串(中英文都行)大写首字母
- ios学习笔记——NSURLSession
- IOS开源轮播组件 BannerScrollViewMasonry.h
- 关于iOS自定义返回按钮右滑返回手势失效的解决:
- iOS----Asset Catalog的用法
- iOS block 的用法
- 关于iOS上图图片压缩问题解决办法
- iOS 创建上线证书
- iOS NSRunLoop详解
- [ios]ScrollView中根据滚动距离来判断当前页数
- iOS集成银联支付
- IOS 视图插入到最顶层
- iOS 拍照和相机的基本使用
- github上创建ios工程
- ios 发短息 发邮件 打电话
- iOS把所有界面的状态栏的字体颜色都设置为白色
- IOS 线程
- IOS性能调优系列:使用Instruments动态分析内存泄漏,调优instruments
- 解除滑动手势问题