Невозможно представить анимацию MoviePlayerView во время выполнения анимации dismissMoviePlayerView

#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