frame:以父控件左上角为原点
bounds:以自己的左上角为原点,bounds 的x,y永远为0(这一点是❌的!!!)
frame和bounds都是用来描述一块区域
frame:描述可视范围
bounds:描述可视范围在内容的区域,所有的子空间都是相对于内容,bounds的x,y值是修改内容的原点
相对性:可视范围相对于父控件位置永远不变;可视范围相对于内容,位置改变
说一下自己对bounds的理解:
当一个子控件添加到父控件上的时候,改变子控件的frame的x,y值,会改变他在父控件中的位置;而改变子控件的bounds的x,y值,不会改变子控件在父空间中的位置。任何控件都有他自己的“内容”,内容和可视范围不是一个东西,我们能看到的控件,是可视范围,而内容是什么呢。我认为可以理解为scrollView的contentSize,它可以很大,但是我们只能看到可视范围内的部分。要想看到内容的其他部分,就要移动内容,当一部分内容移动到可视范围区域内,我们就能看到相应的内容了。bounds的x,y值就是控制内容的原点!初始0,0的时候,内容原点和可视范围原点是在一个点上的。而修改x,y的值时候,就相当于我们在移动这个控件可视范围下的内容的位置,从而在可视范围上看到不同的内容。
scrollView就是通过改变bounds的x,y做的。了解了bounds的原理后,我们也可以自己做scrollView了。
步骤:
1.创建一个UIView,添加拖动手势。
2.在拖动监听方法中计算出手指的滑动距离,然后根据滑动距离,改变bounds的x,y值,实现内容的拖动。而设置判断滑动距离的最大值,就相当于设置的scrollView的contentSize了。
y值的增加相当于内容向上移动,可视范围相比于内容向下移动。
网友评论