在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏

Posted

技术标签:

【中文标题】在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏【英文标题】:Screen blackout when performing Pinch Gesture on MPMoviePlayerController 【发布时间】:2010-08-18 10:57:05 【问题描述】:

我在 ios4 中遇到了这个奇怪的问题,当用户在屏幕上执行某种手势时,在 MPMoviePlayerController 中播放的视频会变黑。我只是为MPMoviePlayerController 创建一个UIViewController 和对象,然后将视图设置到UIViewController

我想问一下这个问题是否可以解决,以及在 iPhone 上播放流媒体视频的正确方法是什么。

如果有办法我可以在MPMoviePlayerController 上使用覆盖视图并捕获所有手势并将单击或触摸传递给MPMoviePlayerController 以获得MPMoviePlayerController 的一般功能并避免导致问题的手势。

请帮助我使用最佳解决方案解决问题,并帮助我详细说明解决方案。

【问题讨论】:

我也见过这个。我注意到它与发送的事件有关。捏手势就像从嵌入模式切换到全屏模式一样,可能会发送完成播放事件。我一直无法弄清楚为什么。 【参考方案1】:

Apple 在MPMoviePlayerViewController 中嵌入了UIPinchGestureRecognizer,但在UIResponder.gestures 属性中找不到。 您可以禁用嵌入在MPMoviePlayerViewControllertouchesBegan 方法中的UIPinchGestureRecognizer

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event for (UITouch *touch in touches) NSArray *array = touch.gestureRecognizers; for (UIGestureRecognizer *gesture in array) if (gesture.enabled && [gesture isMemberOfClass:[UIPinchGestureRecognizer class]]) gesture.enabled = NO;

【讨论】:

【参考方案2】:

我遇到了类似的问题,我刚刚从 Apple 的文档中找到了问题的原因:

当您将电影播放器​​的视图添加到应用的视图层次结构中时,请确保正确调整帧大小,如下所示:

...

[player.view setFrame: myView.bounds]; // 玩家的框架必须与父母的相匹配

...

现在我的操作不会让我的应用崩溃。

【讨论】:

【参考方案3】:

我看到了这个问题并找到了一个简单的解决方法。

由于我们不想使用MPMoviePlayerViewController,因此无法使用上述手势核对技巧(我们有一些自定义控件,当视频不是全屏并希望保持平滑过渡时)。

症状(iOS 5.1):

当用户反复以全屏模式打开视频,将其从全屏模式拉出,然后对新视频执行相同操作时,当视频第 5 次启动并进入全屏模式时,屏幕会变黑。 当屏幕变黑时,可以通过单击隐藏和显示状态栏,但不会出现视频或导航栏。 在全屏模式下使用“完成”按钮而不是捏合,可以关闭全屏模式而不会出现任何问题。 我们为每个视频分配一个新的MPMoviePlayerController,并且不会泄露任何内容。这没有帮助。

解决方法:

当关闭包含MPMoviePlayerController 视图的视图时,我们在播放器上设置contentURL = nil

之后我们在后续MPMoviePlayerController 实例上没有出现黑屏问题。

似乎在使用“完成”按钮时执行了一些内部清理,但在捏合关闭全屏时却没有。

【讨论】:

【参考方案4】:

我讨厌这个问题。我能够找到的是,具有全屏模式需要具有嵌入式控制,以便NSNotificationCenter 以正确的Notification 响应。听起来既愚蠢又可笑,但这是我在 4.0 中发现的。

【讨论】:

以上是关于在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MPMoviePlayerController 上处理多个 SRT 文件

在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏

在 UITableViewCell 中嵌入 MPMoviePlayerController

MPMoviePlayerController 在影片结尾更改控件样式

后台的 MPMoviePlayerController / AVAudioSession 在来电后不会重新开始播放

MPMoviePlayerController 在启动前显示空白屏幕?