如何更改iOS SDK中的默认导航速度



我正在从一个视图控制器导航到另一个。为从一个类导航到另一个类指定了默认时间。我们能用程序改变它吗?也就是说,我们能提高或降低航行速度吗。

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层中。以便根据您的配置为其设置动画。

CALayer类的参考

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

    }

最新更新