Привет Я пытаюсь повернуть треугольник CAShapeLayer. NorthPole CAShapeLayer определяется в пользовательском классе UIView. У меня есть две функции в классе, чтобы настроить свойства слоя и один для анимации вращения. Анимация вращения отлично работает, но после завершения вращения она возвращается в исходное положение. Я хочу, чтобы слой оставался на заданном угле (positionTo = 90.0) после анимации вращения.CATransform3DMakeRotation anchorpoint и позиция в Swift
Я пытаюсь установить положение после преобразования, чтобы сохранить правильное положение после анимации. Я также попытался получить позицию из метода presentation(), но это было бесполезно. Я прочитал много статей о кадрах, границах, привязках, но я все еще не могу понять, почему это вращение преобразования не работает.
private func setupNorthPole(shapeLayer: CAShapeLayer) {
shapeLayer.frame = CGRect(x: self.bounds.width/2 - triangleWidth/2, y: self.bounds.height/2 - triangleHeight, width: triangleWidth, height: triangleHeight)//self.bounds
let polePath = UIBezierPath()
polePath.move(to: CGPoint(x: 0, y: triangleHeight))
polePath.addLine(to: CGPoint(x: triangleWidth/2, y: 0))
polePath.addLine(to: CGPoint(x: triangleWidth, y: triangleHeight))
shapeLayer.path = polePath.cgPath
shapeLayer.anchorPoint = CGPoint(x: 0.5, y: 1.0)
Функция одушевленные:
private func animate() {
let positionTo = CGFloat(DegreesToRadians(value: degrees))
let rotate = CABasicAnimation(keyPath: "transform.rotation.z")
rotate.fromValue = 0.0
rotate.toValue = positionTo //CGFloat(M_PI * 2.0)
rotate.duration = 0.5
northPole.add(rotate, forKey: nil)
let present = northPole.presentation()!
print("presentation position x " + "\(present.position.x)")
print("presentation position y " + "\(present.position.y)")
CATransaction.begin()
northPole.transform = CATransform3DMakeRotation(positionTo, 0.0, 0.0, 1.0)
northPole.position = CGPoint(x: self.bounds.width/2, y: self.bounds.height/2)
CATransaction.commit()
}
Хорошо, жаль мой плохой ответ раньше. Я просто предлагаю вам отказаться от 'present', отбросить' begin', сбросить 'commit' и прочитать мою книгу, чтобы узнать, как сделать ротацию, используя CABasicAnimation: http://www.apeth.com /iOSBook/ch17.html#_using_a_cabasicanimation – matt