CALayer 和 drawRect
Posted
技术标签:
【中文标题】CALayer 和 drawRect【英文标题】:CALayer and drawRect 【发布时间】:2012-08-20 10:26:16 【问题描述】:我对 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: 方法来绘制整个属性字符串。但是,如果我这样做,则根本不会绘制任何内容... 谁能指出我正确的方向?
谢谢!
【问题讨论】:
【参考方案1】:一般来说,您希望尽可能避免覆盖 drawRect,特别是对于您正在制作动画的 CALayer 对象。这往往会导致非常糟糕的表现。
“drawRect: 方法只绘制屏幕上的内容”是什么意思?
它只绘制当前可见的字符串部分?
【讨论】:
是的,这就是我的意思。它是用dirtyRect绘制的,就是可见的rect 我刚刚用 CATextLayer 试了一下。相同的行为,仅绘制屏幕上可见的内容。【参考方案2】:我最终使用了 NSTimer。不是最漂亮的解决方案,但至少它有效。
【讨论】:
以上是关于CALayer 和 drawRect的主要内容,如果未能解决你的问题,请参考以下文章