Я интересуюсь использованием Базовой Анимации для управления пользовательскими анимациями в моей сцене OpenGL на iPhone. Я надеялся найти механизм, который позволил Вам в общем анимировать keypath NSObject или метода делегата для каждой галочки анимации. То, что я придумал, должно анимировать произвольное свойство CALayer и опросить их от OpenGL для определения прогрессии анимации. Однако я убежден, что существует лучший способ сделать это. Каков самый чистый, самый безопасный способ насладиться этим большим механизмом анимации?
Если вы хотите анимировать сам вид, попробуйте прочитать iPhone UIView Animation Best Practice. Для анимации внутри OpenGL представления лучше использовать анимированные модели или пользовательский код, но не Core Animation.
Это возможно, использовать Core Animation для управления чем угодно. Я уверен, что его тоже можно использовать для звука! (Учитывая небольшой подкласс CALayer). UIKit и Core Animation можно смешивать довольно свободно, с небольшой осторожностью, поскольку есть CAEAGLLayer, с которым мы можем поиграть.
Ключевыми здесь являются - (id) presentationLayer и - (id) modelLayer для использования чистого / только OpenGL; конечно, даже иерархия может быть использована для вашей сцены OpenGL. Но использование CALayer для рендеринга также дает еще больше «бесплатно», если это возможно в ваших обстоятельствах (но также см. CATransformLayer), если это то, что вы ищете! =)
Я подозреваю, что на самом деле вам нужны только функции смягчения, используемые в основной анимации. Их достаточно легко найти, немного погуглив. Вот один из примеров:
GLfloat bounceEaseOut(GLfloat ratio) {
if (ratio < 1.0f/2.75f) {
return 7.5625f*ratio*ratio;
} else if (ratio < 2.0f/2.75f) {
return 7.5625f*(ratio-=1.5f/2.75f)*ratio+0.75f;
} else if (ratio < 2.5f/2.75f) {
return 7.5625f*(ratio-=2.25f/2.75f)*ratio+0.9375f;
} else {
return 7.5625f*(ratio-=2.625f/2.75f)*ratio+0.984375f;
}
}
Вы вводите, как далеко вы находитесь в твине (elapsedTime/tweenDuration), и он говорит вам, какой процент пути по "временной шкале" твина вы должны пройти.