frame 与 bounds 的区别和convertPoint坐

2018-02-23  本文已影响92人  十指恋静

frame 和 bounds 简介

image.png

本地坐标系的关键就是知道其原点(0,0)在父坐标系中的什么位置(这个位置是相对于父 view 的本地坐标系而言,最终的父 view 就是 UIWindow, 它的本地坐标系原点就是屏幕的左上角)

参考:https://www.jianshu.com/p/964313cfbdaa 中的示例

通过修改 view 的 bounds 属性可以修改本地坐标系的原点位置,进而影响到子 view 的显示位置

bounds 的使用场景

scrollView 中的原理就是不断改变自己的 bounds.
scrollView不断改变自己的 bounds, 从而改变 scrollView 上的子 View和 frame ,他们的 frame 始终在最顶级 view(window)的 frame 内部,这样就可以始终看到内容.

在 scrollView 的滑动过程中,不断增加 scrollView 的bounds 的 y 值,也就是不断把 scrollView 的本地坐标系原点向下偏移(相对于 scrollView 的父 view 的坐标系, y 值越大,越向下偏移).那么此时 scrollView 的子控件的 frame 设置的(0,0)就是不断向上偏移的

bounds 大于 frame 的情况

假设设置了控件的 bounds 大于 frame, 那么此时会导致 frame 被撑大, frame 的x,y,width,height 都会改变.

bounds 的改变会累加

假设 view1上面添加了 view2,view2上面添加了 view3.三个 view 的 size 都是(100,100).
设置如下:

view1.bound = (0, 0, 100, 100)
view2.bound = (0, 100, 100, 100)

那么此时 view3.frame = (0, 0, 100, 100),view3会相对于原来没有设置 view1,view2的 bound 时的位置向上偏移200.

总结

参考:https://www.jianshu.com/p/964313cfbdaa

iOS中 convertPoint 坐标转换规律

参考:https://www.jianshu.com/p/f180597737bf

上一篇下一篇

猜你喜欢

热点阅读