我正在使用此代码
UIWindow *window = [[UIApplication sharedApplication].windows objectAtIndex:0];
UIView * videoView = [[window subviews] lastObject];
[videoView addSubview:viewFullScreenToolbar];
在最顶层视图上添加视图以在全屏播放视频。按下全屏按钮时,此代码将执行并显示全屏视频。但是当全屏关闭然后再次按下时,尽管视频在全屏播放正确,但viewFullScreenToolbar仍然不可见。此外,问题仅出现在横向模式下,在纵向模式下效果很好。
答案 0 :(得分:5)
这是...不是做你想要的好方法。不要依赖于特定窗口作为“第一”窗口,并且不依赖于特定视图是“最后”子视图。那些事情太容易改变了。
在要使用的窗口和视图上创建IBOutlets,将它们连接到.XIB文件中,然后直接引用它们。
答案 1 :(得分:2)
这应该符合你的目的 -
AppDelegate * appD =(AppDelegate *)[[UIApplication sharedApplication] delegate];
[appD.window addSubview:viewFullScreenToolbar]; [appD.window bringSubviewToFront:viewFullScreenToolbar];
答案 2 :(得分:0)
您是否尝试将子视图添加到全屏MPMoviePlayerController视图中?
是。您确实需要以hacky方式添加子视图(类似于您列出的内容),因为MPMoviePlayerController不提供全屏视频视图的挂钩。您的问题可能与此子视图没有获得轮换回调有关。
没有。如果您拥有此videoView,则不应使用UIWindow访问该视图。您应该通过其视图控制器访问它。然后,当您将工具栏添加为子视图时,它将接收旋转回调。
如果你的情况是#1,我可以进一步帮助,但是想先检查一下。
<强> [更新] 强>
如果您想在MPMoviePlayerController全屏视图中添加叠加视图,您有三个选择:
将覆盖视图添加到MPMoviePlayerController全屏视图并不简单,因为无法从MPMoviePlayerController API访问全屏视图。它需要通过窗口访问视图,添加子视图,然后手动处理旋转回调。痛苦的是$%^ *。
请不要将此方法用于任何其他情况。
答案 3 :(得分:0)
一旦找到答案,它似乎很明显。所以,我所要做的就是注册方向更改通知。
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(ChangeOrientationIfFullScreen:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
在接收通知时调用的方法中,我必须手动为每个方向更改设置子视图的帧。这有点开销但终于在屏幕上实现了平滑过渡。