我正在从一个视图控制器导航到另一个视图控制器。为从一个类导航到另一个类指定了一个默认时间。我们能否以编程方式更改该时间,即我们能否提高或降低导航速度。
FlashScreen *Secreen=[[FlashScreen alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:Secreen animated:YES];
You need to use a custom animation like seague Animation class file where you can give the Transition duration for moving from one view controller to another view controller
-(void)perform{
UIViewController *sourceViewController = (UIViewController *) [self sourceViewController];
UIViewController *destinationViewController = (UIViewController *) [self destinationViewController];
CATransition* transition = [CATransition animation];
if ([self.identifier isEqualToString:@"b"]){
transition.duration = .25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
}else{
transition.duration = .25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromRight;
}
[sourceViewController.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationViewController animated:NO];
}
您可以简单地将动画添加到任何类型的 UIView 的 layer 。这样它将根据您的配置进行动画处理。
//Don't forgot to import QuartzCore framework in your project
#import <QuartzCore/QuartzCore.h>
#define ANIMATION_DURATION 6
/* Called when the animation begins its active duration. */
- (void)animationDidStart:(CAAnimation *)anim{
NSLog(@"animation start");
}
/* Called when the animation either completes its active duration or
* is removed from the object it is attached to (i.e. the layer). 'flag'
* is true if the animation reached the end of its active duration
* without being removed. */
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
NSLog(@"animation stop");
}
-(void)PerformPushOnNavigationController{
//Your view controller
UIViewController *yourViewController = [[UIViewController alloc] init];
//Create a CATransition to add it in view layer
CATransition* TransitionFromRight = [CATransition animation];
//Duration to animate
TransitionFromRight.duration = ANIMATION_DURATION;
//animation strategy to animate
TransitionFromRight.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
//we are going to simulate the push action of navigation controller, so here i am specifying transition type as push. Depends upon your needs of app behavior you can change it.
TransitionFromRight.type = kCATransitionPush;
/*
//type
NSString * const kCATransitionFade;
NSString * const kCATransitionMoveIn;
NSString * const kCATransitionPush;
NSString * const kCATransitionReveal;
*/
//Here we have subtype as kCATransitionFromRight which will do animate from right. For an example i would specify kCATransitionFromBottom to push view controller to navigation controller as modal controller.
TransitionFromRight.subtype = kCATransitionFromRight;
/*
//subtype
NSString * const kCATransitionFromRight;
NSString * const kCATransitionFromLeft;
NSString * const kCATransitionFromTop;
NSString * const kCATransitionFromBottom;
*/
//set the CAAnimation delegate to self, so that it will notify you when start and stop the animation
//Optional, If you want to do something before/after animation, use the delegate.
//Note that CAAnimation delegate will be retained.
//So be carefull when you use this on POP simulation.In ARC No issues. Non ARC should take care of it.
TransitionFromRight.delegate = self;
//Add animation to the navigation controller's view's layer
[self.navigationController.view.layer addAnimation:TransitionFromRight forKey:nil];
//Finally you push viewcontroller to your navigation controller.
[self.navigationController pushViewController:yourViewController animated:NO];
}