0

画像や動画を順番に表示するアプリがあります。問題は、1 つのムービー プレーヤーを閉じてから別のプレーヤーを表示できないことです。試してみると、「警告: プレゼンテーションの進行中に MyViewController で MPMoviePlayerViewController を提示しようとしています!」というメッセージが表示されます。他のアニメーション化された 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
    }
}

私の目標を達成する方法についての考え/ヒントはありますか?

4

1 に答える 1

0

DismissViewControllerAnimated:completion:を見た後、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
于 2014-07-03T00:20:24.867 に答える