我有NSTextField
作为标签,显示一个字符串。
如果标签的内容太大而无法一次显示,我想从右到左为该标签设置动画。
到目前为止,我用NSTimer
完成了这项工作,但它确实有效,但这不是一个很好的解决方案。
标签显示在表视图中的NSTextFieldCell
中。
它们经常不同步,我猜它只占用了大量的CPU / GPU资源。
Core Animation
还有另一种方法吗?
我已尝试使用图层,您可以在此处看到: CALayer and drawRect
但我也没有让它发挥作用。
我真的很感谢你的帮助。
答案 0 :(得分:7)
您可以使用像
这样的动画师简单地为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。
答案 1 :(得分:1)
首先,使用其他答案中提供的功能之一为该标签设置动画。 然后,如果要在侧面显示另一个视图而不重叠,您可以: