我正在從一個視圖控制器導航到另一個視圖控制器。爲從一個類導航到另一個類有一個默認時間。我們可以通過編程方式更改該時間,即我們是否可以增加或減少導航速度。如何更改iOS SDK中的默認導航速度?
FlashScreen *Secreen=[[FlashScreen alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:Secreen animated:YES];
我正在從一個視圖控制器導航到另一個視圖控制器。爲從一個類導航到另一個類有一個默認時間。我們可以通過編程方式更改該時間,即我們是否可以增加或減少導航速度。如何更改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的層。所以它會按照您的配置進行動畫。
//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];
}
你可以用動畫來定製你的速度 –
看到http://stackoverflow.com/questions/1406037/custom-animation-for-pushing-a-uiviewcontroller – Architect
@Architect ...你給我的鏈接是使用「setAnimationTransition」。但我想要默認的動畫,但速度不同。我試圖使用setAnimationTransitionNone,然後直接進入下一個視圖控制器沒有任何動畫,因爲在推動我們設置動畫「NO」.Any線索。 – Imran