UIScrollView如何更改框架,而不是边界?UIScrollView如何工作?

Dou*_*ith 1 objective-c uiscrollview uiview uiimageview ios

我理解帧和边界之间的区别我认为,边界是视图的局部坐标系,而帧是超视图.

但是,使用scrollviews,我有点困惑.

当我在UIScrollView中有一个UIImageView并且用它来缩放它时,似乎框架变大(宽度和高度)也会增加相应UIImage的宽度和高度.

但是,看起来UIImageView的界限根本没有变化.

为什么是这样?滚动视图如何适用于所有这些?我已经阅读了多个问题并检查了文档,但这个解释让我望而却步.

如何放大UIScrollView会影响其内容?它只是改变缩放视图的框架,但不知何故不是边界?

mat*_*att 5

请参阅我的书中的解释:

滚动视图通过将缩放变换应用于可缩放视图来缩放; 因此,可缩放视图的帧也被缩放.此外,滚动视图涉及使滚动继续正常工作:用户滚动时的限制应继续匹配内容的限制,并且诸如scrollRectToVisible:animated:之类的命令应继续以相同的方式对相同的值起作用.因此,滚动视图会自动缩放其自己的contentSize以匹配当前的zoomScale.(您实际上可以通过覆盖UIScrollView子类中的setContentSize来检测这种情况:您可以在缩放时看到滚动视图调整其自己的内容大小.)

基本上(尽管从上面的引文中已经不是很清楚),我们对可扩展视图的框架(或任何视图)没有任何关于应用非标识转换的框架的业务,这正是这里的情况.UIView上的Apple文档非常清楚这一事实.因此,你不应该看框架 - 只有变换.您正在读取的帧纯粹是变换的副作用.

至于可伸缩视图的界限 - 显然边界不会改变; 这就是变换如何运作的重点.它保持恒定的centerbounds,从而使子视图和绘图继续帧的参考坐标内,尽管变换正确操作.我的书也通过对此的理解来引导你.

另一方面,滚动视图自身的界限当然可以改变它们的原点,尤其是因为它与滚动视图滚动的含义完全相同.滚动边界起源的变化,简单明了.在缩放过程中这并不奇怪,因为正如我刚才所说,内容大小已经改变,因此内容可能会重新定位,以便在缩放时保持连贯显示.