UIScrollView的contentSize属性的一点观点
学习UIScrollView时,对于图片的滚动的原理了解的很模糊,最初觉得只要能做出效果来,内部怎么实现的好像都不重要。不过心中总是有个结,不理解contentSize的限制到底是什么原因。
后来,粗略看了苹果的官方文档,算是有了一个大概的印象。UIScrollView的滚动效果并不是某个视图或空间进行了移动,也不是UIScrollView对象自身移动了。在用户滚动时,系统会自动计算UIScrollView的contentOffset,然后根据contentOffset和UIScrollView自身的bounds,然后在UIScrollView的content视图里面选取对应区域的内容进行显示,如此从表面看,我们在滚动屏幕时,对应的图片也滚动了。
举一个例子,假如我们将contentSize设置为500x300,UIScrollView对象本身的bounds为(0,0,100,100),那么我们向左滚动屏幕中可滚动部分(UIScrollView对象对应部分),此时contentOffset为(100,0),那么UIScrollView对象就会显示其content中frame为(100,0,100,100)部分的内容,在这个滚动的过程中UIScrollView对象本身的frame没有变化,显示的图片对应的控件的frame也没有发生变化。
实际上我们也可以根据标识符(变量名称或方法名称)判断具体情况。比如contentSize和contentOffset,显然是和内容(content),而不是和UIScrollView相关的。了解了具体的实现,再看标识符,才能更好地记忆方法名,属性名和对应的限制(比如为何contentSize至少要有一个方向的长度大于UIScrollView对象对应的长度)。