NSS滑块动画
更改 NSSlider 的浮点值时如何创建 NSSlider 动画。我正在尝试:
[[mySlider animator] setFloatValue:-5];
但这不起作用..只需更改没有动画的值。那么也许有人知道该怎么做?
提前致谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧 - 所以这并不像我希望的那么快和漂亮,但它有效。
您实际上无法在滑块旋钮上使用动画器和核心动画 - 因为核心动画仅适用于图层,并且无法访问滑块图层中的旋钮值。
因此,我们必须求助于手动设置滑块值的动画。
由于我们是在 Mac 上执行此操作 - 您可以使用 NSAnimation(在 iOS 上不可用)。
NSAnimation 的作用很简单 - 它提供了一种计时/插值机制,允许您制作动画(与 Core Animation 不同,Core Animation 也连接到视图并处理对它们的更改)。
要使用 NSAnimation - 最常见的是对其进行子类化并覆盖
setCurrentProgress:
并把你的逻辑放在那里。
以下是我实现此方法的方法 - 我创建了一个名为 NSAnimationForSlider 的新 NSAnimation 子类
NSAnimationForSlider.h :
NSAnimationForSlider.m :
要使用它 - 您只需创建一个新的 NSAnimationForSlider ,将您正在使用的滑块作为delegate 并在每个动画之前设置它的 animateToValue 然后启动动画。
例如:
Ok - so this isn't as quick and pretty as I hoped but it works.
You can't actually use animators and Core Animation on the slider knob - because Core Animation works only on layers and there's no access to the knob values in the slider layer.
So we have to resort instead to manually animating slider value.
Since we're doing this on a Mac - you can use NSAnimation (which isn't available on iOS).
What NSAnimation does is simple - it provide an timing/interpolation mechanism to allow YOU to animate (as opposed to Core Animation which also connects to the views and handles the changes to them).
To use NSAnimation - you most commonly would subclass it and override
setCurrentProgress:
and put your logic in there.
Here's how I implemented this - I created a new NSAnimation subclass called
NSAnimationForSlider
NSAnimationForSlider.h :
NSAnimationForSlider.m :
To use it - you simply create a new NSAnimationForSlider, give it the slider you are working on as a delegate and before each animation you set it's animateToValue and then just start the animation.
For example:
你的方法有效,但还有更简单的方法。
您可以使用动画代理,您只需告诉它如何制作动画即可。
为此,您需要实现
NSAnimatablePropertyContainer
协议中的defaultAnimationForKey:
方法。这是
NSSlider
的一个简单子类,它可以执行此操作:现在您可以简单地使用动画代理:
确保链接
QuartzCore
框架。Your method works, but there's something much simpler.
You can use the animator proxy, you just need to tell it how to animate it.
To do this, you need to implement the
defaultAnimationForKey:
method from theNSAnimatablePropertyContainer
protocol.Here's a simple subclass of
NSSlider
that does this:Now you can simply use the animator proxy:
Make sure to link the
QuartzCore
framework.这是 IluTov 答案 的 Swift 版本,使用一些动画配置设置
floatValue
:Here is a Swift version of IluTov answer, setting a
floatValue
with some animation config: