1

我对 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: 方法来绘制整个属性字符串。但是,如果我这样做,则根本不会画出任何东西……谁能指出我正确的方向?

谢谢!

4

2 回答 2

0

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

于 2012-10-21T13:12:53.733 回答
0

通常,您希望尽可能避免覆盖 drawRect,特别是对于您正在制作动画的 CALayer 对象。这往往会导致非常糟糕的表现。

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

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

于 2012-08-20T19:18:07.037 回答