CALayer和drawRect

时间:2012-08-20 10:26:16

标签: core-animation calayer nsview drawrect nstextfield

我是Core Animation,CALayer以及所有这些东西的新手,所以请耐心等待。 我有一个自定义NSTextField用作标签。我希望内容为其位置设置动画,因此如果标签宽度太长,则整个字符串都可见。 现在,动画本身工作正常。我用CABasicAnimation实现了这个:

- (void)awakeFromNib {    
    CALayer *newLayer = [CALayer layer];

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
    [animation setFromValue:[NSValue valueWithPoint:NSMakePoint(0, 0)]];
    [animation setToValue:[NSValue valueWithPoint:NSMakePoint(-self.attributedStringValue.size.width, 0)]];
    [animation setDuration:5.0];
    [animation setRepeatCount:HUGE_VAL];

    [newLayer addAnimation:animation forKey:@"position"];

    [self setLayer:newLayer];
    [self setWantsLayer:YES];

}

唯一的问题是,drawRect:方法只绘制屏幕上的内容。 所以我想我会覆盖drawRect:方法来绘制整个属性字符串。但是,如果我这样做,根本没有任何东西被绘制出来...... 有人能指出我正确的方向吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

通常,您希望尽可能避免覆盖drawRect,尤其是对于您正在设置动画的CALayer对象。这往往会导致非常可怕的表现。

你是什么意思“drawRect:方法只绘制屏幕上的内容?”

它只绘制当前可见的字符串部分?

答案 1 :(得分:0)

我最终使用的是NSTimer。不是最美丽的解决方案,但至少它是有效的。