Обсуждение

We use cookies. Read the Privacy and Cookie Policy

Обсуждение

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

1. Создайте в Xcode проект, основанный на шаблоне Single View Application (Приложение с единственным видом).

2. В файле раскадровки создайте второй контроллер вида и поместите кнопку в центр первого контроллера вида. Удерживая нажатой клавишу Ctrl, перетащите указатель с экранной кнопки на второй контроллер вида. На этом этапе на экране откроется диалоговое окно, где система запросит информацию о типе перехода, который вы хотите ассоциировать с данным сегвеем. В этом диалоговом окне выберите вариант Custom (Специальный) (рис. 6.14).

Рис. 6.14. Ассоциирование специального сегвея с действием, выполняемым кнопкой

3. Теперь выберите желаемый сегвей и в инспекторе атрибутов (Attribute Inspector) конструктора интерфейсов измените имя класса сегвея на MySegue (рис. 6.15). Этого класса пока не существует, но не волнуйтесь — мы напишем его уже в данном разделе.

Рис. 6.15. Присваивание сегвею нашего собственного имени класса

4. Теперь создайте в Xcode новый класс Objective-C внутри вашего проекта, назовите этот класс MySegue (именно такое имя вы присвоили ему на предыдущем этапе) и убедитесь в том, что этот класс наследует от UIStoryboardSegue. Как только система создаст для вас этот класс, реализуйте его метод perform следующим образом:

#import «MySegue.h»

@implementation MySegue

— (void) perform{

UIViewController *source = self.sourceViewController;

UIViewController *destination = self.destinationViewController;

[UIView transitionFromView: source.view

toView: destination.view

duration:0.50f

options: UIViewAnimationOptionTransitionFlipFromTop

completion: ^(BOOL finished) {

NSLog(@"Transitioning is finished");

}];

}

@end

Вот и все. Теперь можете запустить приложение и убедиться в том, что при нажатии кнопки в первом контроллере вида запустится специальный сегвей, который, в свою очередь, отобразит на экране второй контроллер вида. В этом примере мы используем для реализации перехода метод класса transitionFromView: toView: duration: options: completion:, относящийся к классу UIView. Этот метод принимает довольно много параметров, которые описаны далее:

• transitionFromView — вид, с которого должен начинаться переход. В контексте нашего сегвея это вид с исходным контроллером вида;

• toView — это целевой вид, к которому должен привести переход. В нашем сегвее это вид с целевым контроллером вида;

• duration — длительность анимации в секундах;

• options — тип анимации, которую вы хотите выполнить. Это значение типа UIViewAnimationOptions. Если вы хотите просмотреть все параметры, доступные здесь, нажмите на клавиатуре Command+Shift+O, введите UIViewAnimationOptions, а потом нажмите клавишу Enter;

• completion — блок завершения, вызываемый сразу же по окончании перехода.

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

Данный текст является ознакомительным фрагментом.