话不多说 先上图
基本思路
- 1.把 AVPlayerLayer加载到 UIView 上 UIView 加载到 ScrollView上,讲player加载到一个可变数组里
- 2.滑动 ScrollView的时候切换 view 的页面 切换 view 的页面,先把上一个页面的播放器暂停并且把它重置到初始状态 将当前也页面的播放器从数组里面取出加载播放
1.准备步骤
- (1)几个本地视频资源 这里示例讲到的是.mov 格式的
- (2)playVideoArray = [[NSMutableArray alloc]init];
2.代码过程
//准备代码 用 for 循环给 scrolleview 和数组添加内容
//示例只有两个资源就使用的2个了
for (count = 0 ; count < 2; count++) {
NSString *urlStr = [MSPath fullPathFromAssetsInMainBundle:[NSString stringWithFormat:***这里写上你的资源路径***@"guideMov/guideMov%d.mov",count+1]];
NSURL *videoURL = [NSURL fileURLWithPath:urlStr];
AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
//使用playerItem获取视频的信息,当前播放时间,总时间等
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:movieURL];
AVPlayerItem * playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
//创建AVPlayer 播放器
AVPlayer * player = [AVPlayer playerWithPlayerItem:playerItem];
//创建一个AVPlayerLayer 用于加在 UIView 上
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame = self.view.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
UIView *playView = [[UIView alloc]initWithFrame:(CGRect){pw * count,0,pw,ph}];
//将playerLayer加入 UIView 的 layer 层
[playView.layer addSublayer:playerLayer];
[mScrollView addSubview:playView];
//把player 加载到 playVideoArray 数组里
[playVideoArray addObject:player];
if (count == 0) {
currentMovieIndex = count;
[player play];
}
}
以上的代码是准备工作
下面是 scollerview 的代理方法
pragma mark UIScrollView delegate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//更新UIPageControl的当前页
CGPoint offset = scrollView.contentOffset;
CGRect bounds = scrollView.frame;
NSInteger pageChange = offset.x/bounds.size.width;
if (pageChange == currentMovieIndex) {
return;
}
if (self.guideArrow) {
[self.guideArrow removeFromSuperview];
}
//拿出上一个的播放器
AVPlayer *prePlayer = [playVideoArray objectAtIndex:currentMovieIndex];
//把它暂停
[prePlayer pause];
//把它重置
[prePlayer replaceCurrentItemWithPlayerItem://(这个是取出播放器)[self getPlayerItem]];
currentMovieIndex = pageChange;
//拿出当前的播放器
AVPlayer *curPlayer = [playVideoArray objectAtIndex:currentMovieIndex];
//进行播放
[curPlayer play];
[mPageControl setCurrentPage:pageChange];
}
- (AVPlayerItem *)getPlayerItem{
NSString *urlStr = [MSPath fullPathFromAssetsInMainBundle:[NSString stringWithFormat:@"guideMov/guideMov%ld.mov",currentMovieIndex+1]];
NSURL *videoURL = [NSURL fileURLWithPath:urlStr];
AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
AVPlayerItem * playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
return playerItem;
}