Не удается изменить AnchorPoint для CAShapeLayer iOS Swift

Вот отрывок из моего пользовательского класса, который рисует некоторую графику. функция drawTick() добавляет CAShapeLayer с синим прямоугольником на мой GameTimerUIView:

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
  }
}

Изменение угла поворота на 45 градусов

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

дает следующий результат:

Здесь я вижу, что заявленная точка привязки не влияет на tick слой - он должен быть в центре синего прямоугольника. Вращение вращается вокруг точки с координатами (x: 0, y: 0) - левый верхний угол синего прямоугольника - tick.position, Вопрос - почему заявлен anchorPoint позиция не относится к tick слой? Это странное поведение, если предположить, что положение по умолчанию anchorPoint должно быть уже (x: 0.5, y: 0.5) без ручного переопределения, но если я уберу это переопределение - ничего не изменится.

1 ответ

Решение

tick слой не имеет размера. Причина, по которой он выглядит правильно, заключается в том, что путь не обрезан до границ (то есть нарисован за пределами границ).

Если вы даете форму слоя одинаково bounds как прямоугольник круга, тогда вы сможете увидеть вращение вокруг центра.

Другие вопросы по тегам