【问题标题】:Stop and start videos within a UIScrollView在 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 错误)。

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

非常感谢。

【问题讨论】:

    标签: ios ipad uiscrollview mpmovieplayercontroller


    【解决方案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];
    

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

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 2011-06-23
      • 2012-07-24
      • 2020-04-09
      • 2020-12-27
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多