Layer.frame не обновляется после CAKeyframeAnimation? - PullRequest
0 голосов
/ 22 марта 2009

Я пытаюсь анимировать положение слоя. Он оживляет, но его свойство кадра не обновляется в конце анимации, кажется, что это только его презентационный слой. Вот что я делаю:

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint   (path, NULL, layer.frame.origin.x, layer.frame.origin.y);
CGPathAddLineToPoint(path, NULL, 20,  20);
CGPathAddLineToPoint(path, NULL, 20,  460);
CGPathAddLineToPoint(path, NULL, 300, 460);

CAKeyframeAnimation* animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animation.path = path;
animation.calculationMode = kCAAnimationPaced;
animation.repeatCount = 0;
animation.autoreverses = NO;

CAAnimationGroup *theGroup = [CAAnimationGroup animation];
theGroup.animations = [NSArray arrayWithObject:animation];
theGroup.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
theGroup.duration = 2;
theGroup.removedOnCompletion = NO;
theGroup.fillMode = kCAFillModeForwards;
CFRelease(path);

[layer addAnimation:theGroup forKey:@"animatePosition"];

После завершения анимации слой находится в правильном месте назначения, но когда я запрашиваю его значение кадра, он говорит, что он все еще находится в своем первоначальном месте! Когда / где / как мы должны привести свойство кадра в синхронизацию со свойством фрейма presentationLayer слоя?

Спасибо

1 Ответ

1 голос
/ 22 марта 2009

Анимация фактически не меняет никаких значений на нижележащем слое. Чтобы обновить текущее значение фрейма, сразу после вашей последней строки просто установите для фрейма новое значение. Тогда вы, вероятно, можете избавиться от removedOnCompletion = NO;

Пока анимация не является аддитивной, анимация будет работать на основе введенных вами данных, и установка фактического кадра не будет влиять на отображение до тех пор, пока анимация не завершится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...