下面来具体实现一个转场动画效果吧
由于实现动画的核心代码在第四步,这里也就只看animateTransition:这一个方法啦!
从上往下的Modal效果
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
if (self.isPresnted == YES) {
//1.取出view
UIView *presentedView = [transitionContext viewForKey:UITransitionContextToViewKey];
//2.放入containerView
[[transitionContext containerView]addSubview:presentedView];
//3.设置基本属性
presentedView.frame = CGRectMake(0, -667, 375, 667);
//4.动画
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
presentedView.frame = CGRectMake(0, 0, 375, 667);
}completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
} else {
//1.取出view
UIView *dismissedView = [transitionContext viewForKey:UITransitionContextFromViewKey];
//2.放入containerView
[[transitionContext containerView]addSubview:dismissedView];
//3.动画
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
dismissedView.frame =CGRectMake(0, -667, 375, 667);
}completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
}

模仿系统淡入淡出效果
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
if (self.isPresnted == YES) {
//1.取出view
UIView *presentedView = [transitionContext viewForKey:UITransitionContextToViewKey];
//2.放入containerView
[[transitionContext containerView]addSubview:presentedView];
//3.设置基本属性
presentedView.alpha = 0;
//4.动画
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
presentedView.alpha = 1.0;
}completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
} else {
//1.取出view
UIView *dismissedView = [transitionContext viewForKey:UITransitionContextFromViewKey];
//2.放入containerView
[[transitionContext containerView]addSubview:dismissedView];
//3.设置基本属性
dismissedView.alpha = 1;
//4.动画
[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
dismissedView.alpha = 0;
}completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
}

动画的时间可以从ransitionDuration:方法获取
通过UITransitionContextToViewKey和UITransitionContextFromViewKey










