Frage

I am navigating from one view controller to another.There is a default time that is specified for navigating from one class to another.Can we change that one programatically i.e. Can we increase or decrease the navigating speed.

FlashScreen *Secreen=[[FlashScreen alloc]initWithNibName:nil bundle:nil];
    [self.navigationController pushViewController:Secreen animated:YES];
War es hilfreich?

Lösung

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

Andere Tipps

You can simply add animation to any type of UIView's layer . So that it will be animated as per your configuration.

Reference of CALayer class

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



    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top