#ios #objective-c #animation #uiviewcontroller #movieplayer
#iOS #objective-c #Анимация #uiviewcontroller #movieplayer
Вопрос:
У меня есть приложение, которое последовательно отображает изображения и / или фильмы. Проблема в том, что я не могу отключить один проигрыватель фильмов, а затем представить другой. Если я попытаюсь, я получу сообщение «Предупреждение: попытка представить MPMoviePlayerViewController на MyViewController во время выполнения презентации!» В отличие от других анимированных методов present / dismiss, нет обработчика завершения или неанимированной версии present / dismiss .
Вот упрощенная версия моего кода:
-(void) play
{
[[window rootViewController] presentMoviePlayerViewControllerAnimated:player];
[[_player moviePlayer] play];
}
-(void) videoNotification:(NSNotification *) notification
{
if([notification.name isEqualToString:MPMoviePlayerPlaybackDidFinishNotification])
{
[[window rootViewController] dismissMoviePlayerViewControllerAnimated];
[_canvasManager showNextCanvas]; //this calls play on the next canvas
}
}
Есть мысли / подсказки о том, как достичь моей цели?
Ответ №1:
После просмотра dismissViewControllerAnimated:завершение: я смог создать обработчик завершения, создав подкласс MPMoviePlayerViewController и переопределив -(void)viewDidDisappear. viewDidDisappear вызывается в конце dismissMoviePlayerViewControllerAnimated .
@interface MyMoviePlayerViewController : MPMoviePlayerViewController
{
void (^_viewDidDisappearCallback)(void);
}
- (void)setViewDidDisappearCallback:(void (^)(void))callback;
@end
@implementation MyMoviePlayerViewController
- (id) initWithContentURL:videoPath
{
self = [super initWithContentURL:videoPath];
_viewDidDisappearCallback = nil;
return self;
}
- (void)setViewDidDisappearCallback:(void (^)(void))callback
{
_viewDidDisappearCallback = [callback copy];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
if(_viewDidDisappearCallback != nil)
_viewDidDisappearCallback();
}
@end