Ich habe ein in drawRect gezeichnetes Kompassrad und möchte es nicht neu zeichnen, sondern es stattdessen drehen, wenn sich die Kompassrichtung ändert. Als ich CABasicAnimation wie folgt verwenden:Benutzerdefiniertes UIView ohne Animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:_dialAngle*M_PI/180];
animation.toValue = [NSNumber numberWithFloat:dialAngle*M_PI/180];
animation.duration = 0.0;
animation.repeatCount = 0;
animation.removedOnCompletion = false;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[dial.layer addAnimation:animation forKey:@"transform.rotation.z"];
es als (roter Pfeil oben und Text sind andere Ansicht vom Kompasses) erwartet dreht:
ich nicht wirklich wollen animieren, so habe ich Varianten wie:
[dial.layer setValue:[NSNumber numberWithDouble: dialAngle*M_PI/180] forKeyPath:@"transform.rotation.z"];
Oder:
dial.transform = CGAffineTransformMakeRotation(arrowAngle*M_PI/180);
Oder:
CATransform3D t = CATransform3DIdentity;
dial.layer.transform = CATransform3DRotate(t, dialAngle*M_PI/180, 0.0, 0.0, 1.0);
Und sie führen alle zum gleichen Ergebnis verzerrt:
Automatische Anordnung und Einschränkungen sind auf dieser Ansicht nicht vorhanden.
Ich sollte etwas vermissen und ich kann uns nicht vorstellen, was es ist. Was fehlt mir, um das gleiche Ergebnis wie mit der Animation zu erhalten?
Auch, sollte ich aus Ihrer Erfahrung wirklich drehen Transformation für DrawRect verwenden? In Profiler sah ich, dass DrawRect einige CPU-Zyklen benötigte. Wenn ich Transformationen benutze, sehe ich nicht "meine" CPU-Zyklen, aber die Gesamt-CPU-Werte sind ungefähr gleich, wenn ich mich intensiv drehe.
Es wäre toll, die Transformationen mit Ihrer Hilfe zu zähmen :)!