ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 2

Изменение анимации перехода у NavigationController

В предыдущем примере мы рассматривали работу контроллера навигации. И я обещал рассказать об изменении типа анимации перехода. Как раз этим я сейчас и займусь. Чтобы не создавать новый проект я предлагаю использовать код предыдущего урока.
Первое, что нам следует сделать — это добавить к проекту библиотеку QuartzCoreЗдесь я уже описывал как это делается. Затем импортируем эту библиотеку в интерфейсе класса RootViewController. И сбда же добавим метод, который будет изменять анимацию. Я назвал этот метод performTransition. Теперь интерфейс класса выглядит так:

<code data-result="[object Object]">#import &lt;QuartzCore/QuartzCore.h&gt;

@interface RootViewController : UITableViewController {
    NSArray *students;
}

@property (nonatomic, retain) NSArray *students;

-(void)performTransition;

@end</code>

 

Реализация этого метода выглядит так:

<code data-result="[object Object]">-(void)performTransition  {
    CATransition *transition = [CATransition animation];
    transition.duration = 0.75f;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromTop;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
}</code>

 

Для изменения продолжительно анимации следует использовать свойство duration. А сам тип анимации устанавливается с помощью двух свойств type и subtype. Вызывать этот метод следует перед переходом контроллера навигации, как показано в примере ниже.

<code data-result="[object Object]">- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyClassViewController *detailViewController = [[MyClassViewController alloc] 
                                                   initWithNibName:@"MyClassViewController" bundle:nil];
    detailViewController.selectedStudent = [students objectAtIndex:indexPath.row];
    [self performTransition];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
}</code>

 

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