выполнить анимацию при доступе к свойству - PullRequest
0 голосов
/ 02 февраля 2012

это простая форма кода Брэда Ларсона u-tunes course;)

CABasicAnimation *move = [CABasicAnimation animationWithKeyPath:@"position"];
move.duration = 1.0f;
move.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
move.removedOnCompletion = NO;
move.fillMode = kCAFillModeForwards;

CGPoint currentPosition = l.position;
CGPoint newPosition = CGPointMake(currentPosition.x + 60.0f, currentPosition.y + 60.0f);
move.toValue = [NSValue valueWithCGPoint:newPosition];
[l addAnimation:move forKey:@"position"];
l.position = newPosition;

в последней строке я изменяю положение, чтобы отразить конечное состояние слоя, потому что анимация не делает. Но когда я выполняю этот код, анимация не выполняется, и слой перемещается (за 1/4 секунды) в новое положение.

кто-нибудь может объяснить мне, как правильно анимировать положение слоя?

второй вопрос ... когда я запускаю этот код ... каждый последующий доступ к свойству "position" будет выполнять ту же анимацию?

спасибо.

1 Ответ

0 голосов
/ 02 февраля 2012

Отказ от последней строки, l.position = newPosition;.Ваша анимация уже позаботится об этом, и, используя этот установщик свойств, вы неявно дадите слою базовую анимацию по умолчанию .25-секундное действие.

Кроме того, нет, последующие изменения в позиции вашего слояне будет использовать вашу 1-секундную анимацию.Свойства, которые вы используете, выглядят в значительной степени идентичными анимации по умолчанию, хотя, кроме продолжительности;более быстрый способ выполнить то, что вы делаете, был бы примерно таким.

CGPoint currentPosition = l.position;
CGPoint newPosition = CGPointMake(currentPosition.x + 60.0f, currentPosition.y + 60.0f);

[CATransaction begin];
    [CATransaction setAnimationDuration:1.0];
    l.position = newPosition;
[CATransaction commit];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...