2014-10-01 2 views
9

Пользовательские переходы для меня довольно новы. Мне пришлось включить их в последний проект, над которым я работал, и в итоге использовал протокол UIViewControllerAnimatedTransitioning и пользовательские настройки.UIViewControllerAnimatedTransitioning vs custom UIStoryboardSegue

Custom segues кажутся немного чище/дружелюбными, поскольку вы можете выбрать их в раскадровке и сделать с ними. Однако, похоже, не так-то и есть удобный способ настроить back/pop segue. Я читал о разворачивании segues, но я не могу найти ничего, связав одну кнопку с обратной связью навигационного контроллера.

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

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

Я пропустил что-то, потому что кажется UIViewControllerAnimatedTransitioning - лучший подход для анимации между контроллерами представлений. Почему я хотел бы получить подкласс UIStoryboardSegue?

ответ

4

Я согласен с тем, что существует нехватка документации для размотки segues по сравнению с другими типами segues, но после того, как вы их повесили, они довольно просты. Мое понимание заключается в том, что segues (включая разматывание) - это способ, которым Apple намеревается переходить между контроллерами представлений. Даже когда вы создаете пользовательские сегменты, регулярные разматывания должны все еще работать.

В моей собственной работе я подклассифицировал UIStoryboardSegue для выполнения пользовательской анимации при переходе между segues. Используя широко известное приложение в качестве примера, когда вы нажимаете кнопку меню в приложении Uber, контроллер отображения карты перемещается вниз, и появляется контроллер табличного представления. И когда вы нажимаете строку в таблице, новый контроллер представления перемещается справа, но контроллер отображения карты все еще отображается на экране. И когда вы нажимаете контроллер отображения карты, он возвращается в исходное положение. По какой-то причине я считаю, что Uber на самом деле не реализовал segues вообще, а просто поставил контроллеры представлений на вершине контроллеров представлений, но я реализовал что-то подобное в своем собственном приложении с пользовательскими segues. Эти segues трудно воспроизвести с помощью стандартных посылок Apple, поэтому я использовал пользовательские.

Если вы связываете кнопку размотки на кнопку «Назад», вам необходимо переопределить нормальное раскручивание, которое появляется вместе с кнопкой возврата по умолчанию в uinavigationcontroller. Мне было очень сложно настроить этот сеанс. Я бы рекомендовал скрывать кнопку возврата по умолчанию, которая поставляется с uinavigationcontroller, добавив вашу собственную кнопку бара и привязывая эту новую кнопку к размотке. Я знаю, что это раздражает, учитывая, что кнопка возврата по умолчанию имеет некоторые дополнительные функции, такие как использование заголовка из предыдущего контроллера представления в качестве его текста, когда заголовок достаточно короткий. К сожалению, хотя, я думаю, Apple действительно хочет отговорить вас от настройки кнопки по умолчанию и затрудняет ее изменение. Я забыл, как заменить кнопку возврата по умолчанию на обычную, поэтому дайте мне знать, если у вас есть проблемы.

Во всяком случае, для создания разматывания SEGUE, вы должны сначала создать метод в классе (или родительский класс) из uiviewcontroller вы размотки к (не из).

- (IBAction) methodName:(UIStoryboardSegue *)segueName 

Вы можете изменить methodName и segueName к тому, что вам нравится.Теперь перейдите на свою раскадровку и зайдите на сцену, содержащую uiviewcontroller, которую вы разматываете от. Если теперь ctrl перетащите из этого uiviewcontroller (желтую кнопку слева от панели в верхней части контроллера) к кнопке выхода (оранжевая кнопка на правой стороне того же бара), вы увидите меню, которое появляется который содержит methodName выше. Нажмите этот метод, и теперь будет создан ваш режим размотки.

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

Теперь дело с привязав его к задней кнопке ...

Опять же, просмотре uiviewcontroller вы размотка от, если вы контролируете сопротивление от обычая задней кнопки (не кнопка по умолчанию обратно) в раскадровку к классу этого uiviewcontroller, IBAction будет создан для вас, привязанного к кнопке. В этом методе, добавьте в:

[self performSegueWithIdentifier: segueIdentifier sender:nil]; 

где segueIdentifer это идентификатор, который дал разматывания SEGUE выше. Теперь, когда вы нажимаете кнопку «Назад», выполняется размотка segue. Вы также можете сделать некоторые анимации или что не до того, как выполняется размотка segue.

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

+1

спасибо за подробный ответ. Может быть, вы могли бы добавить информацию о UIViewControllerAnimatedTransitioning и когда и для того, что подходит для использования? Благодарю. –

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