Я - потоковое видео к iPhone и не люблю способ, которым MPMoviePlayerController обрабатывает вещи вначале. Я заметил, что при нажатии на строку для выбора конкретного фильма, приложение просто находится там, пока это не загружается достаточно для проигрывания его. Таким образом, я появился в UIImageView с загружающимся изображением и хорошим счетчиком для информирования пользователя.
Я думаю, что у них должна быть опция отменить игру назад фильма, если они устают от ожидания. Таким образом, у меня есть кнопка отмены с фоновым изображением.
UIButton *cancel;
UIImage *cancelImage = [UIImage imageNamed:@"cancel.png"];
cancel = [UIButton buttonWithType:UIButtonTypeCustom];
cancel.frame = CGRectMake(0,0, cancelImage.size.width, cancelImage.size.height);
cancel.center = CGPointMake(35, 20);
[cancel setImage:cancelImage forState:UIControlStateNormal];
[cancel addTarget:self action:@selector(cancelMovie) forControlEvents:UIControlEventTouchUpInside];
[moviePreviewView addSubview:cancel];
Но я не уверен, что вставить cancelMovie метод. Я попытался копировать то, что я имею в moviePlayBackDidFinish методе обратного вызова, но он отказывает скорее эффектно.
Я также попробовал:
-(void)cancelMovie {
[theMovie.view removeFromSuperview];
[theMovie release];
}
Но это не делает ничего хорошего также. Я думал, что мог назвать moviePlayBackDidFinish непосредственно, но я не думаю, что можно назвать метод уведомления непосредственно.
Ваши мысли?
Ненавижу отвечать на свой вопрос, но поскольку у этого вопроса было всего 7 просмотров, я полагаю, это не могло быть настолько важным. Возможно, мне не стоит публиковать их посреди ночи ... Никто их не видит, когда вы это делаете.
В любом случае, я не нашел хорошего решения этой проблемы ... просто взлом.
В методе отмены я сказал MoviePlayer загрузить другой односекундный фильм, который является той же фотографией, которую я использовал в previewImage. Когда этот «фильм» заканчивается, он переходит к вызову MPMoviePlayerPlaybackDidFinishNotification, очищает и возвращает пользователя туда, где он был.
-(void)cancelMovie
{
cancelURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"cancel" ofType:@"m4v"]];
[theMovie setContentURL:cancelURL];
[theMovie setControlStyle:MPMovieControlStyleFullscreen];
[theMovie setFullscreen:YES];
// for some reason ... this is neccessary
[theMovie prepareToPlay];
// Register that the load state changed (movie is ready)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerLoadStateChanged:)
name:MPMoviePlayerLoadStateDidChangeNotification
object:theMovie];
// Register for the PlayBackDidFinish (movie is finished)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];
}
Нехорошо ... но работает.