iPhone Flip Transition - Могу ли я получать уведомления на полпути

StackOverflow https://stackoverflow.com/questions/2000684

Вопрос

У меня есть единый UIView для рисования любого из набора элементов.То есть моему единственному подклассу UIView можно указать, например, нарисовать квадрат, круг или треугольник.

Я хотел бы иметь переход, чтобы перевернуть этот вид, чтобы UIView рисовал другую фигуру в точке на полпути, поэтому кажется, что я перехожу к другому виду, но на самом деле я просто перерисовываю единый вид в точке на полпути перехода.

Есть ли способ сделать это, не прибегая к использованию двух разных UIViews и замене их местами в блоке анимации?Для меня было бы немного неуклюже перенастраивать то, что я должен использовать механизм подкачки.

В идеале все, что мне нужно, - это какой-нибудь обратный вызов или уведомление о том, что анимация находится на полпути, и тогда я смогу перерисовать вид с новой формой.

Спасибо за любую помощь!

Это было полезно?

Решение

Даже если бы вы знали среднюю точку вашей анимации переворота, я не верю, что перерисовка содержимого анимации просмотра в середине что-нибудь даст.Я думаю, что содержимое слоя представления кэшируется в начале анимации и не изменяется по мере продолжения анимации.Кроме того, ваш вид в конечном итоге был бы перевернут слева направо в конце анимации, если бы за ним не было другого вида.

Если вы хотите сделать это как пользовательскую анимацию, вы могли бы разбить ее на две половины, используя что-то вроде Mike Lee's Реализация переворота Лемура это я описываю в этот ответ.После первой половины анимации вы могли бы перерисовать содержимое представления и завершить анимацию, вернувшись к тому, с чего начали.

Однако мне кажется более неуклюжим не переключать представления в ответ на переход.Конечно, для этого потребуется гораздо больше кода.

Другие советы

вы можете попробовать сделать что-то подобное этому.Например, вашему свойству animationDuration присвоено значение 2.0f.итак, половина пути занимает 1 секунду, так что вы можете использовать

[self performSelector:@selector (yourCallbackMethod) С объектом:ноль после задержки:1.0f];

Единственный известный мне способ, которым вы могли бы это сделать, - это воссоздать анимацию с помощью Core Animation, а затем отслеживать анимацию в presentationLayer с помощью таймера.В основных слоях анимации нет KVO, поэтому вы должны отслеживать его явно.

Другими словами, это, вероятно, того не стоит.Я предлагаю вам подумать о другом способе решения вашей проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top