我在UIScrollView中有一个UIWebview。在网页浏览中,我有一个嵌入式YouTube电影。当我播放YouTube电影时,一切正常,但是,当我按下全屏按钮时,电影开始在webview后面播放。将WebView置于前端不起作用,因为我希望ScrollView的滚动功能可以进行水平滚动。
答案 0 :(得分:12)
基本上,您希望能够检测电影何时开始播放全屏并适当地排列您的视图。然后,当全屏播放结束时,您希望能够将您的视图恢复到原来的状态。
问题是当UIWebView全屏触发视频播放时,没有记录的方法可以挂钩或检测。
我说'记录方式',因为有一些通知可以用来检测UIWebView何时触发全屏播放。您可以倾听他们并相应地重新安排您的观点。但是,我不一定推荐这个,因为它们没有文档并且可能会发生变化(实际上,它们在iOS 4.3中有拼写错误,请参阅下面的答案)。
// For iOS 4.3 and above:
UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidExitFullscreenNotification
// For iOS 4.2 and below:
UIMoviePlayerControllerDidEnterFullcreenNotification
UIMoviePlayerControllerDidExitFullcreenNotification // (note spelling mistake)
找出这些内容有点痛苦 - 实际上,当UIWebView中的YouTube视频播放时会触发更多通知。要找到它们,您需要在所有通知发布中删除断点,然后手动检查这些通知的内存位置以找出它们的字符串名称。我实际上并不认为有人之前会把它们拉出来,因为当我谷歌时,我什么都没得到。但他们确实有所作为,承诺!
我希望能够在进入/退出全屏播放时得到通知将会有所帮助,并且大量警告Apple可以随时更改此无证件行为。您的应用程序不会被彻底拒绝使用它们(因为您没有调用任何未记录的方法),并且我已经在运送应用程序时使用它。但它仍然不是世界上最好的主意......可能是你唯一的选择。
编辑:根据以下评论澄清:它们不是常量,因此如果您注册了通知,则需要将它们放在引号中。答案 1 :(得分:6)
对于iOS 4.3及更高版本,Apple已更改这些通知的名称: UIMoviePlayerControllerDidEnterFullcreenNotification现在是UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidExitFullcreenNotification现在是UIMoviePlayerControllerDidExitFullscreenNotification
请注意:“全屏”一词已更改为“全屏”。
谢谢!
答案 2 :(得分:2)
只是想在玩了一段时间之后确认这是有效的。您可以直接访问视频正在播放的视图。这是一种注册通知和提取相关视图的块方法。
注意:您需要延迟添加子视图和/或访问Apple内部子视图以删除导航栏以进行进一步自定义。
[[NSNotificationCenter defaultCenter]
addObserverForName:@"UIMoviePlayerControllerDidEnterFullcreenNotification"
object:nil
queue:nil
usingBlock:^(NSNotification *note){
MPMoviePlayerController *theMovieController = [note object];
UIView *theDestinationVideoView = [[note userInfo]
objectForKey:@"UIMoviePlayerControllerFullscreenViewUserInfoKey"];
}];