代码之家  ›  专栏  ›  技术社区  ›  bpapa

如何正确处理包含uiImageView的uiScrollView的旋转?

  •  1
  • bpapa  · 技术社区  · 15 年前

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

    它是一个uiscrollview,启用了分页功能,并从Internet加载了图像,因此我已经调整了 LazyTableImages sample . 滚动视图和其中的每个图像视图都设置了所有的自动调整大小掩码标志。

    当我第一次观察旋转过程中的大小变化时,它看起来不错,但当我开始尝试与滚动视图交互时,我意识到我还必须以编程方式更改ContentView的大小。我通过实现DidRotateFromInterfaceOrientation来实现:在我的视图控制器中。

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

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

    我尝试了两种方法来解决这个问题——两种方法都是使用ScrollDirectToVisible:Animated:uiScrollView的方法,以及直接设置ContentOffset属性。我已经尝试将这段代码放入对方向变化的“一步”和“两步”响应的实现中。例如:

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

    尽管如此,在所有情况下,它看起来都像是地狱般危险。要么我清楚地看到卷轴发生了,要么它只是跳跃。UUUUUUUUUUUUUUUUUU丑陋!有没有办法做到这一点,使它的行为完全像照片应用程序?

    2 回复  |  直到 11 年前
        1
  •  4
  •   bpapa    11 年前

    我最后要做的是-在旋转开始之前,隐藏uiscrollView并创建一个包含当前查看图像的uiImageView。旋转,该图像将旋转得很漂亮,旋转完成后,移除ImageView并取消隐藏滚动视图。

    更新-如果您今天(iOS 6之后的任何时候)阅读此内容,请使用uipageviewcontroller并将transitionstyle设置为uipageviewcontrollertransitionstylescroll,以获取crissakes。

        2
  •  1
  •   Greg    14 年前

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