Создание пользовательских переходов

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

Жизненный цикл перехода

Чтобы понять, как пользовательские переходы работают, необходимо понять жизненный цикл объекта перехода. Объекты перехода являются экземплярами UIStoryboardSegue или один из его подклассов. Ваше приложение никогда не создает объекты перехода непосредственно; когда переход инициирован, они всегда создаются от Вашего имени iOS. Вот то, что происходит:

  1. Контроллер назначения создается и инициализируется.

  2. Объект перехода создается и initWithIdentifier:source:destination: метод вызывают. Идентификатор является уникальной строкой, Вы предусмотрели переход в Интерфейсном Разработчике, и два других параметра представляют два объекта контроллера в переходе.

  3. Исходный контроллер представления prepareForSegue:sender: метод вызывают. Посмотрите Конфигурирование Контроллера назначения, Когда будет Инициирован Переход.

  4. Объект перехода perform метод вызывают. Этот метод выполняет переход для обеспечения целевого контроллера представления на экране.

  5. Ссылка на объект перехода выпущена, заставив его быть освобожденной.

Реализация пользовательского перехода

Для реализации пользовательского перехода Вы разделяете на подклассы UIStoryboardSegue и реализуйте эти два метода, описал ранее:

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

Перечисление 13-1  пользовательский переход

- (void)perform
{
// Add your own animation code here.
 
    [[self sourceViewController] presentModalViewController:[self destinationViewController] animated:NO];
}