在UIScrollView中停止并启动视频

时间:2011-11-30 22:36:51

标签: ios ipad uiscrollview mpmovieplayercontroller

我现在已经玩了一天,并且已经撞到了一堵砖墙。

我希望有UIScrollView显示一系列用户可以滚动的视频。设置UIScrollView很好,其中的每个项目(我称之为MenuItems)是UiViewController的子类,包含并管理MPMoviePlayerController等的所有设置。 / p>

但我发现你在一个窗口中只能有一个MPMoviePlayerController,一次播放。

所以,我认为解决这个问题的最佳方法是在每个MenuItem stopVideostartVideo上都有可访问的方法,当每个菜单项成为{{的焦点'时,我会触发这些方法1}}(我已经成功编写了委托代码,以便它捕获滚动事件并确定哪个页面位于scrollview的中心)。

问题是,我无法弄清楚如何访问UiScrollView中的MenuItem对象。

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

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内初始化MPMoviePlayerController而没有MenuItem错误)。

我认为我的方法存在缺陷,或者有一种更简单的方法?所有帮助表示赞赏!

非常感谢。

1 个答案:

答案 0 :(得分:0)

对于回复有点迟,但我也陷入了困境,并设法抨击了一个解决方案,所以我认为我会把它包含在其他人中。

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

我将此代码包含在我的.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];

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