2013-08-06 57 views
2

我正在從一個視圖控制器導航到另一個視圖控制器。爲從一個類導航到另一個類有一個默認時間。我們可以通過編程方式更改該時間,即我們是否可以增加或減少導航速度。如何更改iOS SDK中的默認導航速度?

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

你可以用動畫來定製你的速度 –

+0

看到http://stackoverflow.com/questions/1406037/custom-animation-for-pushing-a-uiviewcontroller – Architect

+0

@Architect ...你給我的鏈接是使用「setAnimationTransition」。但我想要默認的動畫,但速度不同。我試圖使用setAnimationTransitionNone,然後直接進入下一個視圖控制器沒有任何動畫,因爲在推動我們設置動畫「NO」.Any線索。 – Imran

回答

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

這就像一個魅力 – Ruban

+0

工作很好。感謝您的迴應。 – Imran

1

你可以簡單動畫添加到任何類型的UIView的層。所以它會按照您的配置進行動畫。

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



    }