猿问

这些切换都要放在NavigationController里做管理,怎么实现,求个思路

默认的UINavigationController push和pop的默认动画都是左右滑动推出,我的应用要求这种界面切换的动画效果复杂一点,大概有这么几个:

  • 更快的左右推出,默认是0.3秒,我需要快一倍

  • 带抖动的左右推出

  • 水平翻转

  • 纸张翻页效果


拉丁的传说
浏览 149回答 3
3回答

慕哥6287543

1. 如果楼主想要使用UINavigationController中的view controller stack,并且还想要同时自定义push、pop的动画效果,基本上是不可能的。原因在于想要使用view controller stack,就无法躲开pushViewController:animated:这个方法,而一旦使用pushViewController:animated:,UINavigationController就会强制将要推入的viewController的frame设为当前可视区域的frame,从而断绝一切想要自定义动画的后路,例如如下代码,是不会产生任何效果的:UINavigationController+CustomAnimation.h@interface UINavigationController (CustomAnimation)- (void)customPushViewController:(UIViewController *)viewController;@endUINavigationController+CustomAnimation.m#import "UINavigationController+CustomAnimation.h"- (void)customPushViewController:(UIViewController *)viewController {     viewController.view.frame = (CGRect){0, -viewController.view.frame.size.height, viewController.view.frame.size};     [self pushViewController:viewController animated:NO];     [UIView animateWithDuration:.15f                      animations:^{                          viewController.view.frame = (CGRect){0, 0, self.view.bounds.size};                      }]; }2. 如果仅仅是想添加自定义的push、pop动画,而不使用view controller stack,那么,如下代码就可以实现一个从上到下的push效果:UINavigationController+CustomAnimation.h文件同上。UINavigationController+CustomAnimation.m#import "UINavigationController+CustomAnimation.h"- (void)customPushViewController:(UIViewController *)viewController {     viewController.view.frame = (CGRect){0, -viewController.view.frame.size.height, viewController.view.frame.size};     [self.topViewController.view addSubview:viewController.view];     [UIView animateWithDuration:.15f                      animations:^{                          viewController.view.frame = (CGRect){0, 0, self.view.bounds.size};                      }]; }

湖上湖

虽然基于navctrl,但是你可以不用navctrl push的方法,可以用viewctrl的presentModalViewController。至于速度的话,这些系统的默认都是0.3s,动画方式也就是系统默认的几个。

月关宝盒

CATransition* transition = [CATransition animation];transition.type = kCATransitionPush;//可更改为其他方式transition.subtype = kCATransitionFromLeft;//可更改为其他方式transition.duration=0.15;[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];[self.navigationController pushViewController:viewController animated:YES];
随时随地看视频慕课网APP

相关分类

iOS
我要回答