iOS视频播放器WJMoviePlayer包含手势关闭动画

前言

这边封装了两个类一个是播放器(WJMoviePlayerView),一个是获取本地相册的视频(WJPhotoMovieManager),这两个类一个是获取本地视频上传服务器,一个下载观看,实现朋友圈展示视频功能;

WJMoviePlayerView是支持网络视频和本地视频的播放。网络视频是先下载,再播放的,集成了下载动画,本地缓存,手势缩小和关闭。目前只支持竖屏播放。

WJPhotoMovieManager用了系统自带的UIImagePickerController来实现的,可以控制视频的播放时长

gif效果

WJMoviePlayerView

WJMoviePlayerView是基于AVPlayer和AVPlayerLayer来实现的,选择AVPlayerLayer的原因是因为AVPlayerViewController有个黑色的背景view,影响到转场动画。AVPlayerLayer并不是直接添加到UIView上的,因为CALayer自带隐式动画,在下滑关闭视频的时候会出现问题(放在UIView animateWithDuration: 中关闭隐式动画会失效,当然你也可以把AVPlayerLayer单独拿到动画外面来解决问题,但是动画时间必须和隐式动画时间一致)。我这边是写了一个继承UIView的WJPlayerView类,然后重写了它的layerClass来实现的,同时为WJPlayerView添加了AVPlayer属性来解决这个问题,具体看代码。

iOS视频播放器WJMoviePlayer包含手势关闭动画_第1张图片
WJPlayerView

WJMoviePlayerView还添加了通知和监听者,一个是视频播放结束回调,用来重复播放视频

iOS视频播放器WJMoviePlayer包含手势关闭动画_第2张图片
回调
AVPlayerItemDidPlayToEndTimeNotification

另一个则是监听了AVPlayerLayer的播放状态,用来删除转场动画的视图,同时开始播放视频

iOS视频播放器WJMoviePlayer包含手势关闭动画_第3张图片
AVPlayerLayer的监听

当然加了通知和监听者,必须在dealloc中remove。

在上图WJPlayerView的创建中可以看到有UIPanGestureRecognizer手势的添加,这是用来实现下拉滑动关闭视图的,包含了下拉缩小的动画,目前下拉关闭视图并不完美,只做了下拉速度大于500的时候就关闭播放器,能力有限。

iOS视频播放器WJMoviePlayer包含手势关闭动画_第4张图片
手势缩小关闭视图


WJProgressView

WJProgressView是下载进度条(模仿新浪微博的),具体实现

iOS视频播放器WJMoviePlayer包含手势关闭动画_第5张图片
进度条实现


WJMovieDownLoadManager

WJMovieDownLoadManager是通过NSURLSession实现的,用来下载视频,下载完保存到Library/Caches/wj_movie_file目录下了,下载前会先判断本地是否存在,不存在才会去下载,这里需要注意的点是拿到本地路径时,需要通过NSURL的fileURLWithPath方法去获取URL,不然播放不了。


WJMoviePlayerView的使用

iOS视频播放器WJMoviePlayer包含手势关闭动画_第6张图片
WJMoviePlayerView的使用

其中还有许多需要完善的地方,也存在bug,欢迎下载并提出意见,谢谢。

GitHub

你可能感兴趣的:(iOS视频播放器WJMoviePlayer包含手势关闭动画)