Ich habe eine CALayer
, die ich explizit auf eine neue Position animieren. Meine toValue
Eigenschaft scheint nur relativ zur ursprünglichen Position der Ebene zu sein.Ist CABasicAnimation toValue relativ zur Anfangsposition?
CABasicAnimation *move = [CABasicAnimation animationWithKeyPath:@"position"];
move.fromValue = [NSValue valueWithCGPoint:CGPointMake(blueDot.position.x, blueDot.position.y)];
move.toValue = [NSValue valueWithCGPoint:CGPointMake(self.view.center.x, self.view.center.y)];
move.duration = 1.0;
[blueDot addAnimation:move forKey:@"myMoveAnimation"];
blueDot.position = CGPointMake(self.view.center.x, self.view.center.y);
Dieser Code zeichnet die Ebene nicht in der Mitte der Ansicht neu. Es sieht so aus, als ob die Ebene wirklich auf CGPointMake(self.view.center.x + blueDot.position.x, self.view.center.y + blueDot.position.y)
neu gezeichnet wird, so wie es die float
Werte von self.view.center
zu der Startposition der Ebene hinzufügt.
Soll die toValue
Eigenschaft so handeln? Was ist der sauberste Weg, um meine blueDot
in die Mitte der Ansicht zu bewegen?
EDIT:
-(void)viewDidLoad {
[super viewDidLoad];
blueDot = [CAShapeLayer layer];
[blueDot setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(self.view.center.x - 60 - 5, 163.5, 10, 10)] CGPath]];
[blueDot setStrokeColor: [UIColor blueColor]CGColor];
[blueDot setFillColor:[UIColor blueColor]CGColor];
[[self.view layer] addSublayer:blueDot];
}
// 163.5 is a placeholder for another view's position value so it's more readable for you guys.
Es gibt eine CAPropertyAnimation-Eigenschaft, die das Steuerelement 'additive' steuert. Wenn Sie es nicht ändern, sollte es standardmäßig deaktiviert sein. – jtbandes
Ja, ich setze die 'additive' Eigenschaft nicht. – chicobermuda
Es scheint auch, dass dies alles mit impliziten Animationen gemacht werden könnte, wenn Sie nur die Position ändern möchten. – jtbandes