技术控

    今日:46| 主题:57640
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] 任性切换自定义转场效果的XXTransition

[复制链接]
秀才 投递于 2016-10-17 11:26:17
379 6
先看Demo 效果
   

任性切换自定义转场效果的XXTransition

任性切换自定义转场效果的XXTransition-1-技术控-产品,动画,工程,项目
  
  XXTransition 是什么鬼?
  经历过几个公司,领导换了一波波,产品换了一波波,App的转场动画也是换了一波波,于是各种 AnimatedTransitioning、 InteractiveTransition代码也写了一波波。如果项目中用到多种转场效果,那代码目录可能像这样的。
  

任性切换自定义转场效果的XXTransition

任性切换自定义转场效果的XXTransition-2-技术控-产品,动画,工程,项目

  每个效果都分别有对应的实现了AnimatedTransitioning和InteractiveTransition逻辑的文件。
  能不能简单点?方便的管理项目中用到的转场动画,方便的添加转场效果,同时也能满足各种转场效果的切换,手势交互的切换? Yes,u can ! 这正是XXTransition能帮你做到的,请为它转身。
  XXTransition 为嘛来到这世上?
  
       
  • 1.方便添加自定义转场效果,将重心放在动画效果的实现上
       
  • 2.自由管理项目中多种转场动画,转场手势的切换,(妈妈再也不用担心恶心的需求啦)
       
  • 3.对于原使用系统转场的工程,集成后无需修改任何原代码。
       
  • 4.提供转场动画库。我会不断添加朴实无华和牛哔闪闪的转场动画在代码中,供你直接调用。这些效果,包括我自己亲手和不是亲手写的,如有雷同,别计较啦,都是分享啦,当然如果有大牛小牛给我投稿,我会很开心哒,也会在代码中注释出处哒。
      
  XXTransition 该怎么跑起来?
  
       
  • 安装
      
  将XXTransition目录文件拖到工程即可
  
       
  • 使用
      
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2.    //启动XXTransition自定义转场
  3.   [XXTransition startGoodJob:GoodJobTypeAll transitionDuration:0.3];
  4.   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  5.   [self.window makeKeyAndVisible];
  6.   RootVC *vc = [[RootVC alloc] init];
  7.   self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:vc];
  8.   return YES;
  9. }
复制代码
这样一句话调用就可以开始工作啦!
  Nav转场
  
       
  • 初阶
      
  1. + (void)startGoodJob:(GoodJobType)goodJobType transitionDuration:(NSTimeInterval)duration;
复制代码
该方法的第一个参数是枚举值
  1. typedef NS_OPTIONS(NSUInteger, GoodJobType) {
  2.     GoodJobTypeNavOnly = 1 << 0,
  3.     GoodJobTypeModalOnly = 1 << 1,
  4.     GoodJobTypeAll = GoodJobTypeNavOnly | GoodJobTypeModalOnly
  5.   };
复制代码
  可以设置只使用自定义Nav转场还是Modal转场,或者全部使用。 XXTransition会在提供的转场效果中设定一个默认的Nav转场效果。如果你原先工程中使用的是系统的Nav转场效果,那恭喜你,现在不需要改其他代码就已经可以实现自定义转场了哦(使用Modal转场和Nav转场有所区别,往下看)。
   如果你想换一个 XXTransition提供的Nav转场,这样设置就可以啦
  1.     //启动XXTransition自定义转场
  2.     [XXTransition startGoodJob:GoodJobTypeAll transitionDuration:0.3];
  3.    
  4.     //更改全局NavTransiton效果
  5.     [XXTransition setNavTransitonKey:XXTransitionAnimationNavPage];
复制代码
可是按照PM的要求,是一个全新的转场效果怎么办,得自己写啦。XXTransition可以让你专注于动画的实现,交互手势都不用care
  1. //添加自定义NavTransiton效果
  2. NSString *someNBTransitionAnimation = @“someNBTransitionAnimation";
  3. [XXTransition addPushAnimation:demoTransitionAnimationFragment animation:^(id transitionContext, NSTimeInterval duration) {
  4.       //Push动画逻辑
  5.   }];
  6.   [XXTransition addPopAnimation:demoTransitionAnimationFragment animation:^(id transitionContext, NSTimeInterval duration) {
  7.     //Pop动画逻辑
  8.   }];
  9.    //更改全局NavTransiton效果
  10.   [XXTransition setNavTransitonKey:someNBTransitionAnimation];
复制代码

       
  • 进阶
      
  一般情况下,一个App只会用一种转场效果,但有讲究有追求的话,可能需要多种转场效果配合不同交互手势在不同VC互相push,pop时进行切换,简单画个图你就明白了
  

任性切换自定义转场效果的XXTransition

