CALayer - CABasicAnimation skaliert nicht um center / anchorPoint
Mit dem nachstehenden code ich habe versucht, meine CALayer zu skalieren um den Mittelpunkt, aber es skaliert von Links/oben (0,0). Ich sah diese Frage: Ankerpunkt in CALayer und haben versucht, die Einstellung der anchorPoint - aber es war [.5, .5], bevor ich es eingestellt und die Einstellung keinen Unterschied macht. Habe auch versucht die Einstellung contentsGravity
.
Die eingerichtet ist, ich habe ein CAShapeLayer
Hinzugefügt self.view.layer
ich einige Zeichnung in es und fügen Sie dann die CABasicAnimation. Die animation läuft wunderbar - aber er skaliert es nach oben/Links - nicht in der Mitte der Ansicht.
Wurden basteln mit diesem für ein paar Stunden - es muss etwas einfach, aber ich bekomme es nicht.
shapeLayer.anchorPoint = CGPointMake(.5,.5);
shapeLayer.contentsGravity = @"center";
printf("anchorPoint %f %f\n", shapeLayer.anchorPoint.x, shapeLayer.anchorPoint.y);
CABasicAnimation *animation =
[CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
[animation setDuration:1.0];
animation.fillMode=kCAFillModeForwards;
animation.removedOnCompletion=NO;
[shapeLayer addAnimation:animation forKey:@"zoom"];
InformationsquelleAutor der Frage No Grabbing | 2012-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist der
bounds
Ihrer Schicht?Ich Wette, es hat die Größe null; versuchen Sie, die Größe die gleiche Größe wie Ihre Form.
CAShapeLayer
zeichnet man die Form als Art overlay, unabhängig von dercontents
(undbounds
undcontentsGravity
usw.) , die Sie verwenden würden, in einem gewöhnlichenCALayer
. Es kann ein wenig verwirrend sein.InformationsquelleAutor der Antwort Kurt Revis
Stellen Sie außerdem sicher, dass Sie das hinzufügen der animation nachdem die Ansicht erstellt wird. Wenn Sie versuchen, hinzufügen einer animation in die Kommentarzeichen vor der viewDidLoad, wird es wahrscheinlich nicht funktionieren. Versuchen Sie, es zu viewDidAppear statt.
Ich weiß nur Swift, aber hier ist ein Beispiel:
InformationsquelleAutor der Antwort Dave G
Es ist ein Alter thread, aber in diesem Fall hilft niemandem.
Diese ia eine Koordinatenraum problem. Sie müssen nur legen Sie die Zeichnung, Raum und der Raum, der den Pfad. Dieser code funktioniert für mich...
...nur diese auf den start der animation creation-Methode (innerhalb einer Methode auf der übergeordneten Ansicht)...
dieser code funktioniert unverändert auf iOS-und MacOS - abgesehen von der optionalen benötigt, Schicht für MacOS.
(BTW braucht man zum entfernen der animation-Schicht, nachdem die animation beendet ist!)
InformationsquelleAutor der Antwort Alan
Verbrachte ich Stunden, um herauszufinden, wie es zu tun, nach der Mitte, konnte aber nicht irgendwelche Lösungen für OSX. Ich beschloss, zu verschieben Ebene mit CATransform3DMakeTranslation und kombinieren Sie beide verwandelt.
Mein code:
InformationsquelleAutor der Antwort Ivan Androsenko