我是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:方法来绘制整个属性字符串。但是,如果我这样做,根本没有任何东西被绘制出来...... 有人能指出我正确的方向吗?
谢谢!
答案 0 :(得分:0)
通常,您希望尽可能避免覆盖drawRect,尤其是对于您正在设置动画的CALayer对象。这往往会导致非常可怕的表现。
你是什么意思“drawRect:方法只绘制屏幕上的内容?”
它只绘制当前可见的字符串部分?
答案 1 :(得分:0)
我最终使用的是NSTimer。不是最美丽的解决方案,但至少它是有效的。