2014-01-23 9 views
2

Теперь, да, есть сотни вопросов (и ответов) о том, как выполнять пользовательские segues. Однако, и я не преувеличиваю, ВСЕ эти ответы ошибочны (все 50+ я видел)! Извините, это может показаться суровым, но правда в том, что NONE из предложенных ответов дает тот же (правильный) результат, что и яблоки, построенные в переходах (вертикальная обложка и т. Д.).PROPER путь создания пользовательского Segue

Чтобы быть более точным, это результат, который ожидается (подтверждено бревнами): начинается

  1. Segue (добавляет вид иерархии, вызывает viewWillAppear на destinationVC и viewWillDisappear на sourceVC и начинается анимация).
  2. анимация выполняется в течение всего периода
  3. Segue концы (анимация закончена, устанавливает destinationVC как текущий VC, либо на стеке или модально представлены. Запускает viewDidAppear на destinationVC и viewDidDisappear на sourceVC).

Короче: вызвать viewWillAppear/Disappear-> одушевленные переход -> вызвать viewDidAppear/Disappear

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

[srcVC presentModalViewController:destVC animated:NO];

или

[srcVC.navigationController pushViewController:destVC animated:NO];

вызывая показы событие для отправки во всех видах случайного порядка (такая же проблема с CoreAnimations).

В моем случае все, что я действительно хочу, - это «Вертикальная обложка» - переход назад (сверху вниз), со всеми другими событиями, отправленными ТОЧНО, как ожидалось (показано выше).

Итак, я просто должен жить со всеми видами уродливых обходными (делать свою «задачу» в жестко закодированных методах, вызываемых всякий раз, когда мне нужна их и т.д.), или есть какой-то скрытый собственно пути делать это в многоразовой манере?

Смешная вещь: даже яблоко suggest that you do it the "wrong" way, что делает его похожим на правильный путь, но с непоследовательным результатом по сравнению с их собственными способами ... Поэтому я полагаю, что яблоко делает это под капотом и забывает предоставить достаточную гибкость для клиентов выполняйте те же операции (большой недостаток - другими словами), или что я просто нахожусь в какой-то плохой поездке и вижу какую-то проблему, которая не существует ...

+0

Надеюсь, у кого-то есть лучший ответ на ваш вопрос, но когда вы упоминаете тот факт, что Apple, похоже, предлагает вам сделать это «неправильным» способом, это напоминает мне, что Apple не будет в первый раз предоставлять разработчикам способность напрямую имитировать поведение сторонних разработчиков. Ситуация, которая приходит на ум, - это когда некоторые из анимаций перехода были использованы в различных приложениях Apple за несколько лет до того, как они разрешили сторонним разработчикам использовать их. – aTotalStranger

ответ

2

Хорошо, это может быть не правильный ответ о том, как ее решить для пользовательских segues (подклассификация UIStoryboardSegue), но она решает общую проблему!

После некоторого случайного ознакомления с новыми функциями я наткнулся на новый способ выполнения пользовательских переходов между ViewControllers, представленными в iOS7, которые называются не более, чем «Пользовательские переходы», я думаю! Читайте об этом here и here, или видео с WWDC here.

Я только что окунул пальцы ног, но в основном это новый, ближе к системному способу выполнения переходов и позволяет лучше контролировать = лучше выглядящие переходы. Посмотрев на пример, представленный the blog I referenced (git found here) Я могу подтвердить, что НАКОНЕЦ мы можем делать переходы, которые ведут себя как ONE EXPECTS THEM TO с событиями, запущенными в ожидаемых случаях!

Поскольку я просто читал об этом, я не могу дать полное объяснение еще, но проверить ссылки :)

Примечание: Это, возможно, не должен полностью заменить пользовательские перетекает, но может быть использован аналогичным образом (проверьте примеры), поэтому, если вам понадобится этот небольшой причудливый переход, это, безусловно, способ взглянуть на него! В основном вы настраиваете segues в раскадровке и подключаете правильных делегатов перехода в prepareForSegue: -метод.

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