2011-01-14 2 views
1

Мне нужно настроить переход между двумя разными UIViewController и для этого я хотел бы повторно реализовать [UIViewController presentModalViewController ...]. Что внутри этой функции? Как это работает? Что оно делает?Как бы вы реализовали [UIViewController presentModalViewController]?

Спасибо большое, Vance

ответ

-1

Есть множество переходов, доступных. Разве никто из них не отвечает вашим потребностям? Посмотреть это сообщение для more.

+0

Есть только 4 или 5 свободно: ЬурейеЕ перечисление { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, #if __IPHONE_OS_VERSION_MAX_ALLOWED> = __IPHONE_3_2 UIModalTransitionStylePartialCurl, #endif } UIModalTransitionStyle; – vance

1

-[UIViewController presentModalViewController:animated:] Делать магию за кулисами.

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

  1. Создайте новый контроллер представления.
  2. Примените преобразование к управляемому виду контроллера нового вида, чтобы оно начиналось в исходном местоположении.
  3. Начните оживлять представление в нетрансформированное «нормальное» положение.
  4. Ждите окончания анимации и сделайте как единицу измерения:
    • Удалите вид, который вы просто анимировали с экрана.
    • Звонок [self presentModalViewController:vc animated:NO].

Это последний шаг очень важен! После завершения анимации перехода присутствует модальный контроллер представления как обычный, но без анимации, и появится пользователю так же, как если бы вы сделали подходящую анимированную презентацию.

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

+0

Очень круто, но я бы назвал это взломом. Вы должны создать экземпляр своего контроллера просмотра дважды здесь. Если некоторые важные данные изменяются во время анимации, это не будет выглядеть гладко. – Moshe

+0

@Moshe: Это почти так, как работает собственная реализация Apple для 'presentModalViewController: анимированная:'. Вам не нужно создавать экземпляр дважды, вы только дважды добавляете управляемый вид в иерархию представлений окон (но так же UIKit). Вы получите * jump * в макете, если пользовательский интерфейс нового контроллера представления будет значительно изменен в течение переходного периода. Но никакой новой проблемы нет, это одинаково верно для встроенных переходов, которые предоставляет UIKit. – PeyloW

Смежные вопросы