NSA*_*ict 3 macos xcode cocoa objective-c nstextfield
我有一个NSTextField标签,显示一个字符串.如果标签的内容太大而无法一次显示,我想从右到左为该标签设置动画.
NSTimer到目前为止,我已经完成了这项工作,它确实有效,但这不是一个非常好的解决方案.标签显示在NSTextFieldCell表视图中.它们经常不同步,我猜它只占用了大量的CPU/GPU资源.
有另一种方法Core Animation可以做到这一点吗?
我已经尝试了图层,你可以在这里看到: CALayer和drawRect
但我也没办法.
我将衷心感谢您的帮助.
您可以使用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即可.
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |