2009-08-27 49 views
3

隐含的事情表现良好。但是,当我尝试使用显式动画在单个图层上执行多个动画(例如不透明度和平移)时,我会得到奇怪的结果。CALayer显式动画不能正常工作

首先,我尝试使用CATransaction。然后我切换到CAAnimationGroup。两者似乎都没有得到我想要的。

我想要什么? 我只需要一层图层从一个点移动到另一个图层,并使用初始不透明度和目标不透明度。而已!

我在看什么? 下面是一个例子...

当执行交易开始/提交时,翻译看起来是正确的,但不透明度不是。我的开始不透明度为0,目标不透明度为0.5。 但是当我运行动画时,它会混合到0.5,但随后会“捕捉”到1.0(完全不透明)。

我试着将removedOnCompletion设置为NO。但那也没有帮助。 我认为底线是我需要知道AnimationGroup和Transaction之间的区别。

有人可以解释这一点,可能是什么即时看到我的动画奇怪?

谢谢!

+0

您应该可以通过设置图层的alpha值和位置属性来隐式设置这些属性的动画效果。听起来像你在正确的轨道上。将它们堆叠在一起进行CATransaction begin/commit,它们将以原子方式动画化。如果无法正常工作,请发布您的代码。 – 2009-08-27 10:26:04

+0

隐式动画工作,但id喜欢明确创建它们,当动画完成时我可以处理完成的事件。 – AlvinfromDiaspar 2009-08-28 05:28:25

回答

1

好吧,明确的动画不适合我。 我曾尝试为不透明度(一层)创建基本动画。我把它放在一个动画组里面。当我执行时,没有任何反应。为了简单起见,我拿出了翻译动画。这只是试图做不透明的动画。

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"]; 
+0

尝试添加: opacityAnimation.fillMode = kCAFillModeForwards; 此外,如果您选择您的代码并单击工具栏中的代码小部件,它将格式正确。 – 2009-09-04 23:45:01

0

您必须在显式动画中将图层不透明度设置为动画后的值。

layer.opacity=0.0f;