2013-03-24 99 views
3

我有一個視圖控制器(從UIViewController繼承),具有用於呈現數據的自定義邏輯。它可以初始化一個新的視圖控制器(相同類型)並使用 [self.navigationController pushViewController:next animated:NO] (其中下一個是新實例化的控制器)來顯示它,創建「視圖堆棧」的體驗,使用導航控制器的默認後退按鈕進行導航堆疊。iOS:自定義後退按鈕轉換動畫

現在,在致電pushViewController:animated:之前,我可以通過調用[self.navigationController.view.layer addAnimation:animation forKey:nil]來自定義過渡動畫。這非常適合「沿着堆棧」的觀點。

但是,由於向上導航堆棧的默認方式是使用默認後退按鈕,所以使用的過渡是默認的從左到右的動畫,它與我的自定義動畫不匹配。

如何自定義此過渡動畫?

編輯:

我把這裏給出的意見,並與上前:

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文件有關。 – 2013-03-24 13:57:33

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在交換視圖時(在這種情況下刪除彈出的視圖控制器視圖)嚮導航控制器層添加淡入淡出轉換。

並請一併參考這個How to change the Push and Pop animations in a navigation based app

0

如果您只是想讓後退按鈕返回到前一個視圖控制器。無需代碼就可以輕鬆完成此操作。而是隻需將控件從後退按鈕拖到前一個視圖控制器。 (我更喜歡模態動作賽格)。這使得它更簡單,因爲它不涉及代碼

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"]; 

}

而且效果很好!