anchorPoint 不用于设置 CAShapeLayer 的位置,请改用position。
let layer = CAShapeLayer()
layer.borderColor = UIColor.blackColor().CGColor
layer.borderWidth = 100
layer.bounds = CGRectMake(0, 0, 50, 50)
layer.position = myView.center
layer.fillColor = UIColor.redColor().CGColor
view.layer.addSublayer(layer)
编辑
抱歉之前这么粗略的回答,上面的代码可能无法如你所愿,这是我刚刚出来的正确答案。需要注意的重要一点是:您绘制椭圆路径的方式确实影响了您的 CAShapeLayer
let layer = CAShapeLayer()
myView.layer.addSublayer(layer)
layer.fillColor = UIColor.redColor().CGColor
layer.anchorPoint = CGPointMake(0.5, 0.5)
layer.position = CGPointMake(myView.layer.bounds.midX, myView.layer.bounds.midY)
layer.path = UIBezierPath(ovalInRect: CGRectMake(-75.0 / 2, -75.0 / 2, 75.0, 75.0)).CGPath
来自 Apple 文档,
椭圆路径是按顺时针方向创建的(相对于默认
坐标系)
换句话说,椭圆路径是从边缘而不是中心绘制的,所以你必须考虑你正在绘制的椭圆的半径。在你的情况下,你需要这样做:
layer.path = UIBezierPath(ovalInRect: CGRectMake(-75.0 / 2, -75.0 / 2, 75.0, 75.0)).CGPath
现在我们确保绘制路径的中心等于CAShapeLayer 的中心。然后我们可以使用position 属性来移动我们想要的CAShapeLayer。下图可以帮助你理解。