无法更改AnchorPoint for CAShapeLayer iOS Swift

时间:2017-03-27 13:14:28

标签: cashapelayer anchorpoint catransform3drotate

这是我的自定义类的摘录,它绘制了一些图形。功能drawTick()CAShapeLayer添加蓝色矩形到我的GameTimer UIView

class GameTimer: UIView {

 var tick = CAShapeLayer()
...

 init(){
   super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 200)
 }
...

 func drawTick() {
 tick.path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 50, height: 50)).cgPath
 tick.fillColor = UIColor.blue.cgColor
 self.layer.addSublayer(tick)
 tick.anchorPoint = CGPoint(x: 0.5, y: 0.5)
 tick.position = CGPoint(x: bounds.midX, y: bounds.midY)
 tick.transform = CATransform3DMakeRotation(0.degreesToRadians, 0, 0, 1)
 }

...

}

extension Double {
  var degreesToRadians : CGFloat {
      return CGFloat(self) * CGFloat(M_PI) / 180.0
  }
}

enter image description here

将旋转角度改变为45度

tick.transform = CATransform3DMakeRotation(45.degreesToRadians, 0, 0, 1)

给出了下一个结果:

enter image description here

在这里,我看到,声明的锚点不会影响tick层 - 它应该位于蓝色矩形的中心。旋转围绕点坐标(x:0,y:0) - 蓝色矩形的左上角 - tick.position。 问题 - 为什么声明anchorPoint位置不适用于tick图层?这里的行为很奇怪,假设anchorPoint的默认位置应该已经(x: 0.5, y: 0.5)而没有任何手动覆盖,但是如果我删除了这个覆盖 - 没有任何变化。

1 个答案:

答案 0 :(得分:1)

tick图层没有大小。它看起来正确的原因是路径没有被限制到边界(即在边界之外绘制)。

如果您为形状图层指定与圆形矩形相同的bounds,那么您将能够看到围绕中心的旋转。