2011-11-30 99 views
2

我一直在玩这个游戏一天,并且撞到了一堵砖墙。在UIScrollView中停止和启动视频

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

但是我发现,您只能拥有一个MPMoviePlayerController在一个窗口,一次玩。

所以,我认为处理这个最好的方法是让每个菜单项访问的方法,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错误)。

我在想我的方法在这里有缺陷,或者有一个更简单的方法?所有帮助赞赏!

非常感谢。

回答

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]; 

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