我有一个播放视频的基本 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 setter 和方法 swizzling,但没有发现任何可能导致此行为的东西。
我在此应用程序上运行了 Time Profiler,问题与绘制进度 slider 有关。我的项目中没有进度 View 子类或类别。 Instruments 分析看起来像这样:Instruments output . (抱歉,由于缺乏声誉,无法包含直接图像)。
我还尝试用我的整套 cocoapods 运行一个干净的项目,它在不同的项目中完美运行。
最佳答案
好的,我的其中一个类别有问题。我定义了一种方法 [UIImage imageNamed:inBundle:],它显然与其中一个私有(private) API 冲突。但是我从来没有收到任何警告。重命名方法解决了问题。
关于ios - MPMoviePlayerController 不在 iOS7 上播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299944/