Hinweis: Dies ist für eine Cocoa App unter OS X, NICHT iOS.Core Animation: Setzen Sie anchorPoint auf 10.8, um eine Ebene um das Zentrum zu drehen
Ich habe eine Layer-Backed NSButton (Unterklasse von NSView). Was ich tun möchte, ist diese Schaltfläche mit Core Animation zu drehen. Ich verwende den folgenden Code, es zu tun:
CABasicAnimation *a = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
a.fromValue = [NSNumber numberWithFloat:0];
a.toValue = [NSNumber numberWithFloat:-M_PI*2];
[_refreshButton.layer setAnchorPoint:CGPointMake(0.5, 0.5)];
a.duration = 1.8; // seconds
a.repeatCount = HUGE_VAL;
[_refreshButton.layer addAnimation:a forKey:nil];
Dies funktioniert, außer dass, wenn es ausgeführt wird, die Schicht springt nach unten und nach links, so dass dessen Mittelpunkt am Ursprung Punkt des NSView, die ist die untere linke Ecke bei (0,0). Die Schicht dreht sich dann um ihr Zentrum, aber offensichtlich ist das Springen in die untere linke Ecke nicht akzeptabel.
Also, nach viel Lesen, ich diese Linie in den Release Notes 10.8 API gefunden:
On 10.8, AppKit will control the following properties on a CALayer
(both when "layer-hosted" or "layer-backed"): geometryFlipped, bounds,
frame (implied), position, anchorPoint, transform, shadow*, hidden,
filters, and compositingFilter. Use the appropriate NSView cover methods
to change these properties.
Das bedeutet, dass AppKit mein Ruf "zu ignorieren" oben im Code -setAnchorPoint und stattdessen ist setze diesen Ankerpunkt auf den Ursprung der NSView (0,0).
Meine Frage ist: wie löse ich das? Was ist die "geeignete NSView-Cover-Methode", um den Ankerpunkt für den Layer festzulegen (ich finde eine solche Methode nicht in NSView). Am Ende des Tages möchte ich nur, dass sich mein Knopf auf unbestimmte Zeit um seinen Mittelpunkt dreht.
Perfect! Wissen Sie; Ich habe die Position-Eigenschaft gesehen, aber ich habe es nicht versucht, weil ich den obigen Hinweis gelesen habe, der besagt, dass AppKit es kontrollieren wird. Danke für die Lösung! – Bryan
Irgendeine Idee, warum die Rotation M_PI/2 das erste Mal gegen den Uhrzeigersinn und danach im Uhrzeigersinn drehen würde? – greg
Ich müsste Ihren Code sehen. Sie sollten Ihre eigene Frage stellen. –