1

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

它是一个 UIScrollView,它启用了从 Internet 加载的图像的分页功能,因此我调整了LazyTableImages 示例的部分内容。Scroll View 和其中的每个 ImageView 都设置了它们的所有 autoresize 掩码标志。

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

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

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

我尝试通过使用 UIScrollView 的 scrollRectToVisible:animated: 方法以及尝试直接设置 contentOffset 属性来解决这两种方法。我已经通过将此代码放在对方向变化的“一步”和“两步”响应的实现中进行了实验。例如:

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

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

4

2 回答 2

4

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

更新 - 如果您今天正在阅读此内容(iOS 6 之后的任何时间),请使用 UIPageViewController 并将 transitionStyle 设置为 UIPageViewControllerTransitionStyleScroll,以备不时之需。

于 2010-05-28T03:42:12.730 回答
1

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

于 2010-08-23T03:20:30.597 回答