Как подробно описано в предыдущем сообщении (здесь), я создаю анимацию, которая начинается под начальным углом и движется к конечному углу. Я решил использовать CADisplayLink
для этой анимации, потому что анимация должна работать как можно быстрее во время пользовательского ввода, поэтому CALayer
с CAKeyframeAnimation
казалось бы слишком медленным для достижения этого.
После реализации CADisplayLink
, который вызывает setNeedsDisplay
, анимация работает, но выглядит очень плохо, потому что разбивает разницу между endAngle и initialAngle на хорошо видимые блоки углов вместо того, чтобы создавать непрерывный поток от одного угла к другому. Вот текущий код, который у меня есть:
CGFloat newAngleToAnimate = animationProgress + ((endAngle-initialAngle)/kDrawDuration)*elapsedTime;
// Use newAngleToAnimate to draw in drawInContext
animationProgress = newAngleToAnimate; // Update the progress for the next frame.
Кроме того, kDrawDuration
определяется как 3.0f
, поэтому я хочу, чтобы анимация от initialAngle
до endAngle
занимала 3,0 секунды. Я разбиваю полный круг (2*M_PI
радиан) на равные сегменты, вычисляя 2*M_PI / kNumAnglesInAnimation
, и предпочтительно я хочу анимировать один из этих углов в каждом кадре, но каким-то образом мне все еще приходится учитывать kDrawDuration
и elapsedTime
, чего я просто не вижу как добиться.
Спасибо за любую помощь в исправлении этого!