全屏视频后如何确保我的视图正确定位?

时间:2012-04-07 18:23:45

标签: ios ios5 orientation

我有一个通用的ipad / iphone应用程序,允许用户观看视频,然后他们可以扩展到全屏模式。

我已经实现了(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration,在该方法中,我对视图元素执行各种setFrame调用,具体取决于它们是横向还是纵向。

在正常使用中似乎一切正常,即前后旋转工作正常。

但是,如果用户以纵向模式启动,启动视频,进入全屏模式,转为横向,然后视频停止 - 元素通常无法正确调整大小。它们的大小似乎仍然像是纵向模式。

如果我转到纵向模式,然后再转回横向,则视图会正确重置。

奇怪的是,我实施了(void)exitedFullscreen:(NSNotification*)notification并在那里打印出方向,并且看得正确。我还调用我的代码根据当前方向重置视图元素,我仍然遇到这个问题。

另一个相关的问题是,在处理轮换时,我的视图会在屏幕上走得太远,实际上会进入设备顶部的状态栏。

编辑以下是最新的示例。我在全屏视频播放期间旋转到横向模式,然后当我离开全屏视频时,您可以通过视图顶部的导航栏看到问题。

Navigation bar goes underneath status bar after rotation during full screen video.

6 个答案:

答案 0 :(得分:2)

解决此问题的一种可能方法是以模态方式呈现视图控制器,而不是使用导航视图控制器。

请参阅Problem pushViewController from Landscape to Portrait

处的Kenny的回答

答案 1 :(得分:1)

您的ViewController可能无法旋转,因为另一个控制器是第一个响应者。您可以采取的措施是将视图控制器注册到设备旋转更改,并在收到此类通知时调用您选择的旋转器。

在appDelegate中:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

在视图控制器中

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:)name:UIDeviceOrientationDidChangeNotification object:nil]; 

在旋转中,您可以使用

检查方向
    [[UIDevice currentDevice] orientation]

答案 2 :(得分:1)

视图顶部的导航栏。我使用此代码解决了它 - >

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];

旋转后使用此功能。

答案 3 :(得分:0)

梅森,您是否记录并检查了您的方法是否会在每次状态转换后调用动态转换为交响:持续时间:

答案 4 :(得分:0)

如果有另一个控制器充当第一响应者,您的方向可能无法正确更新。解决此问题的最佳方法是使用视图控制器的当前方向调用用于在方法viewWillAppear:处定向屏幕的函数:[self interfaceOrientation]

如果使用子类子视图,则可能需要重新实现methot layoutSubviews并调用setNeedsLayout。另一件可能导致这种情况的事情就是让视频控制器退出,你将视频作为第一响应者(如果你使用的是某个地方,你可以搜索一下这种方法,并在不使用它的情况下尝试它是如何工作的)。如果这不起作用,我不知道,这些事情可能非常棘手,并且取决于你如何实现它。但是对于你说你做的事情,你不需要太多代码,因为视图编辑器的尺寸检查器现在可以处理视图的自动旋转和大小调整。

我认为应该这样做。

答案 5 :(得分:0)

对我来说,这个最新的截图看起来不像是方向更改问题。 导航栏基本上处于状态栏的高度。

由于您正在使用视图框架,因此您的位置计算可能会失败 当全屏视频(没有状态栏)正在播放时,这会立即失败 状态栏又回来了?