在 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
属性中找不到。
您可以禁用嵌入在MPMoviePlayerViewController
的touchesBegan
方法中的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 在影片结尾更改控件样式