用法简单的图片和视频播放的框架Demo
最近在恶补自己不足的基础知识,偶然在一个QQ群里看到作为同行业的大神们在开源自己的代码。并且在炫耀说让我们找Bug,于是出于好奇就看了下,点开了一个关于图片和视频播放的Demo。也就是接下来我要说的这个Demo。
至于为什么要写说一下这个Demo,是因为最近做的项目有涉及这方面的知识。反正不管出于何种原因,多学点知识总没有错的。下面简单介绍下此Demo的功能。
功能:
支持哪些状态:
1.图片已发布(网络图片浏览、流水布局)
2.图片未发布(本地图片上传\发布\预览)
3.视频播放
支持哪些布局:
流水布局 、 线性布局
支持哪些手势:
单击 、双击 、捏合 、旋转、拖拽、侧滑
什么地方可以用到这个框架:
主要用于社交app,用于呈现一组图片或播放一些标准的MP4文件。
依赖哪些第三方框架:
- 图片浏览依赖框架
MBProgressHUDSDWebImage
- 视频播放依赖框架
HttpServer
PYPhotosView框架的主要类
PYPhotosView
@interface PYPhotosView : UIScrollView /** 代理 */
@property (nonatomic, weak) id<PYPhotosViewDelegate> delegate; /** 网络图片相册 */
@property (nonatomic, strong) NSArray *photos;
/** 本地相册图片数组(默认最多为九张,当传入图片数组长度超过九张时,取前九张) */
@property (nonatomic, strong) NSMutableArray *images;
/** 视频链接(视频来自网络) **/
@property (nonatomic, copy) NSString *movieNetworkUrl;
/** 本地视频地址(带有文件类型后缀) */
@property (nonatomic, copy) NSString *movieLocalUrl; /** 所有图片的状态(默认为已发布状态) */
@property (nonatomic, assign) PYPhotosViewState photosState;
/** 图片布局(默认为流水布局) */
@property (nonatomic, assign) PYPhotosViewLayoutType layoutType;
/** 图片分页指示类型(默认为pageControll。当图片超过九张,改为label显示) */
@property (nonatomic, assign) PYPhotosViewPageType pageType; /** 图片间距(默认为5) */
@property (nonatomic, assign) CGFloat photoMargin;
/** 图片的宽 (默认为70) */
@property (nonatomic, assign) CGFloat photoWidth;
/** 图片的高 (默认为70) */
@property (nonatomic, assign) CGFloat photoHeight; /** 每行最多个数(默认为3), 当图片布局为线性布局时,此设置失效 */
@property (nonatomic, assign) NSInteger photosMaxCol;
/** 当图片上传前,最多上传的张数,默认为9 */
@property (nonatomic, assign) NSInteger imagesMaxCountWhenWillCompose; /** 快速创建photosView对象 */
+ (instancetype)photosView;
/** photos : 保存图片链接的数组 */
+ (instancetype)photosViewWithPhotos:(NSArray *)photos;
/** images : 存储本地图片的数组 */
+ (instancetype)photosViewWithImages:(NSMutableArray *)images; /**
* photos : 保存图片链接的数组
* type : 布局类型(默认为流水布局)
*/
+ (instancetype)photosView:(NSArray *)photos layoutType:(PYPhotosViewLayoutType)type; /**
* photos : 保存图片链接的数组
* maxCol : 每行最多显示图片的个数
*/
+ (instancetype)photosView:(NSArray *)photos photosMaxCol:(NSInteger)maxCol; /** 根据图片个数和图片状态自动计算出PYPhontosView的size */
- (CGSize)sizeWithPhotoCount:(NSInteger)count photosState:(NSInteger)state; /**
* 刷新图片(未发布)
* images : 新的图片数组
*/
- (void)reloadDataWithImages:(NSMutableArray *)images; @end
如何使用PYPhotosView
- 使用Cocoapods:
pod "PYPhotosView"- 导入主头文件
#import <PYPhotosView.h>
手动导入:
- 将
PYPhotosView文件夹中的所有文件拽入项目中 - 导入主头文件
#import "PYPhotosView.h" 使用注意:如果项目本来就有依赖的第三方框架:MBProgressHUD(用于图片浏览、发布)、SDWebImage(用于图片浏览、发布)、HttpServer(用于视频播放、缓存),就不必重复导入, 如果没有,选择Dependency文件夹中,项目不存在的框架拽入项目。
视频播放使用注意:
需要在
AppDelegate.m导入HTTPServer.h、DDLog.h、DDTTYLogger.h头文件并实现以下这些方法(具体参考PYPhotosViewExample中的AppDelegate.m)文件
- (void)startServer
{
// Start the server (and check for problems)
NSError *error;
if([httpServer start:&error])
{
NSLog(@"Started HTTP Server on port %hu", [httpServer listeningPort]);
}
else
{
NSLog(@"Error starting HTTP Server: %@", error);
}
} // 程序启动完毕调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [DDLog addLogger:[DDTTYLogger sharedInstance]]; // 创建本地服务器
httpServer = [[HTTPServer alloc] init];
// 设置通讯类型为tcp
[httpServer setType:@"_http._tcp."];
// 设置端口
[httpServer setPort:12345]; // Serve files from our embedded Web folder
NSString *webPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches/PYPhotosView/Temp"];
NSFileManager *fileManager=[NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:webPath])
{
[fileManager createDirectoryAtPath:webPath withIntermediateDirectories:YES attributes:nil error:nil];
}
[httpServer setDocumentRoot:webPath]; [self startServer]; return YES;
} // 程序进入后台运行时调用
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[httpServer stop];
} // 程序回到前台运行时调用
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self startServer];
}- 将
具体使用(详情见示例程序PYPhotosViewExample)
已发布(网络图片浏览)
示例代码:
// 1.1 创建图片链接数组
NSMutableArray *imageUrls = [NSMutableArray array]; for (int i = 0; i < 9; i++) {
// 1.2 图片链接
NSString *imageUrl = [NSString stringWithFormat:@"https://github.com/iphone5solo/learngit/raw/master/imagesForPhotosView/image%02d.jpg", i + 1];
// 1.3 添加图片链接
[imageUrls addObject:imageUrl];
} // 2. 创建一个photosView
PYPhotosView *photosView = [PYPhotosView photosViewWithPhotos:imageUrls]; // 3. 添加photosView
[self.view addSubview:photosView];
未发布(本地图片上传\发布\预览)
示例代码:
// 1. 创建本地图片数组
NSMutableArray *imagesM = [NSMutableArray array];
for (int i = 0; i < arc4random_uniform(4) + 1; i++) {
[imagesM addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%02d", i + 1]]];
} // 2.1 设置本地图片
PYPhotosView *photosView = [PYPhotosView photosViewWithImages:imagesM]; // 3. 设置代理
photosView.delegate = self; // 4. 添加photosView
[self.view addSubview:photosView];
视频播放
示例代码
// 1. 创建视频播放的photosView
PYPhotosView *moviePhotosView = [PYPhotosView photosView]; // 2. 设置视频的网络链接
moviePhotosView.movieNetworkUrl = @"http://static.tripbe.com/videofiles/20121214/9533522808.f4v.mp4"; // 3. 添加photosView
[self.view addSubview:moviePhotosView];
自定义photosView
通过设置photosView的对象属性值即可修改
- 设置布局类型(默认为流水布局)
// 设置布局为线性布局
photosView.layoutType = PYPhotosViewLayoutTypeLine;
- 设置分页指示类型(默认为pageControll指示器)
// 设置指示类型为文本指示
photosView.pageType = PYPhotosViewPageTypeLabel;
- 设置图片间距(默认为5)
// 设置图片间距为10
photosView.photoMargin = 10;
- 设置图片大小(默认70*70)
// 设置图片的宽(width)
photosView.photoWidth = 100;
// 设置图片的高(height)
photosView.photoHeight = 60;
- 设置每行图片最多个数(默认为3个)
// 设置图片最多列数
photosView.photosMaxCol = 6;
- 设置图片上传前,最多上传的张数(默认为9)
photosView.imagesMaxCountWhenWillCompose = 15;
具体介绍就这么多使用此Demo可以极大减少工作量,但是在使用之前自己一定要明白其原理。代码源:http://www.cnblogs.com/mobile-development/p/5720835.html
用法简单的图片和视频播放的框架Demo的更多相关文章
- Android图片下载以及缓存框架
实际开发中进行图片下载以及缓存的框架 介绍一下开发中常见图片加载框架的使用和对比一下优缺点. 1.Picasso 框架 在Android中开发,常需要从远程获取图片并显示在客户端,当然我们可以使用原生 ...
- Aurelia – 模块化,简单,可测试的 JS 框架
Aurelia 是下一代 JavaScript 客户端框架,利用简单的约定来激发你的创造力.凭借其强大的专注于开发经验, Aurelia 可以使您不仅创造惊人的应用程序,同时也享受这个过程.它经过精心 ...
- iOS图片加载新框架 - FlyImage
FlyImage 整合了SDWebImage,FastImageCache,AFNetworking的优点,是一个新的性能高效.接口简单的图片加载框架. 特点 高效 可将多张小图解码后存储到同一张大图 ...
- Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载
在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- jquery简单的图片切换效果,支持pc端、移动端的banner图片切换开发
详细内容请点击 无意中看见了两年前写的一个图片切换,那会儿刚刚学习网页制作,可以说是我的第一个处女座的jquery图片切换效果.无聊之余对它的宽度稍稍做了一下修改,变成了支持pc端.手机端全屏的ban ...
- Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView 两个UIButton ,一个UISlider ,布局如图. 并为他们连线, UIImage ...
- 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确
一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确 最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...
- 简单实现图片间的切换动画 主要用到ViewPager
简单实现图片间的切换动画 主要用到ViewPagerViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view.ViewPager类需要一个PagerAdapter适 ...
随机推荐
- hdu 5586 Sum【dp最大子段和】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 Sum Time Limit: 2000/1000 MS (Java/Others) Me ...
- 转载 在.net中使用GAC
转载出处 https://blog.log4d.com/2011/01/gac/ GAC GAC是什么?是用来干嘛的?GAC的全称叫做全局程序集缓存,通俗的理解就是存放各种.net平台下面需要使用的d ...
- Keil uCos 2.52 stm32 【worldsing笔记】
1.uCOSii V2.52 a.加了7个可以配置的钩子函数宏 #define OS_TASK_CREATE_HOOK_EN 0 /* 任务创建时调用钩子函数 使能 ...
- Java经典面试题
1. Java中的异常处理机制的简单原理和应用. 当Java 程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是Java类库内置的语义检查. ...
- 关于local storage 和 session storage以及cookie 区别简析
session storage 和local storage 都是存储在客户端的浏览器内: 一:关于COOKIE 的缺陷 * Cookie的问题 * 数据存储都是以明文(未加密)方式进行存储 * 安全 ...
- C++学习笔记(十三):类、包和接口
看标题感觉这些术语和C++没有什么关系啊,包和接口是Java等语言加入的概念. 这篇文章是基于Java等语言的新概念(相对于C++来说的新概念)来看C++的设计思路. 类: C++中,一个文件可以包含 ...
- 10个Visual Studio原生开发调试技巧
10个Visual Studio原生开发调试技巧(1) 2013-05-29 13:30 佚名 开源中国 我要评论(1) 字号:T | T 以下的列表中你可以看到写原生开发的调试技巧(接着以前的文章来 ...
- Central Authentication Service
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- ThinkPHP CURD方法盘点:field方法
ThinkPHP的CURD操作中有很多非常实用的方法,从这篇开始,我们会为大家一一介绍. 首先为大家介绍下field方法的用法.field属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段 ...
- paip.输入法编程---词频顺序order by py
paip.输入法编程---词频顺序order by py 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...