任性切换自定义转场效果的XXTransition-3-技术控-产品,动画,工程,项目

  你遇到过吗,遇到了麻烦给个赞或者星,表示同病相怜,没遇到也麻烦给个星或者赞,因为我遇到了,让我感受到你的温暖。碰到这种情况,不要蓝瘦,不用香菇,看看XXTransition怎么解决。
  1.     //启动XXTransition自定义转场
  2.     [XXTransition startGoodJob:GoodJobTypeAll transitionDuration:0.3];
  3.    
  4.     //更改全局NavTransiton效果
  5.     [XXTransition setNavTransitonKey:XXTransitionAnimationNavPage];
  6.    
  7.     //自定义特殊ViewController的NavTransiton效果和返回手势
  8.     [XXTransition registerPushViewController:[SinkVC class] forTransitonKey:XXTransitionAnimationNavSink];
  9.     [XXTransition registerPushViewController:[PageVC class] forTransitonKey:XXTransitionAnimationNavPage];
  10.     [XXTransition registerPopGestureType:XXPopGestureTypeFullScreen forViewController:[SinkVC class]];
  11.     [XXTransition registerPopGestureType:XXPopGestureTypeForbidden forViewController:[PageVC class]];
复制代码
就这样,OK啦。SinkVC和PageVC分别使用响应的Nav转场效果和返回手势,而其他VC则使用全局转场效果
  Modal转场

   Modal切换ViewController的XXTransition使用方法和Nav有所不同,要在需要Present的使用调用 UIViewController+XXTransition.h定义的方法
  1. - (void)xx_presentViewController:(UIViewController *)viewControllerToPresent makeAnimatedTransitioning:(void (^)(XXAnimatedTransitioning *transitioning))block completion:(void (^ __nullable)(void))completion
复制代码
使用如下
  1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  2.     [tableView deselectRowAtIndexPath:indexPath animated:YES];
  3.     if (indexPath.row == 0) {
  4.         SinkVC *vc =[[SinkVC alloc] init];
  5.         [self.navigationController pushViewController:vc animated:YES];
  6.     } else {
  7.         ModalVC *vc = [[ModalVC alloc] init];
  8.         //XXTransition Modal转场
  9.         [self xx_presentViewController:vc makeAnimatedTransitioning:^(XXAnimatedTransitioning * _Nonnull transitioning) {
  10.             transitioning.duration = 0.5;
  11.             transitioning.animationKey = XXTransitionAnimationModalSink;
  12.         } completion:NULL];
  13.     }
  14. }
复制代码
如果你需要自己敲一个新的转场动画,类似于Nav转场中的自定义,专注动画实现,在下面两个方法中实现动画逻辑
  1. [XXTransition addPresentAnimation:demoTransitionAnimationModalSink animation:^(id transitionContext, NSTimeInterval duration) {
  2.         //Present 转场动画逻辑
  3.     }];
  4.    
  5.     [XXTransition addDismissAnimation:demoTransitionAnimationModalSink backGestureDirection:XXBackGesturePanDown animation:^(id transitionContext, NSTimeInterval duration) {
  6.         //dismiss 转场动画逻辑
  7.     }];
复制代码
XXTransition 在dismiss的转场交互中,支持下面几中选择
  1. typedef NS_ENUM(NSInteger,XXBackGesture){
  2.     XXBackGestureNone, //禁用手势
  3.     XXBackGesturePanLeft,
  4.     XXBackGesturePanRight,
  5.     XXBackGesturePanUp,
  6.     XXBackGesturePanDown,
  7. };
复制代码
最后
  如果你在使用XXTransition过程中发现任何问题,或是有任何建议,欢迎勾搭我。
   文章来自 许洵的昵称 的投稿, 原文地址
   Github: https://github.com/mh4u/XXTransition/



上一篇:tesseract.js - 从图片里抓取文字
下一篇:一行代码集成今日头条效果
安莲 投递于 2016-10-17 12:34:46
锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
回复 支持 反对

使用道具 举报

女圭女圭音せ 投递于 2016-10-17 15:22:57
为毛老子总也抢不到沙发?!!
回复 支持 反对

使用道具 举报

亦向 投递于 2016-10-17 17:13:20
如果我做了皇帝,就封你当太子!
回复 支持 反对

使用道具 举报

记得微笑 投递于 2016-10-21 02:36:31
我了个去,顶了
回复 支持 反对

使用道具 举报

lovestyle 投递于 2016-10-30 16:08:41
顶贴不认真,大脑有问题。
回复 支持 反对

使用道具 举报

╰素颜乜倾城° 投递于 2016-11-5 12:04:56
感谢楼主的推荐!
回复 支持 反对

使用道具 举报

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 | 粤公网安备 44010402000842号 )

© 2001-2017 Comsenz Inc.

返回顶部 返回列表