Переход на iPhone - Могу ли я получить уведомление на полпути - PullRequest
2 голосов
/ 04 января 2010

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 04 января 2010

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

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

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

0 голосов
/ 04 января 2010

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

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

0 голосов
/ 04 января 2010

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

[self executeSelector: @selector (yourCallbackMethod) withObject: nil afterDelay: 1.0f];

...