Skip to content

快速实现控制器的转场和View的快速popover显示,并支持自定义动画、手势退场

License

Notifications You must be signed in to change notification settings

ThisFriend/TLTransitions

 
 

Repository files navigation

TLTransitions

pod支持

pod 'TLTransitions', '~> 1.4.1'

1. 目的

让繁琐的个性化控制器的转场(present/pop)和视图弹窗实现,变的简单快速(一句代码或几行即可搞定),并支持动画的自定义,支持通过手势转场(dismiss/pop)

2. 实现基础

  • 控制器的转场基于协议UIViewControllerTransitioningDelegate,UINavigationControllerDelegateUIViewControllerAnimatedTransitioning
  • View弹窗则是通过控制器的转场包装而来,同时还基于UIPresentationController

使用与说明

1. View弹窗:

  • 使用:对应TLTransition类的API,只要一行代码即可将一个已有的View进行显示,使用如下(更多用法见demo
// popView是一个用户自定义的视图,并且已经设置好布局
[TLTransition showView:popView popType:TLPopTypeAlert];
  • 可实现如下效果:

    1. 系统Alert样式的中间弹窗,并支持键简单的盘高度自适应(可关闭)

    alert.gif

    1. 系统Action Sheet样式的底部弹窗

    actionSheet.gif

    1. 将一个view显示到指定的位置

    point.gif

    1. 将一个view从frame1动画到frame2

    frame.gif

    1. 动画自定义,提供block将自定义动画传入即可

    customforview.gif

  • 其他API

  1. 动态更新size(效果如上面ActionSheet样式所示,仅限size,不能改变位置)
// 实时更新view的size ,显示后也可以更新
- (void)updateContentSize;

// 使用
CGRect rect = _bView.bounds;
rect.size.height += 1;
_bView.bounds = rect;
[_transition updateContentSize];
  1. 手动dismiss(正常情况通过点击灰色区域进行dismiss,无需手动调用API)
/**
 * 隐藏popView
 * 如果TLTransition没有被引用,则在隐藏后会自动释放
 * 如果popView没有被引用,在隐藏后也会自动释放
 */
- (void)dismiss;

// 使用
[_transition dismiss];

2. UIViewController转场:

  • 控制器转场思维结构图 思维结构图
  • API:
  1. 所在类:分类UIViewController+Transitioning和遵守TLTLAnimatorProtocol协议的Animator
  2. 支持多种模式的动画(具体API见上述类头文件):
  • present:系统原生转场动画(非自定义转场)、Swipe系列CATransition系列动画Cunstom Block模式案例锦集
  • push:Swipe系列CATransition系列Cunstom模式案例锦集
  1. 支持自定义动画[Animator](非Cunstom模式) 只要基于TLTLAnimatorProtocol协议即可,具体实现可参考模版TLAnimatorTemplate里面有一些思路与注意事项
  2. 所以类型API都默认支持侧滑手势dismiss/pop,可以关闭(如果要手动dismiss/pop,只需调用原生API即可)
  3. 部分转场效果图
  • 原生present

system.gif

  • Swipe

swipe.gif

  • CATransition

CATransition.gif

  • Cunstom

custom.gif

  • 锦集

锦集.gif

  1. 使用步骤与举例 可以一步实现,也可以分步实现 a. 一步实现:
更多API的使用见demo

TLSecondViewController *vc = [[TLSecondViewController alloc] init];
 //  vc.disableInteractivePopGestureRecognizer = YES; // 关闭侧滑pop手势

// push (直接使用self发起API调用)
[self pushViewController: vc
               swipeType: TLSwipeTypeInAndOut
           pushDirection: TLDirectionToRight
            popDirection: TLDirectionToRight];

/** present
[self presentViewController:vc
                  swipeType: TLSwipeTypeInAndOut
           presentDirection:TLDirectionToRight
           dismissDirection:TLDirectionToRight
                 completion:^ {
                     // 完成回调
}];
*/

b.分步实现(建议使用,更灵活、多样化、统一化): 1. 创建动画管理者 2. 设置动画时间 3. 设置手势使能

更多API的使用见demo

// 1.创建动画管理者
TLCATransitonAnimator *animator;
animator = [TLCATransitonAnimator animatorWithTransitionType:transitionType
                                                   direction:direction
                                     transitionTypeOfDismiss:transitionTypeOfDismiss
                                          directionOfDismiss:dismissDirection];
 // 2.动画时间
animator.transitionDuration = 3.0;

TLSecondViewController *vc = [[TLSecondViewController alloc] init];
// 3.关闭手势
vc.disableInteractivePopGestureRecognizer = YES; 

// 调用API转场
// push(直接使用self发起API调用)
[self pushViewController:vc animator:animator]; 

/** present
[self presentViewController:vc animator:animator completion:^{
        // 完成回调
  }];
*/

About

快速实现控制器的转场和View的快速popover显示,并支持自定义动画、手势退场

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Objective-C 99.3%
  • Ruby 0.7%