我现在已经玩了一天,并且已经撞到了一堵砖墙。
我希望有UIScrollView
显示一系列用户可以滚动的视频。设置UIScrollView
很好,其中的每个项目(我称之为MenuItems)是UiViewController
的子类,包含并管理MPMoviePlayerController
等的所有设置。 / p>
但我发现你在一个窗口中只能有一个MPMoviePlayerController
,一次播放。
所以,我认为解决这个问题的最佳方法是在每个MenuItem stopVideo
和startVideo
上都有可访问的方法,当每个菜单项成为{{的焦点'时,我会触发这些方法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
错误)。
我认为我的方法存在缺陷,或者有一种更简单的方法?所有帮助表示赞赏!
非常感谢。
答案 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];
您的其余代码非常有用,我认为这是一种可靠的方法,谢谢!