我正在开发一个图像查看器,就像照片应用程序一样。
这是一个UIScrollView,启用了从互联网上加载图像的分页功能,因此我调整了部分LazyTableImages sample。 Scroll View和其中的每个ImageView都设置了所有自动调整大小屏蔽标志。
当我第一次观察旋转期间调整大小时,它看起来很好,但是一旦我开始尝试与滚动视图交互,我意识到我还必须以编程方式更改contentView的大小。我通过在我的视图控制器中实现didRotateFromInterfaceOrientation来实现这一点。
[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)];
随着交互行为正常,我发现,如果我正在查看第二张照片并旋转,第一张和第二张照片的部分将显示在屏幕上。我也需要更改contentOffset。
我试图通过使用URcrollView的scrollRectToVisible:animated:方法以及尝试直接设置contentOffset属性来解决这两种方式。我已经通过将此代码应用于对Orientation中的更改的“一步”和“两步”响应的实现进行了实验。例如:
-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES];
但在所有情况下,它只是看起来很肮脏。要么我清楚地看到滚动发生,要么只是跳跃。 Uuuuuuuuuuugly!有没有办法做到这一点,它的行为与照片应用程序完全相同?
答案 0 :(得分:4)
我开始做的事情 - 在旋转开始之前,隐藏UIScrollView并创建包含当前查看图像的UIImageView。旋转,该图像将旋转完美,漂亮,旋转完成后删除ImageView并取消隐藏滚动视图。
更新 - 如果您今天正在阅读此内容(iOS 6之后的任何时间),请使用UIPageViewController并将transitionStyle设置为UIPageViewControllerTransitionStyleScroll,以获取危机。
答案 1 :(得分:1)
当遇到同样的问题时,我做了一些稍微不同的事情。在willRotateToInterfaceOrientation:duration:
中,我隐藏了除当前显示的子视图之外的所有UIScrollView子视图,并在didRotateFromInterfaceOrientation:
中取消隐藏子视图。