iOS开发 控制器转场UIViewControllerTrans

2018-08-13  本文已影响8人  霸_霸霸

这里不说UITransition Animation, 主要说UIViewControllerTransitioning
UIViewControllerTransitioning.h中有四个对象

1. UIViewControllerContextTransitioning

一组方法的集合, 为控制器之间的转场动画提供上下文信息. 这里只写5个常用的方法

//VC切换所发生的view容器,开发者应该将切出的view移除,将切入的view加入到该view容器中
- (UIView *)containerView;
//提供一个key,返回对应的VC。现在的SDK中key的选择只有UITransitionContextFromViewControllerKey和UITransitionContextToViewControllerKey两种,分别表示将要切出和切入的VC。
- (nullable __kindof UIViewController *)viewControllerForKey:(UITransitionContextViewControllerKey)key;
//某个VC的初始位置,可以用来做动画的计算。
- (CGRect)initialFrameForViewController:(UIViewController *)vc;
//得到切换结束时, 某个VC应在的frame。
- (CGRect)finalFrameForViewController:(UIViewController *)vc;
//向这个context报告切换已经完成。
-(void)completeTransition:(BOOL)didComplete;

2. UIViewControllerAnimatedTransitioning

一组方法, 用来实现自定义的 控制器转场动画, 主要是两个方法transitionDuration:animateTransition:

//动画的周期
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext;
//具体的动画
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

3. UIViewControllerInteractiveTransitioning

//暂时不说

4. UIViewControllerTransitioningDelegate

//present一个控制器时调用
- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source;
//dismiss一个控制器时调用
- (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed;
//利用手势present一个控制器时调用
- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id <UIViewControllerAnimatedTransitioning>)animator;
//利用手势dismiss一个控制器时调用
- (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id <UIViewControllerAnimatedTransitioning>)animator;
//暂时不说
- (nullable UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented presentingViewController:(nullable UIViewController *)presenting sourceViewController:(UIViewController *)source NS_AVAILABLE_IOS(8_0);

5. UIPercentDrivenInteractiveTransition

可结合edgeGesture实现百分比手势

//当手势发生变化(比如拖动panGesture), 可以调用此方法, 来实现转场动画按照手势移动逐渐消失的效果
- (void)updateInteractiveTransition:(CGFloat)percentComplete;
//取消
- (void)cancelInteractiveTransition;
//结束
- (void)finishInteractiveTransition;

2. 步骤

实现一个自定义的转场效果其实很简单, 就拿自定义一个present的转场动画来说

  1. 自定义一个工具类AAA, 继承自NSObject, 遵循UIViewControllerAnimatedTransitioning
  2. 在AAA内根据需要实现transitionDuration:animateTransition:
  3. 在主控制器内, 遵循UIViewControllerTransitioningDelegate
  4. 实现animationControllerForPresentedController: presentingController: sourceController:方法, 并在该方法内返回一个AAA的对象aaa即可.
    https://onevcat.com/2013/10/vc-transition-in-ios7/
上一篇 下一篇

猜你喜欢

热点阅读