程序啟動后從a ->b ->c
在c頁面要求點擊某按鈕直接跳到a
使用方法:
[self.navigationController popToViewController [self.navigationController.viewControllers objectAtIndex:n] animated:NO];
n為頁面的push順序
跳轉失敗
提示:Unbalanced calls to begin/end appearance transitions for xxViewController
原因:同一時間進行多次跳轉
比如,掃碼場景,在a頁面點擊按鈕進行掃碼,通常掃碼完成后要返回a頁面,掃碼后通常會調用某代理方法來返回掃碼結果,在獲取掃碼結果后跳轉到b頁面。
那么這行起來時,如果你想在獲取結果后立刻跳轉到b頁面你會發現出現跳轉失敗。
解決方法
已掃碼場景的例子來說,我們默認的跳轉順序是先返回到a再跳轉到b,所以在返回到a頁面的語句作修改。
[self.navigationController popToRootViewControllerAnimated:NO];
參考:參考1
頁面跳轉方向
//設置動畫,使跳轉方向為從左側進來
//CATransition 對象創建
CATransition *transition = [CATransition animation];
///時間間隔 1.0f最慢 0.1f最快
transition.duration = 0.5f;
///動畫的開始與結束的快慢
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//上一行也可以寫為 transition.timingFunction = UIViewAnimationCureEasyInOut;
///設置動畫效果
transition.type = kCATransitionReveal ;
/* type的其他類型:
kCATransitionFade 交叉淡化過渡
kCATransitionMoveIn 新視圖移到舊視圖上面
kCATransitionPush 新視圖把舊視圖推出去
kCATransitionReveal 將舊視圖移開,顯示下面的新視圖
*/
///設置動畫方向
transition.subtype = kCATransitionFromLeft;
/* subtype的其他類型
kCATransitionFromRight; 從右面進來
kCATransitionFromLeft; 從左面進來
kCATransitionFromTop; 從上面進來
kCATransitionFromBottom; 從下面進來
*/
///在想添加CA動畫的VIEW的層上添加此代碼 addAnimation: forKey:
[self.navigationController.view.layer addAnimation:transition forKey:@"transition"];
//注意:將這些代碼加在 navigationController 的 pushViewController:animated: 方法之前,并且加入該代碼后要將pushViewController:animated:方法的animated 參數傳NO
PSCourierInfoViewController *vc = [[PSCourierInfoViewController alloc] init];
[self.navigationController pushViewController:vc animated:NO];
親測可用。。。。。
如有問題可留言交流!