AlvinfromDiaspar
AlvinfromDiaspar

Reputation: 6824

CALayer explicit animations not behaving properly

Implicitly things behave fine. But when i try to use explicit animations to do multiple animations on a single layer (e.g. opacity and translation) I get odd results.

First of all, i tried using CATransaction. Then i switched to CAAnimationGroup. Both doesnt seem to get what i want.

What do I want? All i want is for a layer to move from one point to another with an initial opacity and a target opacity. thats it!

What am i seeing? Here is one example...

When performing a transaction begin/commit, the translation appears to be correct, but the opacity is not. My start opacity is 0, and the target opacity is 0.5. However when i run the animations, it blends to 0.5, but then "snaps" to 1.0 (fully opaque).

I tried setting the removedOnCompletion to NO. but that didnt help either. I think the bottom line is that i need to know the difference between an AnimationGroup and a Transaction.

Can anybody explain this, and possibly what im seeing regarding the oddness of my animations?

Thanks!

Upvotes: 3

Views: 1660

Answers (2)

Pascalius
Pascalius

Reputation: 14659

You have to set the layers opacity to the value after the animation in explicit animations.

layer.opacity=0.0f;

Upvotes: 0

AlvinfromDiaspar
AlvinfromDiaspar

Reputation: 6824

Ok, explicit animations arent working for me. I tried creating a basic animation for opacity (of a layer). I placed this inside an animation group. When i execute, nothing happens. For simplicity i took out translation animations. This is only trying to do opacity animation.

CAAnimationGroup *group = [CAAnimationGroup animation];

CABasicAnimation *opacityAnimation;     
opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];  
opacityAnimation.fromValue = [NSNumber numberWithDouble:fromalpha];     
opacityAnimation.toValue = [NSNumber numberWithDouble:toalpha];     
opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
opacityAnimation.delegate = self;
opacityAnimation.duration = 2.7;        

opacityAnimation.removedOnCompletion = NO;

group.animations = [NSArray arrayWithObjects: opacityAnimation, nil];
[baseLayer addAnimation:group forKey:@"groupAnim"];

Upvotes: 1

Related Questions