我有一个应用程序,按顺序呈现图像和/或电影。问题是,我不能关闭一个电影播放器,然后呈现另一个。如果我尝试,我得到的信息是"警告:试图在MyViewController上呈现MPMoviePlayerViewController,而演示正在进行中!"与其他动画呈现/解散方法不同,没有完成处理程序,也没有非动画版本的呈现/解散。
下面是我的代码的简化版本:
-(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
}
}
关于如何实现我的目标有什么想法/提示吗?
在查看了下课viewcontrolleranimated: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