11

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

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

在正常使用中,这一切似乎都可以正常使用,即来回旋转可以正常工作。

但是如果用户以纵向模式开始,开始播放视频,进入全屏模式,变成横向,然后视频停止——元素通常没有正确调整大小。它们的大小似乎仍然像纵向模式一样。

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

奇怪的是,我已经实现(void)exitedFullscreen:(NSNotification*)notification并在其中打印出方向,并且可以正确看到。我还调用我的代码来根据当前方向重置视图元素,但我仍然遇到这个问题。

另一个相关问题是有时在处理旋转时,我的视图最终会在屏幕上太远,实际上位于设备顶部的状态栏下方。

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

在全屏视频期间,导航栏在旋转后位于状态栏下方。

4

6 回答 6

2

解决此问题的一种可能方法是通过模态显示您的视图控制器而不是使用导航视图控制器。

请参阅肯尼在从横向到纵向的问题 pushViewController 中的回答

于 2012-04-26T09:22:35.350 回答
1

您的 ViewController 可能不会旋转,因为另一个控制器是第一响应者。为了避免这种情况,您可以做的是将视图控制器注册到设备旋转更改,并在收到此类通知时在您调用的选择器中实现旋转。

在 appDelegate 中:

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

在您的视图控制器中

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

在确实旋转中,您可以检查方向

    [[UIDevice currentDevice] orientation]
于 2012-04-20T12:05:57.380 回答
1

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

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

轮换后使用它。

于 2012-04-25T11:17:59.957 回答
0

梅森,您是否记录并检查了您的方法 willAnimateRotationToInterfaceOrientation:duration: 在每次状态转换后是否被调用?

于 2012-04-20T07:31:32.123 回答
0

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

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

我认为应该这样做。

于 2012-04-20T11:03:28.630 回答
0

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

可能您的位置计算失败,因为您在播放全屏视频(不带状态栏)时使用视图的框架,并且一旦状态栏返回就会失败?

于 2012-04-24T14:11:53.657 回答