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