3

我有一个NSTextField作为标签,显示一个字符串。如果它的内容太大而无法一次显示,我想从右到左为这个标签设置动画。

到目前为止,我已经做到了这一点NSTimer,它可以工作,但这不是一个很好的解决方案。标签显示在NSTextFieldCell表格视图中的 , 中。它们经常不同步,我想这只是消耗了大量的 CPU/GPU 资源。

还有其他方法Core Animation可以做到这一点吗?

我已经尝试过使用图层,您可以在这里看到: CALayer 和 drawRect

但我也没有让它工作。

我将衷心感谢您的帮助。

4

2 回答 2

8

您可以简单地使用动画师为 NSTextField 的位置设置动画,例如

[[textField animator] setFrameOrigin:NSMakePoint(x,y)];

你也可以像这样将它嵌入到“CATrancation”代码中:

[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
[[textField animator] setFrameOrigin:NSMakePoint(x,y)];
[CATransaction commit];

如果你需要动画委托,你可以使用 CABasicAnimation

CABasicAnimation* animation = [CABasicAnimation animation];
animation.delegate = self;
NSDictionary *animations = [NSDictionary dictionaryWithObjectsAndKeys:animation,@"frameOrigin",nil]; 
[textField setAnimations:animations];
[[textField animator] setFrameOrigin:NSMakePoint(x,y)];

委托方法是

- (void)animationDidStart:(CAAnimation *)theAnimation;
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag;

如果您需要屏蔽您的文本字段,只需将其嵌入到其他 NSView 中。

于 2012-11-29T22:43:59.397 回答
1

首先,使用其他答案中提供的功能之一为标签设置动画。然后,如果您想在侧面显示另一个视图而不重叠,您可以:

  • 在具有您希望的限制的子视图中插入标签
  • 使用 bringSubviewtoFront: 或 sendSubviewToBack: 确保您的标签留在后面
于 2012-12-06T07:51:14.287 回答