CALayer不会让图层处于正常状态

时间:2013-02-09 01:08:12

标签: cocoa calayer nsview caanimation

在我的Mac OS X应用程序中,我正在尝试使用此代码使用应用于图层支持的视图图层的CAAnimation为NSView设置动画:

我创建了一个CAAnimation:

myAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
myAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
myAnimation.fromValue = [NSNumber numberWithFloat:1.0];
myAnimation.toValue = [NSNumber numberWithFloat:0.0];
myAnimation.duration = 3;
myAnimation.repeatCount = 1;
myAnimation.autoreverses = NO;

然后我将它添加到我的“myContentView”NSView的图层:

[self.myContentView.layer removeAllAnimations];
[self.myContentView.layer addAnimation:myAnimation forKey:@"opacity"];
self.myContentView.layer.opacity = 0; //Set final value of opacity to this value

这实际上工作正常,除了每次我运行动画(通过鼠标点击触发)时,我首先让NSView的父窗口可见并将它的alphaValue设置为1,myContentView显示为几分之一秒当我调用上面的代码时它显示的最后一个不透明度值,它命中了removeAllAnimations。

就好像presentationLayer停留在缓存中并在动画启动之前重新显示。

如果我让动画完全完成(按住鼠标按钮直到它完全淡出),那么下一次,一切都很好。只有当它被removeAllAnimations中途中断时,它似乎仍然存在。

我尝试在每次调用之前将不透明度设置为0以使窗口可见,但这也失败了。我不知道为什么即使我中断动画,图层也不会设置为0的不透明度。

有什么建议吗?我做得不对劲?

为了清楚起见,我不是自己添加图层,只是将NSView设置为图层支持。

我的CAAnimation从未调用控制器上的任何内容,如果我将其设置为委托......这也很奇怪。我肯定肯定会做错事。

在NSView中绘制的内容是使用bezier形状以编程方式在其drawRect:方法中完成的。

我找到了一个有效的解决方法。如果我在显示所述窗口之前从窗口的contentView中删除我的视图,并在之后添加回来,那么,上一个动画的幽灵“似乎以某种方式刷新并且不会出现。”

0 个答案:

没有答案