您的位置:首页 > 产品设计 > UI/UE

UiviewController 自定义present 动画 UIViewControllerAnimatedTransitioning

2014-11-24 17:21 344 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: