我的方案如下:
performSegueWithIdentifier
方法中使用viewDidAppear
加载B.乙MPMoviePlayerViewController
显示视频。 B识别出视频使用MPMoviePlayerPlaybackDidFinishNotification
完成,然后执行:[self dismissViewControllerAnimated:NO completion:nil];
解雇调用导致B重新加载(电影再次播放)并且控制台中出现以下错误:
:CGImageCreate:图片大小无效:0 x 0。
我如何解决这个问题?
答案 0 :(得分:1)
问题在于你的逻辑在ViewController A的viewDidAppear:
方法中呈现ViewController B.
当B完成并解散时,A的viewDidAppear:
将再次被调用,这将再次呈现B并且循环将继续直到某些东西腐烂。
viewDidLoad
的A viewDidAppear:
的A viewDidAppear:
的A 你应该重新思考你的逻辑,因为在这一点上,有很多方法可以解决这个问题。
或者......如果这部电影必须只播放一次,那么你可以在A的viewDidLoad
中呈现B.
答案 1 :(得分:1)
对dismissViewControllerAnimated
的调用将导致在第一个视图控制器A上再次调用viewDidAppear
。
但您可以使用方法- (BOOL)[UIViewController isBeingPresented]
区分第一次开始显示此视图控制器。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if ([self isBeingPresented]) {
[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:self];
}
}
答案 2 :(得分:0)
我会设置一个像didMoviePlay这样的属性,然后在viewDidAppear:
中检查是否播放了该电影。这样,如果电影播放出错,您可以决定如何从那里开始。