Пользовательский NSAnimationCurve - PullRequest
2 голосов
/ 31 марта 2011

Кто-нибудь знает, возможно ли каким-либо образом создать собственный NSAnimationCurve, чтобы он мог использоваться с объектами NSViewAnimation, но отличался от стандартного линейного, EaseIn / Out?

1 Ответ

2 голосов
/ 31 марта 2011

На самом деле уже нашли ответ на мой вопрос. Я создал делегат для моего объекта анимации 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, но оно работает должным образом, без необходимости менять начальный и конечный ключевые кадры и с гораздо более значительным различием скорости в начале и конце анимации.

...