2013-03-24 1 views
3

У меня есть контроллер вида (наследуется от UIViewController), который имеет пользовательскую логику для представления данных. Он может инициализировать новый контроллер вида (одного типа) и отображать его с помощью [self.navigationController pushViewController:next animated:NO] (где следующий - новый экземпляр контроллера), создавая опыт «стека представлений», используя навигационную кнопку по умолчанию для перехода по умолчанию для навигации вверх по стеку.iOS: Настроить анимацию перехода на задний план

Теперь, перед вызовом pushViewController:animated: Я могу настроить анимацию перехода, позвонив по номеру [self.navigationController.view.layer addAnimation:animation forKey:nil]. Это прекрасно работает для «схода стека» взглядов.

Но так как навигация по стеку выполняется по умолчанию с помощью кнопки возврата по умолчанию, используемый переход - это по умолчанию слайд-левая анимация, которая не соответствует моей настроенной анимации.

Как настроить эту переходную анимацию?

EDIT:

Я взял идеи дали здесь и придумал:

UIBarButtonItem *back = [[UIBackButtonItem alloc] initWithTitle:@"\U000025C0\U0000FE0E" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 
[self.navigationItem setLeftBarButtonItem:back] 

И переход:

- (IBAction)back:(id)sender { 
    CATransiotion *animation = [CATransition animation]; 
    animation.duration = 0.3f; 
    amimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 
    animation.type = kCATransitionMoveIn; 
    [self.navigationController.view.layer addAnimation:animation forKey:nil]; 
    [self.navigationController popViewControllerAnimated:NO]; 
} 

Единственным недостатком является появление новой кнопки возврата с которым я готов жить.

Спасибо за ответы :)

ответ

3

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

- (IBAction) back:(id)sender 
{  
    [UIView transitionWithView:self.navigationController.view 
         duration:0.5 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
        animations:^{ [self.navigationController popViewControllerAnimated:NO]; } 
        completion:NULL]; 
} 
+0

Я думаю, что пользовательская кнопка возврата - это путь, но я хочу сделать это в коде. Я новичок в Objective C, но насколько мне известно, это связано с созданием файлов .xib, которые я не использую. –

1

This code got from this Queston.

Для этого типа перехода я бы очень рекомендовал модальный контроллер представления, вот так, как система была разработана.

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

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

CATransition *transition = [CATransition animation]; 
[transition setType:kCATransitionFade]; 
[self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"]; 

[self.navigationController popViewControllerAnimated:YES]; 
[CATransaction commit]; 

CATransaction отключает все стандартные анимации. CATransition добавляет переход на переход к уровню контроллера навигации, когда просматриваются взгляды (в этом случае удаляется отображаемое представление viewcontroller).

А также смотрите этот How to change the Push and Pop animations in a navigation based app

0

Если вы просто хотите, чтобы кнопка «Назад» вернулась к предыдущему контроллеру представления. Это проще сделать без кода. и вместо этого просто перетащите элемент управления с задней кнопки на предыдущий контроллер. (Я предпочитаю модальное действие segue). Это делает его проще, так как она не предполагает никакого кода

1

Я делаю это так:

-(void)viewWillDisappear:(BOOL)animated { 
CATransition *anim = [CATransition animation]; 
anim.duration = 1; 
anim.type = @"cube"; 
anim.subtype = @"fromLeft"; 
[super viewWillDisappear:animated]; 
[self.navigationController.view.layer addAnimation:anim forKey:@"an"]; 

}

И это хорошо работает!

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

  • Нет связанных вопросов^_^