iOSios专题iOS开发

UIViewController转场动画基础用法-Custom篇

2016-10-10  本文已影响194人  囧书

参考文章《iOS自定义转场动画实战讲解》传送门
好吧,转场动画的水有点深,想达到灵活自如运用的境界还是要花上一些时间的,本文不作深入探究。

Custom动画

Custom模式可以改变presentedViewController的基视图大小,只支持iOS8以上。
依据苹果官方的转场动画Demo,大概讲讲思路。

首先是指定转场动画为Custom:

presentedViewController.modalPresentationStyle = UIModalPresentationCustom;

苹果提供了一个类UIPresentationController,它定义了转场动画的生命周期方法,我们创建它的子类MyPresentationController以重写这些方法。
同时这个子类也可以承担动画代理的作用,即实现<UIViewControllerTransitioningDelegate>协议:

@interface MyPresentationController : UIPresentationController <UIViewControllerTransitioningDelegate>

重写四个重要的生命周期方法,分别是present开始、完成,dismiss开始、完成:

- (void)presentationTransitionWillBegin;
- (void)presentationTransitionDidEnd:(BOOL)completed;
- (void)dismissalTransitionWillBegin;
- (void)dismissalTransitionDidEnd:(BOOL)completed;

还有一个很重要的功能,计算并返回视图大小,重写以下方法:

- (CGRect)frameOfPresentedViewInContainerView;
- (void)preferredContentSizeDidChangeForChildContentContainer:(id <UIContentContainer>)container NS_AVAILABLE_IOS(8_0);
- (CGSize)sizeForChildContentContainer:(id <UIContentContainer>)container withParentContainerSize:(CGSize)parentSize NS_AVAILABLE_IOS(8_0);

然后就是与其它一般转场动画那样,实现协议方法:

- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext;
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
TransitioningAnimationDemo3TransitioningAnimationDemo3
源码:https://github.com/JiongXing/TransitioningAnimationDemo3
上一篇下一篇

猜你喜欢

热点阅读