0

我有一个图像幻灯片查看器,它使用 UIPageViewController 来呈现图像。图像视图查看器 ViewController 非常简单——一个包含 UIScrollView 的顶级视图,其中包含一个 UIImageView。在初始图像呈现或设备旋转时,图像的纵横比适合视图尺寸并居中。它工作正常,除了在 iOS 7 和 iOS 6 上都发生的问题。

如果我正在平移以更改图像并且屏幕上有两个图像,然后我旋转设备,它有时(可能总是?)会弄乱一个或多个图像的显示。先前居中的图像出现在屏幕上的错误位置,并且在旋转和缩放时仍然存在。

发生这种情况时,我唯一能发现的错误是 UIImageView 的 center 属性实际上不是框架的中心。如果我将 viewDidAppear 中 UIImageView 的 center 属性更改为可能缩放的 UIImageView 的中心,那么图像似乎在所有情况下都能正确显示。

这听起来像是我正在犯的一些熟悉的错误的影响吗?

编辑以回答问题:
我没有在 willRotate 或 didRotate 方法中做任何事情。
viewDidLayoutSubviews中,我将图像调整到当前 UIScrollView 边界(这是完整的顶级视图,即全屏)并将其居中。这会处理初始演示和旋转。我在“正常”轮换情况下看不到任何问题。仅当我使用两个 pageViewController 的子视图同时部分在屏幕上旋转时,才会出现此问题。我可以在所有情况下“解决”问题,但我肯定做错了什么。

编辑 2
我发现另一个异常情况,在旋转设备时发生的频率较低,同时在屏幕上平移 2 个图像。最好用一个例子来解释:

页面视图控制器用于从 AB C 的左到右显示一系列图像中的一个图像。图像 B 在屏幕上。在向左平移期间,您会看到图像 A 和 B 的一部分。如果平移到图像 A 几乎完成,即 B 几乎在屏幕外,并且您旋转设备,则图像 B 通常会在屏幕上结束(它永远不会旋转仍然显示部分平移),但有时图像 C 最终会显示出来——就好像您已经在另一个方向上平移了一样。其他人看到这种行为吗?

4

1 回答 1

0

你在你的 UIViewController 中做什么来为旋转做准备?

– willRotateToInterfaceOrientation:duration:

然后,一旦轮换完成,你如何恢复?

- didRotateFromInterfaceOrientation

这些调用是专门提供的,因此您有机会为轮换做好准备,然后在完成后让一切恢复正常。

于 2013-10-29T18:11:02.977 回答