Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c MPMoviePlayerController不加载滚动库中的第一个视频_Objective C_Ios_Video - Fatal编程技术网

Objective c MPMoviePlayerController不加载滚动库中的第一个视频

Objective c MPMoviePlayerController不加载滚动库中的第一个视频,objective-c,ios,video,Objective C,Ios,Video,我正在开发iOSSDK4.3。 我有一个水平滚动页面的图库,可以显示来自远程提要的图像或视频。对于分页视图,我使用的是公开的ATPagingView:页面的重用与TableViewCells类似。但对于视频,我使用的是一个MPMoviePlayerController,我将其.view属性作为子视图分配给多个页面(我知道,我知道…): 您可以看到我已经注册了MoviePlayer事件加载状态通知。 当屏幕上出现新页面时,如果需要,我会开始加载视频: - (void)currentPageDidC

我正在开发iOSSDK4.3。 我有一个水平滚动页面的图库,可以显示来自远程提要的图像或视频。对于分页视图,我使用的是公开的ATPagingView:页面的重用与TableViewCells类似。但对于视频,我使用的是一个MPMoviePlayerController,我将其.view属性作为子视图分配给多个页面(我知道,我知道…):

您可以看到我已经注册了MoviePlayer事件加载状态通知。 当屏幕上出现新页面时,如果需要,我会开始加载视频:

- (void)currentPageDidChangeInPagingView:(ATPagingView *)pagingView
{
if (pagingView.currentPageIndex < 0)
    return;

NSLog(@"currentPageDidChangeInPagingView");
GalleryPageView *currentPage = (GalleryPageView *)[pagingView viewForPageAtIndex:pagingView.currentPageIndex];
if (![currentPage.gestureRecognizers count]) {
    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resetZoom)];
    recognizer.numberOfTapsRequired = 2;
    [currentPage.zoomView addGestureRecognizer:recognizer];
    recognizer.delegate = self;
    [recognizer release];
}

moviePlayButton.hidden = YES;

[activityView stopAnimating];
FeedItem *feedItem = (FeedItem *)[dataRoot objectAtIndex:pagingView.currentPageIndex];
if (feedItem.contentType == FeedContentTypeMovie) {
    moviePlayerController.contentURL = [NSURL URLWithString:feedItem.movieUrl];
    [moviePlayerController prepareToPlay];
    [activityView startAnimating];
}
-(void)currentPageDidChangeInPagingView:(ATPagingView*)pagingView
{
如果(pagingView.currentPageIndex<0)
返回;
NSLog(@“currentPageDidChangeInPagingView”);
GalleryPageView*当前页面=(GalleryPageView*)[pagingView视图用于页面索引:pagingView.currentPageIndex];
如果(![currentPage.GestureRecognitors count]){
UITapGestureRecognizer*识别器=[[UITapGestureRecognizer alloc]initWithTarget:自操作:@selector(resetZoom)];
recognizer.numberOfTapsRequired=2;
[currentPage.zoomView AddgestureRecognitor:识别器];
recognizer.delegate=self;
[识别器释放];
}
moviePlayButton.hidden=是;
[活动视图停止动画制作];
FeedItem*FeedItem=(FeedItem*)[dataRoot对象索引:pagingView.currentPageIndex];
如果(feedItem.contentType==FeedContentTypeMovie){
moviePlayerController.contentURL=[NSURL URLWithString:feedItem.movieUrl];
[电影播放控制器准备播放];
[activityView startAnimating];
}
现在,如果第一个页面包含视频,即使在我调用moviePlayerController.prepareToPlay之后,它也不会加载:不会触发loadState事件。下面的页面会按预期工作。 我尝试在MPlayerController初始化时预加载固定视频,但在这种情况下,固定视频已正确加载(MPMovieLoadState==3),而第一页上的视频会导致更改为MPMovieLoadStateUnknown

电影URL是正确的。 当我从第2页向后滚动到第1页时,第一个视频被加载(MPMovieLoadState==3),但它不显示

你建议调查什么?共享视图架构真的很可怕吗?毕竟,它适用于以下页面。prepareToPlay是否有任何已知的怪异行为?例如,如果视图被“虐待”,MPC是否可能生气由任何人,然后它拒绝加载的东西?否则你会如何解释MPMovieLoadStateUnknown?我很确定没有其他鬼的MPC实例乱来(我读过它可能是一个问题)


感谢您并为这篇冗长的帖子感到抱歉。

我不得不使用AVPlayer,因为我的代码中与此非常相似。

我不得不使用AVPlayer,因为我的代码中与此非常相似。

我也有同样的问题。在iOS 7中,这不会发生,但在iOS 6中,loadState是3,这在:

enum {
    MPMovieLoadStateUnknown        = 0,
    MPMovieLoadStatePlayable       = 1 << 0,
    MPMovieLoadStatePlaythroughOK  = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
    MPMovieLoadStateStalled        = 1 << 2, // Playback will be automatically paused in this state, if started
};
typedef NSInteger MPMovieLoadState;

可能在iOS6中,loadState是一个可以同时包含多个状态的按位值。

我也有同样的问题。在iOS7中,这不会发生,但在iOS6中,loadState是3,这在以下内容中没有考虑:

enum {
    MPMovieLoadStateUnknown        = 0,
    MPMovieLoadStatePlayable       = 1 << 0,
    MPMovieLoadStatePlaythroughOK  = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
    MPMovieLoadStateStalled        = 1 << 2, // Playback will be automatically paused in this state, if started
};
typedef NSInteger MPMovieLoadState;

可能在iOS6中,loadState是一个可以同时包含多个状态的按位值。

现在没有时间这样做,但肯定值得一试。我必须更改通知模型以符合键值。注意:现在没有时间这样做,但肯定值得一试。我必须更改通知模型以符合键值-观察:
if (self.moviePlayerC.loadState & MPMovieLoadStatePlayable || self.moviePlayerC.loadState & MPMovieLoadStatePlaythroughOK)