Анимация кнопки Назад в навигационном контроллере - PullRequest
4 голосов
/ 30 июня 2010

CATransitions можно использовать для анимации переходов в навигационных контроллерах при детализации. Однако при использовании кнопки «Назад» или «Навигационный контроллер» анимация по-прежнему выдвигается. Кто-нибудь знает, как прикрепить CATransition к кнопке Back контроллера Navigation? спасибо.

Код, используемый для анимации при "сверлении":

CATransition *transition = [CATransition animation];
transition.duration = 1;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromTop;
transition.delegate = self;
[self.navigationController.view.layer addAnimation:transition forKey:nil];

Ответы [ 5 ]

7 голосов
/ 18 января 2012

Нет необходимости создавать пользовательскую кнопку ... Вы можете просто сделать что-то вроде этого:

- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
        // back button was pressed.  We know this is true because self is no longer
        // in the navigation stack.  
        CATransition *transition = [CATransition animation];
        [transition setDuration:0.75];
        [transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        [transition setType:@"oglFlip"];
        [transition setSubtype:kCATransitionFromLeft];
        [transition setDelegate:self];
        [self.navigationController.view.layer addAnimation:transition forKey:nil];
    }

    [super viewWillDisappear:animated];
}

Редактировать: сначала необходимо добавить кварцевый каркас, чтобы использовать CATransition

6 голосов
/ 15 декабря 2010

Для добавления анимации к кнопке «Назад» необходимо создать собственную кнопку «Назад», а в действии кнопки «Назад» указать нужную анимацию.

  1. Добавление кнопки возврата на панель навигации: добавьте эту строку в метод viewDidLoad:

    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(back)];
    
  2. В методе back добавьте этот код:

    CATransition *transition = [CATransition animation];
    transition.duration = 1;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromBottom;
    transition.delegate = self;
    [self.navigationController.view.layer addAnimation:transition forKey:nil];
    [self.navigationController popViewControllerAnimated:YES];
    
0 голосов
/ 20 марта 2017

Swift 3 версия ответа shadowfax:

    let transition:CATransition = CATransition.init()
    transition.duration = 0.75
    transition.timingFunction = CAMediaTimingFunction.init(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = "oglFlip"
    transition.subtype = kCATransitionFromRight
    //transition.delegate = self // not needed
    self.navigationController?.view.layer.add(transition, forKey:nil)
0 голосов
/ 20 августа 2015

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

[self.navigationController popViewControllerAnimated: YES];

0 голосов
/ 30 июня 2010

Я не уверен, что понимаю вопрос. UINavigationController уже использует слайд-переход при переключении видов. Если вы хотите прикрепить пользовательский переход к кнопке «Назад», вам нужно будет создать собственную кнопку «Назад» и подключить ее к действию, которое запустит ваш код CATransition.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...