2013-10-29 40 views
0

错误的电影,我成立了电影播放这样的:不能暂停循环,因为的MPMoviePlayerController

self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:@"whatever.mp4"]; 
    self.moviePlayer.controlStyle = MPMovieControlStyleNone; 
    self.moviePlayer.shouldAutoplay = YES; 
    [self.moviePlayer prepareToPlay]; 
    self.moviePlayer.repeatMode = MPMovieRepeatModeOne; 
    self.moviePlayer.view.frame = self.container.bounds; 
    self.moviePlayer.view.userInteractionEnabled = NO; 
    [self.container addSubview:self.moviePlayer.view]; 

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(moviePlayBackDidFinish:) name: MPMoviePlayerPlaybackStateDidChangeNotification 
               object: self.moviePlayer]; 

的通知是必要的,以保持玩家的循环,因为REPEATMODE是几乎无用的(视频会重复一次或两次,也许几次取决于中国大米的价格,然后停止)。所以要保持视频循环,你必须这样做:

- (void)moviePlayBackDidFinish:(NSNotification *)note { 
    if (note.object == self.moviePlayer) { 
     NSInteger reason = [[note.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue]; 
     if (reason == MPMovieFinishReasonPlaybackEnded) { 
      [self.moviePlayer play]; 
     } 
    } 
} 

现在的问题是,我需要能够暂停视频。出于某种原因,到

[self.moviePlayer pause]; 

结果通知调用与理由解雇== MPMovieFinishReasonPlaybackEnded即使文档中明确指出这一点:

Constants 
MPMovieFinishReasonPlaybackEnded 
The end of the movie was reached. 
Available in iOS 3.2 and later. 
Declared in MPMoviePlayerController.h. 

在电影的结尾没有达到。我只是叫暂停:。所以通知被触发,因此电影再次播放,否定了暂停动作。

所以你可以看到问题。如何成功暂停循环视频?

+0

为什么不跟踪通知是由暂停按钮触发还是由循环结束使用BOOL变量触发? – ManicMonkOnMac

+0

如何?就像我说的是视频结束还是暂停被称为MPMovieFinishReasonPlaybackEnded的原因。 – soleil

回答

0

在你的类中创建一个BOOL并初始化为NO,

@property (nonatomic, assign) BOOL isTriggeredByPause; 

调用

[self.moviePlayer pause]; 

将其值设置之前,

self.isTriggeredByPause = YES; 
在它的方法检查

(void)moviePlayBackDidFinish:(NSNotification *)note { 
if (note.object == self.moviePlayer) { 
    NSInteger reason = [[note.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue]; 
    if (reason == MPMovieFinishReasonPlaybackEnded) { 
if(!self.isTriggeredByPause) 
{ 
    [self.moviePlayer play]; 
} 
} 
} 
} 

修改self.isTriggeredByPause在手动播放时的值,否则循环不起作用。

+0

我希望这些类型的黑客是没有必要的... – soleil