1

アプリがバックグラウンドに戻って戻ると、モーダル ビューが閉じます。なぜこれが起こったのですか?一時停止のオンとオフを試してみました。有用な情報であれば、ARC を有効にしています。

MPMoviePlayerViewController * player = [[MPMoviePlayerViewController alloc] initWithContentURL:targetURL];
[player.moviePlayer prepareToPlay];
[self presentMoviePlayerViewControllerAnimated:player];
4

4 に答える 4

5

他の誰かがこれに出くわした場合に備えて (私が独自の解決策を見つける前に行ったように)、MPMoviePlayerViewControllerアプリをサブクラス化し、オブザーバーとして削除することで、アプリがバックグラウンドになったときに終了するのを防ぐことができましたUIApplicationDidEnterBackgroundNotification

- (id)initWithContentURL:(NSURL *)contentURL {

    self = [super initWithContentURL:contentURL];

    if (self){

        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; 

    }

    return self;
}
于 2013-05-16T21:55:28.817 に答える
2

サブクラス化する必要はありません。インスタンスMPMoviePlayerViewControllerを作成した後に次のことを行うだけです。MPMoviePlayerViewController

[[NSNotificationCenter defaultCenter] removeObserver:self.moviePlayerViewController name:UIApplicationDidEnterBackgroundNotification object:nil];
于 2014-08-18T22:32:33.830 に答える
0

これがあなたを助けることができる完全なコードです

// Call this to start initialization and play movie
-(void)prepareMoviePlayer:(NSURL *)moviePath
{
    moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:moviePath];

    if ([[moviePlayerViewController moviePlayer] respondsToSelector:@selector(loadState)])
    {
        [[moviePlayerViewController moviePlayer] setControlStyle:MPMovieControlStyleNone];
        [[moviePlayerViewController moviePlayer] setFullscreen:YES];
        [[moviePlayerViewController moviePlayer] prepareToPlay];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(moviePlayerLoadStateDidChange:)
                                              name:MPMoviePlayerLoadStateDidChangeNotification
                                              object:nil];
    }
}

- (void) addPlayer
{
    [[[moviePlayerViewController moviePlayer] view] setFrame:self.view.bounds];
    [[self view] addSubview:[[moviePlayerViewController moviePlayer] view]];
}

static NSTimeInterval t;
// Call this on applicationWillResignActive
-(void) pauseMovieInBackGround
{
    [[moviePlayerViewController moviePlayer] pause];
    t = [[moviePlayerViewController moviePlayer] currentPlaybackTime];
    [moviePlayerViewController.view removeFromSuperview];
}

// Call this on applicationWillEnterForeground
-(void) resumeMovieInFrontGround
{
    [self addPlayer];

    [[moviePlayerViewController moviePlayer] stop];
    [[moviePlayerViewController moviePlayer] setInitialPlaybackTime:t];
    [[moviePlayerViewController moviePlayer] play];
}

-(void)moviePlayerLoadStateDidChange:(NSNotification *)notification
{
    if([[moviePlayerViewController moviePlayer] loadState] != MPMovieLoadStateUnknown)
    {

        [[NSNotificationCenter defaultCenter] removeObserver:self
                                              name:MPMoviePlayerLoadStateDidChangeNotification
                                              object:nil];

        [self addPlayer];
        [[moviePlayerViewController moviePlayer] play];
    }
}

-(void)videoPlayBackDidFinish:(NSNotification*)notification
{
    [self dismissMoviePlayerViewControllerAnimated];
}
于 2012-09-21T11:43:00.297 に答える