我理解框架和界限之间的区别,我认为,界限是视图的局部坐标系,而帧是超视图。
然而,对于滚动视图,我有点困惑。
当我有一个UIImageView在一个UIScrollView和捏放大它放大,它似乎变大(宽度和高度)增加了相应的UIImage的宽度和高度。
然而,UIImageView的界限似乎一点也不改变。
为什么会这样呢?对于所有这些,滚动视图是如何工作的?我阅读了多个问题并查看了文档,但这个解释让我难以理解。
放大UIScrollView是如何影响其内容的?它只是改变了缩放视图的框架,而不是边界吗?
发布于 2014-02-11 01:04:39
参见解释在我的书里
滚动视图通过将缩放转换应用到可伸缩视图进行缩放;因此,可伸缩视图的框架也被缩放。此外,滚动视图还需要确保滚动继续正常工作:用户滚动的限制应该继续与内容的限制相匹配,并且像scroll scrollRectToVisible:动画:应该继续以相同的方式处理相同的值。因此,滚动视图自动缩放自己的contentSize以匹配当前的zoomScale。(实际上,可以通过在setContentSize子类中重写UIScrollView来检测这种情况:您可以看到滚动视图在缩放时调整自己的内容大小。)
基本上(虽然从上面的引文中还不太清楚),我们没有必要关注可伸缩视图的框架--或者任何具有非身份转换的视图,这正是这里的情况。苹果在UIView上的文档非常清楚地表明了这一点。因此,您不应该只看框架--只看转换。您正在读取的帧值纯粹作为转换更改的副作用而更改。
至于可伸缩视图的界限--显然边界不会改变;这就是转换工作的全部要点。它保持一个常量的center和bounds,这样子视图和绘图就可以在参考坐标框架内继续正确运行,尽管进行了转换。我的书“跟你谈到底”也理解了这一点。
另一方面,滚动视图本身的界限肯定会改变它们的起源,尤其是因为这正是滚动视图滚动的意义所在。滚动是一种变化的边界起源,朴素和简单。在缩放过程中,这并不令人惊讶,因为,正如我刚才所说,内容大小已经发生了变化,所以内容可能会被重新定位,以便在缩放时继续连贯地显示内容。
https://stackoverflow.com/questions/21690794
复制相似问题