2010-06-30 126 views
4

當向下鑽取時,CATransitions可用於在導航控制器中爲轉換創建動畫。但是,當使用後退按鈕或導航控制器(返回時)動畫仍然滑出。有誰知道如何將CATransition附加到導航控制器的後退按鈕?謝謝。導航控制器中的後退按鈕動畫

代碼中使用時「向下鑽取」動畫:

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]; 
+0

您可以參考以下鏈接https://stackoverflow.com/a/45343228/5437576 – 2017-07-27 06:48:44

回答

0

我不知道我理解的問題。 UINavigationController在切換視圖時已經使用幻燈片切換。如果你想附加一個自定義轉換到後退按鈕,你將不得不創建一個自定義後退按鈕,並將其連接到一個動作,該動作將運行你的CATransition代碼。

+0

這就是事情。 UINavigationController使用幻燈片切換,我需要它翻轉。 – vilo 2010-07-07 08:28:06

6

要將動畫添加到後退按鈕,您必須創建自己的後退按鈕,並在後退按鈕動作中指定所需的動畫。

  1. 添加一個返回按鈕,導航欄:這一行添加到您的viewDidLoad方法:

    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(back)]; 
    
  2. 在後面方法添加以下代碼:

    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

shadowfax發佈的答案並未完全刪除呈現視圖控制器完成的幻燈片動畫。使用這個答案(自定義後退按鈕)最適合替換動畫,但我現在必須提供自定義後退按鈕圖像。 – 2014-11-26 19:51:44

7

沒有必要創建一個自定義按鈕...你可以簡單地做這樣的事情:

- (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

+0

我剛剛試過這個,並開箱即用(不錯的動畫和所有:-) 這是否會通過蘋果的審查? 爲什麼這會覆蓋自定義導航的動畫? (我的意思是,我很高興它,但基於代碼不會這麼說) – alasker 2014-09-12 13:41:34

0

[self.navigationController popViewControllerAnimated:YES];

0

斯威夫特3版本脫胎換骨的回答:

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) 
相關問題