У меня есть CALayer
, который я явно анимирую в новую позицию. Мое свойство toValue
кажется только относительно начальной позиции слоя.
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
в центр поля зрения?
РЕДАКТИРОВАТЬ:
-(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.
additive
. Если вы не меняете его, по умолчанию он должен быть отключен. - person jtbandes   schedule 31.05.2016additive
. - person slider   schedule 31.05.2016blueDot.position = CGPointMake(x,y)
внутрь[UIView animateWithDuration:]
, и синяя точка, кажется, прыгает туда. Явная анимация анимируется правильно, хотя и в неправильном положении. - person slider   schedule 31.05.2016UIView
анимация. Вы хотите сделать свою неявную анимацию внутри блокаCATransaction
. т.е.[CATransaction begin]; [CATransaction setAnimationDuration:1.0]; <your changes to the layer> [CATransaction commit];
- person Hamish   schedule 31.05.2016CATransaction
вам не нужен, если вас устраивают настройки по умолчанию, я просто переводил явную анимацию OP в неявную :) - person Hamish   schedule 31.05.2016blueDot
не является нижележащим слоем данного представления - это просто слой. Следовательно, вы не можете использовать[UIView animateWithDuration:]
на нем. - person Hamish   schedule 31.05.2016UIView
вместоCAShapeLayer
. Легче неявно анимировать. - person slider   schedule 01.06.2016