摘要

实现同iOS 11 App Store Today相似的转场效果.本文尝试解决转场(Transition)过程中TabBar的隐藏(向下滑出屏幕).

tabbar_ani_slow.gif

遇到的问题

项目中使用的是系统自带的Storyboard上的TabBar,TabBar的隐藏使用的是hidesBottomBarWhenPushed方法.实现自定义转场的过程中,TabBar会跟随转场动画向左移出屏幕,但需求是向下滑出屏幕.如果自定义TabBar可能更容易实现,具体效果可以点击App Store上的"今日 App".

解决的问题

仅在自定义转场中按需隐藏TabBar(push向下滑出屏幕,pop向上划入屏幕),不影响其他使用系统转场的页面.

解决方案

使用方法

首先确定是否使用的自定义转场,如果定义了自定义转场的类,在要使用的页面实现UINavigationControllerDelegate的代理方法

-(id)navigationController:(UINavigationController *)navigationController

animationControllerForOperation:(UINavigationControllerOperation)operation

fromViewController:(UIViewController *)fromVC

toViewController:(UIViewController *)toVC

{

//根据类型返回对应动画

if (operation == UINavigationControllerOperationPush) {

return _trans;

}else {

return nil;

}

}

在我的工程中,存在着重写的TabBar、UITabBarController、UINavigationController的类分别实现不同的需求,要实现这种新增加的效果,最好的方法应该是使用Category,所以我们定义UITabBar的类别UITabBar+CustomTabbar,实现动画(出处作者称为淡入淡出效果).

UITabBar+CustomTabbar.h

#import

@interface UITabBar (HYCustomTabBar)

@end

UITabBar+CustomTabbar.m

#import "UITabBar+CustomTabbar.h"

@implementation UITabBar (CustomTabbar)

-(id)actionForLayer:(CALayer *)layer forKey:(NSString *)event{

if ([event isEqualToString:@"position"]) {

if(layer.position.x<0){

//show tabbar

CATransition *pushFromTop = [[CATransition alloc] init];

pushFromTop.duration = 0.3;

pushFromTop.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

pushFromTop.type = kCATransitionPush;

pushFromTop.subtype = kCATransitionFromTop;

return pushFromTop;

}else if (layer.position.x>0&&(layer.position.y>layer.bounds.size.height)&&(layer.position.y

//hide tabbar

CATransition *pushFromBottom = [[CATransition alloc] init];

pushFromBottom.duration = 0.3;

pushFromBottom.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

pushFromBottom.type = kCATransitionPush;

pushFromBottom.subtype = kCATransitionFromBottom;

return pushFromBottom;

}

}

return (id)[NSNull null];

}

-(void)runActionForKey:(NSString *)event object:(id)anObject arguments:(NSDictionary *)dict{

}

@end

其中

layer.position.y>layer.bounds.size.height

layer.position.y

是为了去除第一次加载视图的情况。

然后在自己重写的UITabBarController类中添加类别的引用

#import "TabVC.h"

#import "UITabBar+CustomTabbar.h"

@interface TabVC ()

@end

...

这样,在自定义转场过程中,就能实现自定义的TabBar隐藏动效,而且实现了很大程度的解耦.

出处

ios 动画 隐藏tabbar_iOS_自定义转场TabBar的隐藏动画相关推荐

  1. android dialog 动画代码,android 自定义dialog弹出和消失动画

    自定义dialog窗口,根据坐标可随意设置dialog显示位置,实现了窗口弹出动画 Java代码: package com.sunxu.org.IndividualityDialog; import ...

  2. android 烟花动画效果图,Android 自定义 View 新年烟花、横幅动画

    新年了,项目中要作个动画,如下效果图: 整体要求实现:彩带乱飞,烟花冲天而起,烟花缩放,小鸡换图,小鸡飘移,横幅裁剪.展开等动画效果, 全局大量使用了属性动画来实现. 我在实现过程中,横幅的裁剪计算, ...

  3. android progressbar 水平动画,Android ProgressBar 自定义样式(三),动画模式

    果: 和之前的一样,在布局文件中: android:id="@+id/progressBar3" android:layout_width="wrap_content&q ...

  4. iOS开发 tabbar自定义转场动画

    1.小记 关于自定义转场动画,只要你理清他的"套路",你就可以随心所欲地自定义了. 大体思路就是:遵守对应的代理协议,然后设置对应的代理,实现代理方法,这个代理方法要返回的值就是你 ...

  5. iOS 关于自定义转场动画,以UITabBarController为例

    1.小记 关于自定义转场动画,只要你理清他的"套路",你就可以随心所欲地自定义了. 大体思路就是:遵守对应的代理协议,然后设置对应的代理,实现代理方法,这个代理方法要返回的值就是你 ...

  6. Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

    原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画.比如,可以定义 ...

  7. iOS 自定义转场动画浅谈

    代码地址如下: http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差 ...

  8. iOS 自定义转场动画初探

    最近项目刚迭代,正好闲下来捣鼓了一下iOS的自定义转场的效果.闲话不多说,直接开始上代码吧.(ps:请忽略实际的转场效果,关注技术本身呢哦.pps:主要是转场的动画做的比较low啦!) 1.首先定义一 ...

  9. iOS自定义转场动画实战讲解

    转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerAnimated:completio ...

最新文章

  1. vmmem 内存占用高
  2. boost::unknown_exception用法的测试程序
  3. localStorage的过期时间设置的方法?
  4. xshell通过隧道连接_DNS安全之隧道攻击
  5. D. The Best Vacation(贪心+前缀和+二分)
  6. 干货来袭!游戏建模初学者该怎样学习?
  7. 【2012百度之星资格赛】J:百度的新大厦
  8. CentOS/Ubuntu 下 FTP 服务器(vsftpd)的安装
  9. 计算机显示器出现黑屏分析
  10. Java实现字符串逆序输出
  11. java 发微信视频_分享java微信开发视频
  12. SHAP 可视化解释机器学习模型简介
  13. C++ 小游戏 视频及资料集(十)
  14. Python文本分析---笔记
  15. 商务智能 BI 的四大关键技术
  16. WannaMine挖矿木马手工处理-NetworkDistribution
  17. mysql多对多第二范式_【Mysql】第一范式与第二范式
  18. 文件上传漏洞 — 前端JS绕过、MIME类型绕过
  19. app做好后如何上线_上线后如何进行app运营?
  20. 简单的播放AVI方法:CAnimateCtrl类

热门文章

  1. property内存管理策略
  2. Day_2_Python_str_list_dict的使用
  3. [bzoj 2017] [Usaco2009 Nov]硬币游戏
  4. 无法复制_desktop:访问被拒绝的解决方法
  5. 警惕!不要让页面响应时间成为应用性能指标上的杠精
  6. 5-32 说反话-加强版
  7. Vue 学习笔记(2)Vue 生命周期、组件
  8. 校招刷题---java选择题笔记01
  9. 小程序入门学习10--云开发03
  10. 满屏的指标?删了吧,手把手教你裸 K 交易!