3

我正在从一个视图控制器导航到另一个视图控制器。为从一个类导航到另一个类指定了一个默认时间。我们能否以编程方式更改该时间,即我们能否提高或降低导航速度。

FlashScreen *Secreen=[[FlashScreen alloc]initWithNibName:nil bundle:nil];
    [self.navigationController pushViewController:Secreen animated:YES];
4

2 回答 2

4
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];
}
于 2013-08-06T06:52:04.940 回答
1

您可以简单地将动画添加到任何类型的 UIView 的 layer 。这样它将根据您的配置进行动画处理。

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



    }
于 2013-08-06T07:28:49.500 回答