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

时间:2014-02-11 00:34:38

标签: ios objective-c uiview uiscrollview uiimageview

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

然而,使用scrollviews,我有点困惑。

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

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

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

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

1 个答案:

答案 0 :(得分:5)

请参阅解释in my book

  

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

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

对于可伸缩视图的界限 - 显然边界不会改变;这就是变换如何运作的重点。它保持常量centerbounds,以便尽管进行了变换,子视图和绘图仍然可以在参考帧坐标内正确运行。我的书talks you through也对此有所了解。

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