代码之家  ›  专栏  ›  技术社区  ›  Mark Lummus

iOS 4.0上的放大uiscrollview有问题

  •  0
  • Mark Lummus  · 技术社区  · 14 年前

    这是一个针对特定问题的一般性问题。

    我正在一个显示照片的应用程序中使用uiscrollview。在iOS<4.0上,缩放效果非常好。在iOS 4.0.x上运行的同一个应用程序在缩放时出现问题。具体来说,如果图像没有填满视图(黑色条纹出现在顶部/底部),则第一次缩放是急促的,垃圾数据显示在屏幕底部。

    要分析的源代码是复杂和分散的方法,以便在这里充分共享。有人能提出任何可能导致这种奇怪行为的地方吗?

    谢谢! 作记号

    编辑:这是来自双击处理程序的代码(从tapDetectingImageView示例代码中借用):

    - (void)tapDetectingImageView:(TapDetectingImageView *)view gotDoubleTapAtPoint:(CGPoint)tapPoint {
        // double tap zooms in
        float newScale = [self zoomScale] * ZOOM_STEP;
        CGRect zoomRect = [self zoomRectForScale:newScale withCenter:tapPoint];
        [self zoomToRect:zoomRect animated:YES];
    }
    

    如果我在调用zoomtorect时更改动画参数,我可以强制执行这种奇怪。当“动画”为“否”时,我的图像将变成两个叠加在一起的图像。底部图像是原始缩放级别,顶部图像是新的缩放级别。如果我滑动屏幕进行平移,图像就会刷新。就好像对layoutSubviews或drawRect的调用没有被调用一样。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Brad Larson    14 年前

    这可能相关,也可能无关,但uiscrollView处理比例因子的方式在iPhoneOS3.2+中以未记录的方式发生了变化。

    以前,如果您使用 -scrollViewDidEndZooming:withView:atScale: 要通过对视图应用标识转换来重新渲染内容,然后以新的比例因子快速重新绘制图像,uiscrollview将忽略这一点,并根据视图的初始大小继续为您提供绝对比例因子。

    在iPhoneOS3.2+上,uiscrollview现在根据上次将内容视图的转换重置为标识转换时的相对比例因子。这可能会导致不同操作系统版本之间存在显著的缩放差异。