在 UIScrollView 中停止和启动视频
Posted
技术标签:
【中文标题】在 UIScrollView 中停止和启动视频【英文标题】:Stop and start videos within a UIScrollView 【发布时间】:2011-11-30 22:36:51 【问题描述】:我已经玩了一天了,结果碰壁了。
我想要一个UIScrollView
,它显示用户可以滚动浏览的一系列视频。设置UIScrollView
很好,其中的每个项目(我称它们为MenuItems)都是UiViewController
的子类,包含并管理MPMoviePlayerController
等的所有设置。
但是我发现你只能在一个窗口中同时播放一个MPMoviePlayerController
。
所以,我认为处理此问题的最佳方法是在每个 MenuItem、stopVideo
和 startVideo
上设置可访问的方法,当每个菜单项成为 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;
方法showVideo
和hideVideo
被调用,但我得到了其他错误(例如,我似乎无法在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 中停止和启动视频的主要内容,如果未能解决你的问题,请参考以下文章