UIBezierPath 点坐标系与所属 layer 坐标系的对应关系疑问
UIBezierPath 坐标体系问题解答
- 路径本身的坐标属性
UIBezierPath是纯几何路径的描述类,在被绑定到任意图层/视图前,内部存储的所有点都是无绑定的逻辑坐标,仅代表几何空间中的相对位置,没有对应实际的屏幕坐标或者图层坐标,你填写的数值只是自定义的几何位置标记。 - 绑定图层后的映射规则
当你把UIBezierPath实例的cgPath属性赋值给CAShapeLayer的path属性时,路径的坐标会直接匹配该CAShapeLayer的bounds坐标系:iOS 默认坐标系原点在图层左上角,x 轴向右递增,y 轴向下递增,路径的坐标点会以这个坐标系为基准渲染。
你举例的代码场景:
注:Objective-C 版本对应的方法为let path = UIBezierPath() path.move(to: CGPoint(x: 50, y: 0)) path.addLine(to: CGPoint(x: 100, y: 0))moveToPoint:和addLineToPoint:,逻辑完全一致
这里的 50、100 就是你定义的逻辑坐标值,如果把这个路径赋值给一个bounds为CGRect(x: 0, y: 0, width: 200, height: 50)的CAShapeLayer,这条线段会渲染在该图层内部,从左上角向右50点的顶部位置,水平延伸到左上角向右100点的顶部位置,线段总长度为50点。如果该图层的bounds.origin不是默认的(0,0),路径的坐标会以这个自定义的bounds原点为基准计算渲染位置。 - 多尺寸适配技巧
如果需要让同一个路径适配不同尺寸的图层,不需要重写所有路径点,直接调用apply(_ transform: CGAffineTransform)方法对路径的所有坐标做整体的平移、缩放、旋转调整即可。
内容的提问来源于stack exchange,提问作者Patroclus
相关产品推荐
相关产品推荐

