水平制作动画标签(NSTextField)

NSA*_*ict 3 macos xcode cocoa objective-c nstextfield

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

NSTimer到目前为止,我已经完成了这项工作,它确实有效,但这不是一个非常好的解决方案.标签显示在NSTextFieldCell表视图中.它们经常不同步,我猜它只占用了大量的CPU/GPU资源.

有另一种方法Core Animation可以做到这一点吗?

我已经尝试了图层,你可以在这里看到: CALayer和drawRect

但我也没办法.

我将衷心感谢您的帮助.

Rem*_*rrr 7

您可以使用animator简单地为NSTextField的位置设置动画

[[textField animator] setFrameOrigin:NSMakePoint(x,y)];
Run Code Online (Sandbox Code Playgroud)

你也可以将它嵌入"CATrancation"代码中,如下所示:

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

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

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

委托方法是

- (void)animationDidStart:(CAAnimation *)theAnimation;
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag;
Run Code Online (Sandbox Code Playgroud)

如果需要屏蔽文本字段,只需将其嵌入其他NSView即可.

  • 这不是我真正想要的.这套是整个标签的位置.我想在它旁边显示一个图像,它们会重叠. (2认同)