第二次添加时,视图在UIWindow上不可见

时间:2014-01-11 07:35:10

标签: ios iphone uiwindow

我正在使用此代码

UIWindow *window = [[UIApplication sharedApplication].windows objectAtIndex:0];
UIView * videoView = [[window subviews] lastObject];
[videoView addSubview:viewFullScreenToolbar];

在最顶层视图上添加视图以在全屏播放视频。按下全屏按钮时,此代码将执行并显示全屏视频。但是当全屏关闭然后再次按下时,尽管视频在全屏播放正确,但viewFullScreenToolbar仍然不可见。此外,问题仅出现在横向模式下,在纵向模式下效果很好。

4 个答案:

答案 0 :(得分:5)

这是...不是做你想要的好方法。不要依赖于特定窗口作为“第一”窗口,并且不依赖于特定视图是“最后”子视图。那些事情太容易改变了。

在要使用的窗口和视图上创建IBOutlets,将它们连接到.XIB文件中,然后直接引用它们。

答案 1 :(得分:2)

这应该符合你的目的 -

AppDelegate * appD =(AppDelegate *)[[UIApplication sharedApplication] delegate];

[appD.window addSubview:viewFullScreenToolbar]; [appD.window bringSubviewToFront:viewFullScreenToolbar];

答案 2 :(得分:0)

您是否尝试将子视图添加到全屏MPMoviePlayerController视图中?

  1. 是。您确实需要以hacky方式添加子视图(类似于您列出的内容),因为MPMoviePlayerController不提供全屏视频视图的挂钩。您的问题可能与此子视图没有获得轮换回调有关。

  2. 没有。如果您拥有此videoView,则不应使用UIWindow访问该视图。您应该通过其视图控制器访问它。然后,当您将工具栏添加为子视图时,它将接收旋转回调。

  3. 如果你的情况是#1,我可以进一步帮助,但是想先检查一下。

    <强> [更新]

    如果您想在MPMoviePlayerController全屏视图中添加叠加视图,您有三个选择:

    1. 别。
    2. 根据AVPlayer编写自己的MoviePlayer。
    3. 使用以下示例中显示的hack:MoviePlayerFullscreenOverlay
    4. 将覆盖视图添加到MPMoviePlayerController全屏视图并不简单,因为无法从MPMoviePlayerController API访问全屏视图。它需要通过窗口访问视图,添加子视图,然后手动处理旋转回调。痛苦的是$%^ *。

      请不要将此方法用于任何其他情况。

答案 3 :(得分:0)

一旦找到答案,它似乎很明显。所以,我所要做的就是注册方向更改通知。

NSNotificationCenter* center = [NSNotificationCenter defaultCenter];

[center addObserver:self selector:@selector(ChangeOrientationIfFullScreen:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];

在接收通知时调用的方法中,我必须手动为每个方向更改设置子视图的帧。这有点开销但终于在屏幕上实现了平滑过渡。