объединение анимации на одном свойстве - PullRequest
3 голосов
/ 16 февраля 2009

Как я могу использовать две отдельные CABasicAnimations для одновременной анимации одного и того же свойства?

Например, две CABasicAnimations, обе анимируют position.y.

Первой анимацией будет отскок (от 100 до 300, длительность = 1, автореверс = да, repeatcount = 10)

Второй анимацией будет медленная прокрутка (на 100, длительность = 10)

Поведение, которое я вижу, заключается в том, что если выполняется первая анимация, и я использую:

[pickle.layer addAnimation:[self makescrollanimation] forKey:@"scrollit"];

для добавления второго ... второе игнорируется.

Я знаю, что вторая анимация работает, потому что если я начну со второй, то первая будет проигнорирована.

Спасибо, Matt

Ответы [ 3 ]

5 голосов
/ 17 февраля 2009

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

CABasicAnimation *bounceAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
bounceAnimation.duration = 1;
bounceAnimation.fromValue = [NSNumber numberWithInt:100];
bounceAnimation.toValue = [NSNumber numberWithInt:300];
bounceAnimation.repeatCount = 10;
bounceAnimation.autoreverses = YES;
bounceAnimation.fillMode = kCAFillModeForwards;
bounceAnimation.removedOnCompletion = NO;
bounceAnimation.additive = YES;
[view.layer addAnimation:bounceAnimation forKey:@"bounceAnimation"];

CABasicAnimation *scrollAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
scrollAnimation.duration = 10;
scrollAnimation.fromValue = [NSNumber numberWithInt:0];
scrollAnimation.toValue = [NSNumber numberWithInt:100];
scrollAnimation.fillMode = kCAFillModeForwards;
scrollAnimation.removedOnCompletion = NO;
scrollAnimation.additive = YES;
[view.layer addAnimation:scrollAnimation forKey:@"scrollAnimation"];

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

1 голос
/ 14 мая 2011

Я написал краткое резюме о том, как использовать аддитивную анимацию

Короче говоря, в транзакции задайте новое значение модели, затем вы анимируете из старого значения модели минус новое значение модели, а местом назначения является NSZeroPoint, NSZeroRect или преобразование идентичности. При смене анимации в полете вы получаете красивые кривые, а не толчок.

0 голосов
/ 17 февраля 2009

Вы можете использовать CAAnimationGroup, если вы хотите связать несколько анимаций по разным свойствам, но я не уверен, что это возможно при использовании двух CABasicAnimations. Одновременно к представлению можно применять только одну анимацию свойства к свойству.

Один из способов, которым я мог бы подумать о достижении этой цели, - это вложить ваш вид в другой UIView и выполнить анимацию «scrollit» на включающем представлении, продолжая при этом отражать вложенное представление.

Люблю знать лучший ответ!

...