Ich versuche, eine Sequenz von Animationen zu machen, ich habe in CAAnimationGroup
die richtige Klasse gefunden, um dieses Objekt zu erreichen. In der Praxis füge ich verschiedene Subviews hinzu und möchte ihren Eintrag mit einem Bounce-Effekt animieren. Tatsache ist, dass ich sehen möchte, dass ihre Animationen direkt nach dem letzten geschehen. Ich weiß, dass ich den Delegierten einstellen kann, aber ich dachte, dass die CAAnimationGroup
die richtige Wahl war.
Später entdeckte ich, dass die Gruppenanimation nur zu einer Ebene gehören kann, aber ich brauche es auf verschiedenen Ebenen auf dem Bildschirm. Natürlich auf der Hosting-Ebene funktioniert nicht. Einige Vorschläge?Sequenzanimation mit CAAnimationGroup
- (void) didMoveToSuperview {
[super didMoveToSuperview];
float startTime = 0;
NSMutableArray * animArray = @[].mutableCopy;
for (int i = 1; i<=_score; i++) {
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: self.greenLeaf];
UIImageView * greenLeafImageView = [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
greenLeafImageView.image = [UIImage imageNamed:@"greenLeaf"];
CGPoint leafCenter = calculatePointCoordinateWithRadiusAndRotation(63, -(M_PI/11 * i) - M_PI_2);
greenLeafImageView.center = CGPointApplyAffineTransform(leafCenter, CGAffineTransformMakeTranslation(self.bounds.size.width/2, self.bounds.size.height));
[self addSubview:greenLeafImageView];
//Animation creation
CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
greenLeafImageView.layer.transform = CATransform3DIdentity;
bounceAnimation.values = @[
[NSNumber numberWithFloat:0.5],
[NSNumber numberWithFloat:1.1],
[NSNumber numberWithFloat:0.8],
[NSNumber numberWithFloat:1.0]
];
bounceAnimation.duration = 2;
bounceAnimation.beginTime = startTime;
startTime += bounceAnimation.duration;
[animArray addObject:bounceAnimation];
//[greenLeafImageView.layer addAnimation:bounceAnimation forKey:nil];
}
// Rotation animation
[UIView animateWithDuration:1 animations:^{
self.arrow.transform = CGAffineTransformMakeRotation(M_PI/11 * _score);
}];
CAAnimationGroup * group = [CAAnimationGroup animation];
group.animations = animArray;
group.duration = [[ animArray valueForKeyPath:@"@sum.duration"] floatValue];
[self.layer addAnimation:group forKey:nil];
}
Großartig, Danke! – Andrea