На самом деле есть 2 основных метода.
Один из них - использовать Core Animation, если он содержит желаемый путь и анимацию.
Другой способ - использовать анимационный игровой цикл, в котором приложение периодически вызывает подпрограмму для перерисовки вида каждый кадр. NSTimer или CADisplayLink могут периодически (скажем, с частотой 24, 30 или 60 Гц) вызывать подпрограмму, выполняющую setNeedsDisplay, которая затем вызывает вызов drawRect представления и т. Д. Некоторый другой периодический код может изменять некоторое состояние (перемещая некоторые позиции кнопок XY). и т. д.) во время или между каждым кадром, чтобы обеспечить появление движения или другого анимационного эффекта, когда представление перерисовывается. Или OpenGL может быть использован для перерисовки анимированного трехмерного мира по мере движения. Вы даже можете изменить каждый кадр в ответ на ввод пользователя. Это наиболее гибкий способ анимации, позволяющий настраивать анимацию способами, которые невозможны для Core Animation, но он потребляет больше энергии и может быть настолько ресурсоемким, что будет намного медленнее, чем Core Animation.