2

有人知道是否有可能以某种方式创建自定义 NSAnimationCurve 以便它可以与 NSViewAnimation 对象一起使用,但与标准线性 EaseIn/Out 不同?

4

1 回答 1

2

实际上已经找到了我的问题的答案。我为我的动画 NSViewAnimation 对象创建了一个委托,并使用以下方法设置它:

[animationObject setDelegate: delegateObject]; 

然后在我的 delagateObject 的头文件中,我将其设置为使用“NSAnimationDelegate”协议,键入以下字符串:

@interface delegateObject : NSObject <NSAnimationDelegate> { 

之后我创建了一个方法

-(float)animation:(NSAnimation *)animation valueForProgress:(NSAnimationProgress)progress; 

这应该是一个描述您的自定义动画曲线的函数。因此它将动画的进度作为从 0.0 到 1.0 的值,并根据您使用的函数将其转换为从 0.0 到 1.0 的新值。

我在我的代码中使用了以下函数:

-(float)animation:(NSAnimation *)animation valueForProgress:(NSAnimationProgress)progress {
float value = -1/(20*(progress+0.047)) +1.045;
return value;

}

它类似于 EaseOut,但无需更改开始和结束关键帧即可正常工作,并且动画开始和结束时的速度差异更大。

于 2011-03-31T06:44:19.387 回答