动画NSStatusItemView

时间:2013-03-04 05:31:33

标签: cocoa core-animation

挣扎着这个。我有一个自定义NSStatusItemView,我正在尝试动画。我已将以下代码添加到状态项视图中以启动动画:

- (void)setAnimated
{
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    anim.duration = 1.0;
    anim.repeatCount = HUGE_VALF;
    anim.autoreverses = YES;
    anim.fromValue=[NSNumber numberWithFloat:1.0];
    anim.toValue=[NSNumber numberWithFloat:0.0];
    [self.layer addAnimation: anim forKey: @"animateOpacity"];
    [self setWantsLayer:YES];  
    [self setNeedsDisplay:YES];
}

当我称这种方法时,没有任何反应。但是,如果我将此代码移动到我的drawRect方法,则视图会在启动时正确显示动画。不完全确定我需要做什么才能告诉它在事后开始动画,但上面的方法没有这样做,我不明白为什么!有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的回答我自己,所以谷歌有答案的记录!

问题是,有点缺乏对drawRect的理解。当我的setAnimated方法调用setNeedsDisplay时,它再次调用drawRect,有效地撤消setAnimated方法中的操作。

我做了两件事来正确解决这个问题。首先,我修改了setAnimated方法以接受BOOL参数,并在视图上将isAnimated属性设置为该值。然后,在drawRect中,检查此BOOL值并在设置为YES时执行动画。

其次,看起来,你需要在第一次绘制视图时调用[self setWantsLayer:YES]。所以我在第一次运行时在drawRect中调用它,以便以后的动画可以工作。