我正在開發iOS SDK 4.3。 我有一個水平滾動的分頁畫廊,可以顯示來自遠程供稿的圖像或視頻。對於分頁視圖,我使用公開的ATPagingView:頁面與TableViewCells類似地重複使用。但是對於視頻我使用的是單一的MPMoviePlayerController,其.view財產我分配到幾個頁面作爲一個子視圖(我知道,我知道...):MPMoviePlayerController不會加載滾動畫廊中的第一個視頻
moviePlayerController = [[MPMoviePlayerController alloc] init];
moviePlayerController.repeatMode = MPMovieRepeatModeNone;
moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;
moviePlayerController.shouldAutoplay = false;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieLoadStateChangeAction:) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
你可以看到我已經註冊用於MoviePlayer事件LoadState通知。 當一個新的頁面進入屏幕,我開始加載視頻如果需要的話:
- (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];
}
現在,IFF的第一頁面包含一個視頻,即使是在我稱之爲moviePlayerController.prepareToPlay,它不會加載:無loadState事件被觸發。下面的頁面可以按預期工作。 我試圖在MPlayerController初始化時預加載一個固定的視頻,但是在這種情況下,固定視頻被正確加載(MPMovieLoadState == 3),而第一頁上的視頻導致MPMovieLoadStateUnknown發生更改。
電影的URL是正確的。 當我從第2頁滾回到第1頁時,第一個視頻被加載(MPMovieLoadState == 3),但它不顯示。
你有什麼建議調查?共享視圖體系結構如此可怕嗎?畢竟,它適用於以下頁面。 prepareToPlay有沒有任何已知的奇怪行爲?例如,如果視圖被任何人「虐待」,MPC是否可能會生氣,然後它拒絕加載內容?你還會怎麼解釋MPMovieLoadStateUnknown?我很確定沒有其他的MPC的鬼實例搞亂了(我讀過它可能是一個問題)。
謝謝你,對於這篇長文章感到抱歉。
現在沒時間做,但肯定值得一試。我將不得不更改通知模型以符合鍵值觀察:http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueObserving/KeyValueObserving.html – AndreaG