Hallo, ich versuche einen dreieckigen CAShapeLayer zu drehen. Der NorthPole-CAShapeLayer ist in einer benutzerdefinierten UIView-Klasse definiert. Ich habe zwei Funktionen in der ersten Klasse, um die Layer-Eigenschaften einzurichten und eine, um die Rotation zu animieren. Die Rotationsanimation funktioniert einwandfrei, kehrt jedoch nach Abschluss der Rotation in die ursprüngliche Position zurück. Ich möchte, dass die Ebene nach der Rotationsanimation in dem angegebenen Winkel (positionTo = 90.0) bleibt.CATransform3DMakeRotation Ankerpunkt und Position in Swift
Ich versuche, die Position nach der Umwandlung festzulegen, um die richtige Position nach der Animation beizubehalten. Ich habe auch versucht, die Position von der Präsentation() -Methode zu bekommen, aber das war nicht hilfreich. Ich habe viele Artikel über Rahmen, Grenzen und Ankerpunkte gelesen, aber ich kann immer noch nicht verstehen, warum diese Transformationsrotation nicht funktioniert.
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)
Animieren Funktion:
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()
}
Okay, traurig über meine schlechte Antwort früher. Ich werde nur vorschlagen, dass Sie das 'Geschenk' fallen lassen, das' Begin' weglassen, das 'Commit' fallen lassen und mein Buch lesen, um zu erfahren, wie man eine Drehung mit CABasicAnimation macht: http://www.apeth.com /iOSBook/ch17.html#_using_a_cabasicanimation – matt