У меня есть CALayer
, что я явно оживляюсь на новую позицию. Свойство My toValue
похоже только на исходное положение слоя.Доступен ли CABasicAnimation относительно исходного положения?
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);
Таким образом, этот код не перерисовывает слой в центр обзора. Кажется, что он действительно перерисовывает слой до CGPointMake(self.view.center.x + blueDot.position.x, self.view.center.y + blueDot.position.y)
, как будто он добавляет значения float
self.view.center
в исходное положение слоя.
Предполагается ли, что собственность toValue
будет действовать следующим образом? Какой самый чистый способ переместить мой blueDot
в центр обзора?
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.
Существует свойство CAPropertyAnimation для управления этим именем 'additive'. Если вы не меняете его, он по умолчанию должен быть выключен. – jtbandes
Да, я не устанавливаю свойство 'additive'. – chicobermuda
Кроме того, похоже, что все это можно было бы сделать, используя неявные анимации, если вы просто хотите, чтобы позиция изменилась. – jtbandes