iPhone Flip Transition - Могу ли я получать уведомления на полпути
-
18-09-2019 - |
Вопрос
У меня есть единый UIView для рисования любого из набора элементов.То есть моему единственному подклассу UIView можно указать, например, нарисовать квадрат, круг или треугольник.
Я хотел бы иметь переход, чтобы перевернуть этот вид, чтобы UIView рисовал другую фигуру в точке на полпути, поэтому кажется, что я перехожу к другому виду, но на самом деле я просто перерисовываю единый вид в точке на полпути перехода.
Есть ли способ сделать это, не прибегая к использованию двух разных UIViews и замене их местами в блоке анимации?Для меня было бы немного неуклюже перенастраивать то, что я должен использовать механизм подкачки.
В идеале все, что мне нужно, - это какой-нибудь обратный вызов или уведомление о том, что анимация находится на полпути, и тогда я смогу перерисовать вид с новой формой.
Спасибо за любую помощь!
Решение
Даже если бы вы знали среднюю точку вашей анимации переворота, я не верю, что перерисовка содержимого анимации просмотра в середине что-нибудь даст.Я думаю, что содержимое слоя представления кэшируется в начале анимации и не изменяется по мере продолжения анимации.Кроме того, ваш вид в конечном итоге был бы перевернут слева направо в конце анимации, если бы за ним не было другого вида.
Если вы хотите сделать это как пользовательскую анимацию, вы могли бы разбить ее на две половины, используя что-то вроде Mike Lee's Реализация переворота Лемура это я описываю в этот ответ.После первой половины анимации вы могли бы перерисовать содержимое представления и завершить анимацию, вернувшись к тому, с чего начали.
Однако мне кажется более неуклюжим не переключать представления в ответ на переход.Конечно, для этого потребуется гораздо больше кода.
Другие советы
вы можете попробовать сделать что-то подобное этому.Например, вашему свойству animationDuration присвоено значение 2.0f.итак, половина пути занимает 1 секунду, так что вы можете использовать
[self performSelector:@selector (yourCallbackMethod) С объектом:ноль после задержки:1.0f];
Единственный известный мне способ, которым вы могли бы это сделать, - это воссоздать анимацию с помощью Core Animation, а затем отслеживать анимацию в presentationLayer с помощью таймера.В основных слоях анимации нет KVO, поэтому вы должны отслеживать его явно.
Другими словами, это, вероятно, того не стоит.Я предлагаю вам подумать о другом способе решения вашей проблемы.