Я в своем уме пытаюсь придумать схему проектирования для этой парадигмы. Мне не очень повезло на этом сайте, но на этом этапе я попробую что-нибудь.
Я пытаюсь реализовать анимацию типа радара, и поэтому я поворачиваю вид на 360 градусов, чтобы представить радиус, вращающийся вокруг круга. Я поместил точки вокруг этого круга и могу рассчитать угол от центра круга, используя стандартную триггеру.
Когда радиус распространяется по окружности, если он пересекается с точкой (например, угол точки равен углу радиуса развертки + допуск), точка мигает.
Теперь я подошел к этой парадигме несколькими способами, но не нашел идеального решения. Вот что я попробовал.
ПЕРВЫЙ: блоки анимации iOS4. Я бы повернул радиус на 10 градусов за раз с продолжительностью .1 сек. И в методе завершения проверил пересечения с точками. Проблема здесь в том, что если вы установите опцию повтора, то метод завершения не вызывается. Единственный раз, когда вызывается метод завершения, это когда вся анимация завершается, а не после каждого цикла повторения, поэтому это решение не работает.
ВТОРОЕ: пробная явная анимация с использованием CABasicAnimation. Тот же подход, что и выше, с поворотом на 10 градусов каждые 0,1 секунды и установкой делегата на себя и реализацией метода animationDidFinish. В методе animationDidFinish я проверил пересечения с точкой. Я установил анимацию кумулятивным, а repeatCound - Huge Value. Рэдис вращается, но снова, animationDidFinish не вызывается, пока я не установлю для repeatCount небольшое значение, а затем он вызывается только в конце repeatCount, а не после каждого цикла повторения.
ТРЕТЬЕ: Использование NSTimer и этот подход действительно работает, но анимация может быть прерывистой в зависимости от того, что происходит вокруг экрана. Я использую отметку таймера 0,1 секунды и запускаю одиночную анимацию в 10 градусов, а также проверку пересечения на каждом отметке. Проблема этого подхода заключается в том, что он может зависнуть при запуске каждой анимации из-за того, что процессор выполняет другие анимации в фоновом режиме. Обратите внимание, что у меня не было этой проблемы с двумя другими подходами!
ЧЕТВЕРТЫЙ: Я пытался использовать комбинацию двух. CABasic Анимация по радиусу и NSTimer по точкам. Эта проблема заключается в том, что они могут выйти из синхронизации и довольно легко происходит, если iDevice переходит в режим сна, а затем возобновляет работу.
ПЯТЫЙ: использование анимационного блока в стиле iOS3.0 и поворот на 10 градусов с продолжительностью 0,1 сек. Установка делегата и animationDidStopSelector с помощью метода animationDidStop, вызывающего метод анимации снова, а также проверку пересечения с точками. Это тоже работает, но очень похоже на третье решение, оно дергается при прокрутке и других анимациях. Скорее всего, это вызвано природой анимации при останове.
В принципе, есть ли способ анимации представления бесконечно, но заставить его вызывать метод после каждого цикла повторения? Или есть способ заставить третье решение работать более плавно?
ПОЖАЛУЙСТА, ПОМОГИТЕ, Я ВЫПОЛНЯЮСЬ ИЗ КОНСТРУКЦИИ ДИЗАЙНА.