Extensible & easy to use modal transitioning using UIViewControllerAnimatedTransitioning API
##Installation
There are two ways to use the library in your project:
-
Manually add the library files to your project
-
Using CocoaPods (this is not yet possible but will be)
pod 'CCModalTransition'
Import UIViewController+ModalTransition.h
file in your project, .pch file is a good place if you want it to be available in all your projects.
##Usage
In the initializer of the view controller to be displayed modally, configure the modal transition style using a registered ModalTransitionType.
#pragma mark - Constructor
- (id)init
{
if (self = [super initWithNibName:@"PopupViewController" bundle:nil])
{
/**
* Here, you just need to use a CCModalTransition type
* to be used when the view controller is displayed
* modally
*/
self.modalTransitionStyle = ModalTransitionTypePopup;
}
return self;
}
Built-in types are :
- ModalTransitionTypePopup
- ModalTransitionTypeTopSliding
You can extend this list by registering new transition types (see "Register your own transition types" section)
##Register your own transition types
You can easily create custom transition types to extends this component capabilities in your project. To do that, you will need to create a new class extending CCModalTransition
and implement the following methods :
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext;
- (void)presentViewControllerWithContext:(id <UIViewControllerContextTransitioning>)transitionContext animated:(BOOL)animated;
- (void)dismissViewControllerWithContext:(id <UIViewControllerContextTransitioning>)transitionContext animated:(BOOL)animated;
Do not forget to declare an unique, integer typed, identifier, for instance using a macro:
#define MyCustomModalTransitionIdentifier 54321
You can then register the transition by using UIViewController+ModalTransition
methods :
- (void)registerClass:(Class)transitionClass forTransitionType:(NSInteger)transitionType;
- (void)unregisterClassForTransitionType:(NSInteger)transitionType;
For example, in your presenting view controller (not presented!):
// Register transition
[self registerClass:[MyCustomModalTransition class] forType:MyCustomModalTransitionIdentifier];
The declared transitionType
should be used when declaring modal transition style of your presented view controller:
self.modalTransitionStyle = MyCustomModalTransitionIdentifier;
##Note about landscape transitions
As part of iOS7, interface transitions in landscape orientation are not properly working. Workarounds exist (read this article for more details: http://www.brightec.co.uk/blog/ios-7-custom-view-controller-transitions-and-rotation-making-it-all-work) and should be handled directly by CCModalTransition subclasses.