CAAnimationGroup возвращается к исходной позиции по завершении - PullRequest
3 голосов
/ 14 сентября 2011

В iOS я пытаюсь создать эффект уменьшения размера значка, пролетающего по экрану по дуге, затемняя и затем исчезая.Я достиг этих 3 эффектов с CAAnimationGroup, и он делает то, что я хочу.Проблема в том, что когда анимация заканчивается, вид снова возвращается в исходное положение, в полный размер и полную непрозрачность.Кто-нибудь может увидеть, что я делаю неправильно в коде ниже?Анимация не должна возвращаться в исходное положение, а просто исчезать в конце.

UIBezierPath *movePath = [UIBezierPath bezierPath];
CGPoint libraryIconCenter = CGPointMake(610, 40);

CGPoint ctlPoint = CGPointMake(self.imgViewCropped.center.x, 22.0);
movePath moveToPoint:self.imgViewCropped.center];
[movePath addQuadCurveToPoint:libraryIconCenter
              controlPoint:ctlPoint];

 CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
 moveAnim.path = movePath.CGPath;
 moveAnim.removedOnCompletion = NO;

 CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
 scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
 scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)];
 scaleAnim.removedOnCompletion = NO;

 CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"];
 opacityAnim.fromValue = [NSNumber numberWithFloat:1.0];
 opacityAnim.toValue = [NSNumber numberWithFloat:0.0];
 opacityAnim.removedOnCompletion = NO;

 CAAnimationGroup *animGroup = [CAAnimationGroup animation];
 animGroup.animations = [NSArray arrayWithObjects:moveAnim,scaleAnim,opacityAnim, nil];
 animGroup.duration = 0.6;
 animGroup.delegate = self;
 animGroup.removedOnCompletion = NO;
 [self.imgViewCropped.layer addAnimation:animGroup forKey:nil];

1 Ответ

7 голосов
/ 14 сентября 2011

Полагаю, вам нужно установить свойство fillMode вашей анимации на kCAFillModeForwards. Это должно заморозить анимации в их конце. Еще одно предложение (и, честно говоря, это то, что я обычно делаю), это просто установить свойства самого слоя в их конечное положение после настройки анимации. Таким образом, когда анимация будет удалена, слой будет по-прежнему иметь окончательные свойства как часть своей модели.

Кроме того, флаг removedOnCompletion анимаций, содержащихся в CAAnimationGroup, игнорируется. Возможно, вам следует просто удалить эти назначения, поскольку они вводят в заблуждение. Замените их присвоениями fillMode, как указано выше.

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