iOS 学习笔记(一) 视频引导页的制作

本文介绍了一种在iOS应用中实现视频引导页的方法。通过将AVPlayerLayer加载到UIView并嵌套在UIScrollView中,实现随着页面滑动自动切换并播放不同视频的功能。文章详细展示了如何利用AVFoundation框架来管理和控制视频播放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说 先上图这里写图片描述

基本思路

  • 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;
}
//以上就是实现视频引导页的播放了 同理也可以用来循环切换播放本地视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值