UIviewController 自定义present 动画
//
// PresentAndDismissAnimationController.h
// TestTranstation
//
// Created by lance on 14/11/24.
// Copyright (c) 2014年 Lance. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface PresentAndDismissAnimationController : NSObject <UIViewControllerAnimatedTransitioning>
@property (nonatomic, assign) BOOL isPresenting;
@end
//
// PresentAndDismissAnimationController.m
// TestTranstation
//
// Created by lance on 14/11/24.
// Copyright (c) 2014年 Lance. All rights reserved.
//
#import "PresentAndDismissAnimationController.h"
@implementation PresentAndDismissAnimationController
- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
return 0.5;
}
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
/**
* dismissing
*/
if (self.isPresenting) {
[self executeDismissAnimation:transitionContext];
} else {
[self executePresentationAnimation:transitionContext];
}
}
/**
* present 动画
*
* @param transitionContext
*/
- (void)executePresentationAnimation:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *containerView = [[UIApplication sharedApplication] keyWindow];
CGRect frame = containerView.bounds;
frame.origin.y = -CGRectGetHeight(frame);
toViewController.view.frame = frame;
[containerView addSubview:toViewController.view];
NSTimeInterval duration = [self transitionDuration:transitionContext];
frame.origin.y = 0;
[UIView animateWithDuration:duration animations:^{
toViewController.view.frame = frame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
/**
* dismiss 动画
*
* @param transitionContext
*/
- (void)executeDismissAnimation:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *containerView = [[UIApplication sharedApplication] keyWindow];
CGRect frame = containerView.bounds;
frame.origin.y = - CGRectGetHeight(frame);
toViewController.view.userInteractionEnabled = YES;
[transitionContext.containerView addSubview:toViewController.view];
[transitionContext.containerView addSubview:fromViewController.view];
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
toViewController.view.tintAdjustmentMode = UIViewTintAdjustmentModeAutomatic;
fromViewController.view.frame = frame;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
@end