MPMoviePlayerController и оверлейное окно - PullRequest
0 голосов
/ 06 августа 2009

Я пытаюсь воспроизвести видео из удаленного местоположения и пытаюсь наложить на весь экран окно, более или менее прозрачное с несколькими изображениями по краям. Как только фильм предварительно загружен, я играю видео. Это случается хорошо в первый раз. Но если я пытаюсь воспроизвести видео, оно не воспроизводится, и я не могу нажать кнопку «Воспроизвести» на панели управления проигрывателя. Я думаю, что окно оверлея находится над элементами управления. Как получить контроль над окном наложения.

// - (void) moviePlayerContentPreloadDidFinish: (NSNotification *) уведомление {

NSLog(@"content preloaded");
NSDictionary *userInfo = [notification userInfo];
if ([userInfo valueForKey:@"error"]) {
    NSLog(@"*** An error occurred preloading the movie");
    return;
}

[self.spinner stopAnimating];

// Add the overlay view to the movie, so we can catch the clicks
OverlayViewController *ovc = [[OverlayViewController alloc] initWithNibName:@"OverlayView" bundle:nil];
self.overlayController = ovc;
[ovc release];
[self.overlayController setNextResponder:self];

MPMoviePlayerController *moviePlayer = [notification object];   


[moviePlayer play];

// Locate the movie player window
NSArray *windows = [[UIApplication sharedApplication] windows];
NSLog(@"window count= %d",[windows count]);
if ([windows count] < 2) {
    NSLog(@"*** Window for movie player is missing");
    return;
}

UIWindow *moviePlayerWindow = [windows objectAtIndex:1];
[moviePlayerWindow addSubview:self.overlayController.view];

}

Код, который я использую:

Я что-то не так делаю. Можно ли получить контроль над оверлеем или автоматически воспроизвести его.

1 Ответ

0 голосов
/ 22 декабря 2009

Две вещи. Во-первых, согласно вашему коду, в методе moviePlayBackDidFinish вы должны сначала освободить moviePlayer, а затем снова создать его экземпляр с помощью alloc. Вы должны делать это каждый раз, когда хотите воспроизвести видео.

MPMoviePlayerController *moviePlayer = [notification object];
[moviePlayer release]
...
MPMoviePlayerController *newMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: anURL];

Структура вашего кода работает, но я думаю, вам лучше взглянуть на пример, предоставленный Apple: http://developer.apple.com/iphone/library/samplecode/MoviePlayer_iPhone/index.html

Во-вторых, по поводу наложения, вы правы, наложение получает события, но вы не можете поместить его под элементы управления проигрывателя фильма. То, что вам нужно сделать, это использовать события, которые вы получаете в оверлее, чтобы управлять игроком. Вы можете использовать событие touchesBegan, чтобы передать начальное событие касания и использовать его с проигрывателем (воспроизведение, пауза, остановка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...