我正在开发一个图像查看器,很像照片应用程序。

这是一个 UIScrollView,启用了分页功能,并且图像从互联网加载,因此我调整了部分内容 LazyTableImages 示例. 。滚动视图和其中的每个 ImageView 都设置了所有自动调整大小掩码标志。

当我第一次观察旋转期间如何调整大小时,它看起来不错,但是当我开始尝试与滚动视图交互时,我意识到我还必须以编程方式更改 contentView 的大小。我通过实现 didRotateFromInterfaceOrientation 来做到这一点:在我的视图控制器中。

[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];

当交互行为正常时,我发现,如果我查看第二张照片并旋转,第一张和第二张照片的部分内容都会显示在屏幕上。我还需要更改 contentOffset。

我尝试通过两种方式解决这个问题 - 都使用scrollRectToVisible:animated:UIScrollView 的方法,以及尝试直接设置 contentOffset 属性。我已经尝试将此代码放入对方向变化的“一步”和“两步”响应的实现中。例如:

-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];

但在所有情况下,它看起来都非常糟糕。要么我清楚地看到滚动发生,要么它只是跳跃。呜呜呜呜呜呜呜!有没有办法做到这一点,使其行为与照片应用程序完全相同?

有帮助吗?

解决方案

我最终做了什么 - 在旋转开始之前,隐藏 UIScrollView 并创建一个包含当前查看的图像的 UIImageView。旋转,该图像将旋转得非常漂亮,当旋转完成时,删除 ImageView 并取消隐藏 Scroll View。

更新 - 如果您今天正在阅读本文(iOS 6 之后的任何时间),请使用 UIPageViewController 并将 transitionStyle 设置为 UIPageViewControllerTransitionStyleScroll,以防万一。

其他提示

当面对同样的问题时,我做了一些略有不同的事情。在 willRotateToInterfaceOrientation:duration:, ,我隐藏了除当前显示的子视图之外的所有 UIScrollView 的子视图,并且在 didRotateFromInterfaceOrientation: 我取消隐藏子视图。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top