tips:
1.ScrollView的滚动效果就是利用了修改bounds来实现的!!!!(拓展知识)
(bounds.origin就是scrollView的offset值相同,其实scrollView的contentInset本质也是修改bounds)
特别值得注意的是
为什么我们的contentsize跟frame相同还是可以滚动?
self.automaticallyAdjustsScrollViewInsets不设置no的话,系统内部修改了contentInset,增加了contentSize 64,所以可以滚动了;
2.position是layer中的anchorPoint在superLayer中的位置坐标。(position就是center)
(position就是center,anchorPoint就是layer上的哪个位置对准position)
3.互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。
4.frame、position与anchorPoint有以下关系:
frame.origin.x = position.x - anchorPoint.x * bounds.size.width;
frame.origin.y = position.y - anchorPoint.y * bounds.size.height;
第2条的互不影响原则还可以这样理解:position与anchorPoint是处于不同坐标空间中的重合点,修改重合点在一个坐标空间的位置不影响该重合点在另一个坐标空间中的位置。
正文
UIView有三个比较重要的布局属性:frame,bounds和center,CALayer对应地叫做frame,bounds和position。为了能清楚区分,图层用了“position”,视图用了“center”,但是他们都代表同样的值。
frame:content(内容物)在其父界面元素中的位置和大小。
bounds:content(内容物)在其自身坐标系统中的位置和大小。(bounds就是scrollView的offset值相同,其实scrollView的contentInset本质也是修改bounds)
center:描述当前界面元素的中心点在其父界面元素中的位置,图层用了“position”,视图用了“center”,但是他们都代表同样的值。
(position就是center,anchorPoint就是layer上的哪个位置对准position)
一般我们可以通过以下公式得出center:
center.x = frame.origin.x + frame.size.width * 0.5;
center.y = frame.origin.y + frame.size.height * 0.5;
视图的frame,bounds和center属性仅仅是储方法,当操纵frame,实际上改变位下视图下CAlayer的frame,不能独立于图层外改变视图的frame!!!
对于视图或者图层来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中任何一个值发生改变,frame都会变化。相反,改变frame的值同样会影响到他们当中的值。
网友评论