UIScrollView 子视图在缩放下不保持正确的边界尺寸

Posted

技术标签:

【中文标题】UIScrollView 子视图在缩放下不保持正确的边界尺寸【英文标题】:UIScrollView subviews do NOT maintain correct bounds dimensions under zooming 【发布时间】:2009-09-18 04:14:59 【问题描述】:

我有一个视图层次结构作为 UIScrollView 实例的子视图。视图层次结构使用一个简单的容器视图作为围绕水平行子视图图块的包装器,每个子视图图块都是覆盖 drawRect 的 UIView 子类。没什么特别的。

作为健全性检查,我回显了每个子视图图块的边界、框架和变换。令我惊讶的是,这些在缩放期间都保持不变!这是一个大问题,因为我打算在缩放序列完成后重新绘制每个图块。如果没有正确的尺寸,这是不可能的。

如果这些瓷砖的尺寸完全不正确,我们应该如何在这些瓷砖中使用 Quartz 进行自定义绘图。

有人可以告诉我。谢谢。

干杯,

道格

【问题讨论】:

【参考方案1】:

我可能错了,但这只是逻辑维度;它们将根据UIScrollView 对它们施加的变换进行缩放、旋转和变形。显示上下文也应该进行类似的变形,因此对于 drawRect: 方法应该是正常的。

【讨论】:

为了清楚起见,我在每个子视图“图块”的覆盖 drawRect:rect 方法中呼应了 self.bounds、self.frame 和 self.transform。除非这些属性每个都具有准确的像素尺寸,否则不可能正确渲染每个图块的内容。 “逻辑维度”是什么意思?边界、框架和变换是定义 UIView 在屏幕上的位置和方向的基本几何属性。【参考方案2】:

更新

问题解决了。我忘记考虑正在考虑的坐标系。通过检查超级视图框架/边界/变换,它们确实在缩放期间发生了变化。子视图绘制在本地坐标中进行,然后由父变换缩放。

这里没什么可看的,继续前进。

干杯,

道格

【讨论】:

以上是关于UIScrollView 子视图在缩放下不保持正确的边界尺寸的主要内容,如果未能解决你的问题,请参考以下文章

正确缩放包含许多子视图的 UIScrollView

如何选择正确的视图来缩放视图中的多个 UIScrollView 对象(iPhoneSDK obj-C)?

使用许多图像缩放 UIScrollView 的正确方法?

UIScrollview 子视图在缩放后无法识别平移手势

iPhone:如何在捏缩放uiscrollview时重绘子视图

缩放嵌套在 UIScrollView 中的子视图