在 UIScrollView 中停止和启动视频

Posted

技术标签:

【中文标题】在 UIScrollView 中停止和启动视频【英文标题】:Stop and start videos within a UIScrollView 【发布时间】:2011-11-30 22:36:51 【问题描述】:

我已经玩了一天了,结果碰壁了。

我想要一个UIScrollView,它显示用户可以滚动浏览的一系列视频。设置UIScrollView 很好,其中的每个项目(我称它们为MenuItems)都是UiViewController 的子类,包含并管理MPMoviePlayerController 等的所有设置。

但是我发现你只能在一个窗口中同时播放一个MPMoviePlayerController

所以,我认为处理此问题的最佳方法是在每个 MenuItem、stopVideostartVideo 上设置可访问的方法,当每个菜单项成为 UiScrollView 的“焦点”时我会触发这些方法(我有成功地对委托进行了编码,以便它捕获滚动事件并确定哪个页面位于滚动视图的中心)。

问题是,我不知道如何访问 UiScrollView 中的 MenuItem 对象。

我在 UIScrollView 委托中有以下代码来执行此操作:

- (void)scrollViewDidScroll:(UIScrollView *)sView 

//establish what page we're on
static NSInteger previousPage = 0;
MenuItem *currentMenuItem;
MenuItem *previousMenuItem;

CGFloat pageWidth = sView.frame.size.width;
float fractionalPage = sView.contentOffset.x / pageWidth;
NSInteger page = lround(fractionalPage);
if (previousPage != page) 
    //firstly, get the previous page and stop the video
    previousMenuItem = [sView.subviews objectAtIndex:previousPage];
    previousMenuItem = [previousMenuItem nextResponder];
    [previousMenuItem hideVideo];

    //[previousMenuItem release];

    //page has changed, get the new current page and start the video
    currentMenuItem = [sView.subviews objectAtIndex:page];
    currentMenuItem = [currentMenuItem nextResponder];
    [currentMenuItem showVideo];


    //[currentMenuItem release];

    previousPage = page;

方法showVideohideVideo 被调用,但我得到了其他错误(例如,我似乎无法在MenuItem 中初始化MPMoviePlayerController 而不出现SIGABRT 错误)。

我认为我的方法在这里有缺陷,还是有更简单的方法?感谢所有帮助!

非常感谢。

【问题讨论】:

【参考方案1】:

回复有点晚了,但我也被困在这个问题上并设法提出了一个解决方案,所以我想我会把它包括在其他人身上。

我认为这与电影播放器​​的内存分配有关。

我将此代码包含在我的 .h 文件中

@interface VideoInstructionViewController : UIViewController <UIScrollViewDelegate>

    MPMoviePlayerController *player0;
    MPMoviePlayerController *player1;
    MPMoviePlayerController *player2;    

因此电影播放器​​实际上是全局的,然后只是将此代码包含在我的 .m 文件中。

player0 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];
player1 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];
player2 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];

您的其余代码非常有用,我认为这是一种可靠的方法,谢谢!

【讨论】:

以上是关于在 UIScrollView 中停止和启动视频的主要内容,如果未能解决你的问题,请参考以下文章

滚动 UITableView 停止视频播放

在触摸期间停止 UIScrollView 滚动

图像缩放时在 UIScrollView 中停止滚动图像

UIScrollView 不会在特定点停止,它会弹回顶部

有没有办法让 UIScrollView 在任意位置停止和反弹

在UIWebView中停止视频