【发布时间】:2015-05-18 09:47:57
【问题描述】:
我有一个播放视频的基本 MPMoviePlayerController 代码。它在 iOS8 上完美运行,但在 iOS7 上冻结了应用程序。
代码如下:
- (void)playURL:(NSURL *)URL fromView:(UIView *)view
{
NSParameterAssert(URL);
NSParameterAssert(view);
NSParameterAssert(view.superview);
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:URL];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieControllerDidCollapse:) name:MPMoviePlayerDidExitFullscreenNotification object:self.moviePlayer];
self.moviePlayer.shouldAutoplay = YES;
self.moviePlayer.view.frame = view.frame;
[view.superview addSubview:self.moviePlayer.view];
[self.moviePlayer setFullscreen:YES animated:YES];
}
- (void)moviePlayBackDidFinish:(NSNotification *)notification
{
[self.moviePlayer setFullscreen:NO animated:YES];
}
- (void)movieControllerDidCollapse:(NSNotification *)note
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidExitFullscreenNotification object:self.moviePlayer];
[self.moviePlayer.view removeFromSuperview];
self.moviePlayer = nil;
}
我在其他应用程序中运行相同的代码,它运行良好,但在这个特定的应用程序中,它会冻结 iOS7。启动时,它开始在一个循环中吐出许多 CGContext 错误,说上下文是 0x0。我尝试创建一个虚拟 CGContext 并消除错误,但在这种情况下,它会将 CPU 加速到 100%,大概是因为它试图在具有错误范围或 smth 的上下文中绘制事物。
我也尝试使用 MPMoviePlayerViewController 代替 MPMoviePlayerController,但它做同样的事情。模态演示动画甚至没有出现。
我还在我的项目中搜索了一些 UIAppearance 设置器和方法调配,但没有发现任何可能导致这种行为的东西。
我在这个应用程序上运行了 Time Profiler,问题与绘制进度滑块有关。我的项目中没有进度视图子类或类别。 Instruments 配置文件如下所示:Instruments output。 (抱歉,由于缺乏声誉,无法包含直接图片)。
我还尝试使用我的整个 cocoapods 运行一个干净的项目,它可以在不同的项目中完美运行。
【问题讨论】:
标签: ios objective-c video mpmovieplayercontroller mpmovieplayer