В настоящее время я создаю игру с чистым UIKit.Это игра, где какой-то персонаж ловит падающие предметы.Все объекты движутся по траектории трех точек: каждый объект появляется в точке A, затем перемещается в точку B, а затем падает в точку C. Для меня важен только один момент - пункт в точке B. Мне нужно проверить,действительно ли персонаж ловит предмет в пункте B. В настоящее время у меня есть таймер в главном игровом контроллере, который постоянно публикует уведомления.Игровые предметы являются наблюдателями, они слушают это уведомление и перемещают себя (они двигаются сами).Теперь, с этим таймером, каждый предмет перемещается маленькими шагами из точки А в точку Б. Когда он находится в точке В, метод предмета проверяет, поймал ли его персонаж.Если нет, то я выполняю анимацию UIView с продолжительностью от точки B до точки C.
Я думаю, что все движение может быть анимировано, возможно, с помощью класса Core Animation CAKeyframeAnimation или чего-то другого.Единственная проблема в том, что я не уверен, как запустить обратный вызов для проверки улова в середине анимации - в точке B. Некоторые говорят, что это невозможно здесь , и если у меня есть целоеанимации и мне нужно получить текущую позицию элемента, тогда мне нужен таймер, который регулярно вытягивает / читает данные модели из presentationLayer.Но я не уверен в этом подходе, потому что теперь я не храню указатель на элементы экрана из моего основного игрового контроллера - игровой контроллер только создает элемент, а игровой таймер отправляет уведомления этим объектам.Но мне нужно было бы иметь такое для реализации предложенного решения.Кроме того, я должен прочитать презентационный слой из целого ряда элементов экрана.
Другой альтернативой может быть разделение одной анимации на две анимации: сначала анимация от А до В, а затем запуск обратного вызова завершения для проверки улова.Затем выполните другую анимацию от B до C.
Ребята, что вы думаете по этому поводу, может быть, у вас есть другие предложения?