一、从图册中获取本地图片和视频

从图册中获取文件,我们使用的是UIImagePickerController,这个类我们在之前的摄像头中使用过,这里是链接:iOS学习笔记27-摄像头,这里我们使用的是它的另外一个功能,那就是从图册中获取图片和视频

基本步骤:
  1. 创建UIImagePickerController对象,并设置代理
  2. 设置拾取源为图册,设置可编辑属性
  3. 如果只是获取图片,就设置图片的媒体类型,如果只是获取视频,就设置视频的媒体类型,如果两者都要获取,就设置两者的媒体类型(实例采用)
  4. 弹出图片选择控制器
  5. 处理图片选择控制器的代理方法
下面是使用实例:
#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路径下的过程,需要等待拷贝完成,才会调用代理方法。
这一节属于知识补充,就没有很多新内容,大部分内容之前讲过。

iOS学习笔记31-从图册获取图片和视频的更多相关文章

  1. iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取到 ...

  2. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  3. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  4. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  5. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  6. iOS学习笔记-自定义过渡动画

    代码地址如下:http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swif ...

  7. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

  8. iOS学习笔记22-推送通知

    一.推送通知 推送通知就是向用户推送一条信息来通知用户某件事件,可以在应用退到后台后,或者关闭后,能够通过推送一条消息通知用户某件事情,比如版本更新等等. 推送通知的常用应用场景: 一些任务管理APP ...

  9. iOS学习笔记20-地图(二)MapKit框架

    一.地图开发介绍 从iOS6.0开始地图数据不再由谷歌驱动,而是改用自家地图,当然在国内它的数据是由高德地图提供的. 在iOS中进行地图开发主要有三种方式: 利用MapKit框架进行地图开发,利用这种 ...

随机推荐

  1. Mysql的介绍和安装注意

    1.Mysql所属公司:Oracle 2.数据库类型:关系型数据库 3.开发语言:C++ 4.版本:企业收费版和社区免费版 5.搭建Mysql环境 点击下一步直到遇到选择数据库编码的时候选择utf-8 ...

  2. coredata 关系的删除规则

    http://blog.csdn.net/Hello_Hwc/article/details/46375517 关系的删除规则-Delete Rule Deny 关系的destination中只要有一 ...

  3. hadoop相关资料集锦

    1 Hadoop集群系列集锦http://www.cnblogs.com/xia520pi/archive/2012/04/08/2437875.html 2 Hadoop和MapReduce详解ht ...

  4. cocos2dx 使用XMLHttpRequest时回调status为0的问题

    今天使用cocos连接http访问时,使用XMLHttpRequest在pc上反问时正常的返回了status=0,但是在android上去返回status是0,看了一下底层代码, 发现status只有 ...

  5. XAMPP vhost 配置(403问题解决)

    <VirtualHost *:80> DocumentRoot "C:/xampp/htdocs/" ServerName localhost </Virtual ...

  6. $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别

    $HTTP_RAW_POST_DATA   The RAW / uninterpreted HTTP POst information can be accessed with:   $GLOBALS ...

  7. Ubuntu下搭建多用户多权限ftp

    #1.切换root用户模式 (已在root模式下的请忽略) sudo -i #然后提示你输入当前用户密码,输入密码后回车后如果密码正确控制台就变成root@***:/# 了. #2.更新软件源 apt ...

  8. 使用laravel框架的eloquent\DB模型连接多个数据库

    1.配置.env文件 DB_HOST_TRAILER=127.0.0.1DB_PORT_TRAILER=3306DB_DATABASE_TRAILER=htms_trailerDB_USERNAME_ ...

  9. DeepFaceLab小白入门(1):软件简介!

    简介 DeepFaceLab是一种利用深度学习识别和交换图片和视频中的人脸的工具 这是一个github上的开源项目,所有人都可以查看源代码也能免费使用.个人认为这个项目的最大优点就是安装超级简单,几乎 ...

  10. 1、python-初探

    语言包括编译型语言和解释型语言编译型:全部翻译,再执行:c.c++解释型:边执行边翻译:python.php.java.c#.perl.ruby.javascript 一.系统位数32位系统内存的最大 ...