【问题标题】:problem with zoom in UIScrollView on iOS 4.0在 iOS 4.0 上放大 UIScrollView 的问题
【发布时间】:2010-08-20 16:14:37
【问题描述】:

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

我在显示照片的应用程序中使用 UIScrollView。在 iOS

要分析的源代码非常复杂,并且可以在此处充分分享。任何人都可以建议任何可能导致这种奇怪行为的区域吗?

谢谢! 标记

编辑:这是来自双击处理程序的代码(借用自 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 的调用中更改动画参数,我可以强制执行此操作。当动画为 NO 时,我的图像变成 2 个图像,一个叠加在另一个之上。底部图像是原始缩放级别,顶部图像是新缩放级别。如果我滑动屏幕进行平移,图像就会刷新。就好像没有调用 layoutSubviews 或 DrawRect 一样。

【问题讨论】:

    标签: iphone uiscrollview ios4


    【解决方案1】:

    这可能相关也可能不相关,但 UIScrollView 处理比例因子的方式在 iPhone OS 3.2+ 中以未记录的方式发生了变化。

    以前,如果您使用 -scrollViewDidEndZooming:withView:atScale: 通过对视图应用身份转换然后以新的比例因子重绘图像来重新渲染您的内容,UIScrollView 将忽略这一点并继续根据视图的初始大小。

    在 iPhone OS 3.2+ 上,UIScrollView 现在会根据您上次将内容视图的转换重置为身份转换的时间为您提供一个相对比例因子。这可能会导致不同操作系统版本之间存在显着的扩展差异。

    【讨论】:

    • 我在昨晚发布问题后使用一些代码和一些调试结果编辑了我的问题。听起来比例因子可能是个问题。你能指出一些描述 3.2+ 中这种变化的东西,可能有一些演示或教程代码吗?谢谢!
    • @iPixFolio - 你从-viewForZoomingInScrollView:返回什么?从上面的代码和描述来看,几乎听起来像是在不同的时间返回了不同的视图。无论如何,我在这个答案中更多地谈论缩放行为的变化:stackoverflow.com/questions/448285/…。就代码而言,如果针对早于 3.2 的版本,您只需要检测当前操作系统,以便提供两种不同的缩放处理路径。
    • 我在不同的时间返回不同的视图。此代码使用 1 个滚动视图的技巧来滚动多个图像和缩放,而不是在另一个中嵌套多个滚动视图。我需要通过哪些方法对比例因子进行更改?
    • @iPixFolio - 我只处理过具有单一内容视图的滚动视图。切换缩放的视图听起来像是您奇怪行为的最可能原因。因为缩放比例现在是相对的,它可能使用从缩放动作(可能发生在不同的视图上)返回的先前变换作为将在当前视图上执行的缩放的基础。如果是这样,您可能需要考虑它尝试以复杂方式应用的转换。对于如何简单地处理这个问题,我没有好的建议。
    • 这原来是我在更改异步加载逻辑时引入的其他地方的错误。我使用缩略图,直到下载了真实图像(在后台),然后我删除了缩略图 imageview 。错误是我并不总是删除缩略图图像视图。另一个错误与 zoomToRect 有关。这不会强制重绘。这两个错误的结合给了我奇怪的感觉。一旦我纠正了这两个错误,现在它比以前工作得更好。感谢您的帮助!
    猜你喜欢
    • 2011-08-13
    • 2020-05-06
    • 2012-08-16
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2011-07-03
    相关资源
    最近更新 更多