iOS 自定义滑动切换TabbarItem 觉得设计丑也要做出来的UI效果。。。
UI丑却要继续做的感言:
对UI不满意的时候,就会觉得丑爆了,时间长了,却丑习惯了。
论前一阵子Tabbar 多丑,丑得最后不要tabbar了...但是自定义tabbar 和遇到的问题解决的过程可以记录一下
目标效果:
并有切换效果,但是并没说清楚,具体切换效果,比如粘滞,弹性?
于是我做了一个弹性的。
看实现效果
一. 原理:
(1)普通切换选择效果,直接贴在了tabbar上,tabbar再自定义处理图层
(2)触发事件是tabbar上的,没有图片而已。这么处理也是取巧了,降低了整体自定义难度
二.遇到的问题
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UINavigationController *)viewController
代理方法里,如何区分选中视图控制器?
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UINavigationController *)viewController
{
UIViewController *vc = viewController.viewControllers.firstObject;
NSInteger tag = vc.tabBarItem.tag;
NSLog(@"点击了 第 %ld 个 tab",tag);//tag来自于视图初始化时候的赋值
}
- (UIViewController *)mineVC
{
if (!_mineVC) {
_mineVC = [[UIViewController alloc]init];
NSString *title = nil;
_mineVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:nil selectedImage:nil];
_mineVC.tabBarItem.tag = 2;//这里对不同的视图的根控制器进行标记区分
_mineVC.view.backgroundColor = [UIColor redColor];
}
return _mineVC;
}
在应用不断交互中,tabbar的合理显示和隐藏?
//显示是在主界面上的视图控制器显示tabbar其他情况都隐藏,处理方案:
//在视图控制器基类HFBaseViewController里对tabbar做显示隐藏的逻辑判断,并在交互过程自然显示隐藏不突兀处理
#import <UIKit/UIKit.h> @interface HFBaseViewController : UIViewController @end
////////// @interface HFBaseViewController () @end @implementation HFBaseViewController - (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithConfigKey:@"bg_white"];
if (!self.fd_prefersNavigationBarHidden) {
[self setDefaultBackButtonItem];
}
if (@available(iOS 11.0, *)) {
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
self.edgesForExtendedLayout = UIRectEdgeNone; //防止tabbar遮挡视图
}
#pragma mark - 显示tabbar动画
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if ([FIRWalletHomeVC isTypeLegal:self]
|| [FIRMarketVC isTypeLegal:self]
|| [FIRMineVC isTypeLegal:self]) {
self.tabBarController.tabBar.alpha = 1.0;
self.tabBarController.tabBar.hidden = NO;
return ;
}
[UIView animateWithDuration:0.5 animations:^{
self.tabBarController.tabBar.alpha = 0.0;
self.tabBarController.tabBar.hidden = YES;
} completion:^(BOOL finished) {
//none
}]; }
以上。
github 上放了源码:clone后 直接pod update 就能运行
iOS 自定义滑动切换TabbarItem 觉得设计丑也要做出来的UI效果。。。的更多相关文章
- iOS 自定义滑动切换TabBar
貌似经常会用到,自己整理收藏起来,方便日后查找备用. 效果如图: 由于制作gif,调整了属性,所以看起来的效果不好.如果用默认配置,生成的gif会很大. 制作gif: 1.使用QuickTimePla ...
- IOS自定义场景切换动画。
IOS中我们可以通过Storyborad以及segue来实现我们自己的场景切换动画,新建项目使用Single View Application模板并取名为MyCustomSegue. 使用storyb ...
- iOS开发之多表视图滑动切换示例(仿"头条"客户端)---优化篇
前几天发布了一篇iOS开发之多表视图滑动切换示例(仿"头条"客户端)的博客,之所以写这篇博客,是因为一位iOS初学者提了一个问题,简单的写了个demo做了个示范,让其在基础上做扩展 ...
- Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现
嘿嘿嘿,关于android滑动的操作,是不是经常都会用到呢. 我肯定也要学习一下啦. https://blog.csdn.net/u013184970/article/details/82882107 ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- iOS彩票项目--第五天,新特性引导页的封装、返回按钮的自定义、导航控制器的滑动返回以及自定义滑动返回功能
一.上次实现了在AppDelegate中通过判断app版本决定是否进入新特性页面,今天将AppDelegate中的一坨进行了封装.将self.window的根控制器到底应该为新特性界面,还是主页面,封 ...
- iOS 实现快速切换主题详细教程(附上源码)
前言 iOS 实现主题切换,相信在未来的app里也是会频繁出现的,尽管现在只是出现在主流的APP,如(QQ.新浪微博.酷狗音乐.网易云音乐等),但是现在是看颜值.追求个性的年代,所以根据用户喜好自定义 ...
- Android之fragment点击切换和滑动切换结合
学了一小段时间的Android,主要接触的是UI设计,打交道最多莫过于fragment了吧.在Android3.0引入了fragment的概念后,几乎在所以的Android的应用中都可以看见其身影,已 ...
- WPF 自定义滑动ScrollViewer
自定义滑动滚动条 预期目标:横向滚动条,可以左右滑动,用鼠标按住(触摸)然后释放可以实现快速滑动. 我们有几种方案: 1.ScrollViewer,修改其中的横向滚动条,将其中的背景设置为透明. 但是 ...
随机推荐
- 抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面
抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立 图形用户界面GUI (Graphics User Interface)工具集,AWT可用 ...
- 快速开发微信小程序
image.png 最近婷主在做微信小程序.自己的微信公众号也需要添加点料,乘着这次放假,把微信小程序研究了下.虽然没有做什么很强大的功能,不过好歹自己的公众号也有了微信小程序.够用即可. 1.需要先 ...
- secureCRT连接不上linux的当中一个最大的原因
之前secureCRT一直连接不上linux(我的linux版本号是Ubuntu14.04.2.用的是VirtualBox).在网上找了各种办法.但是都解决不了我的问题! 网上的解决的方法不是说没有开 ...
- 微信 openId
摘要 关于微信开发的话题,例子确实已经有不少,但大部分都是人云亦云,很多小细节或者需要注意的地方却大多没有讲清楚,这令很多刚开始开发的人感觉大很迷茫.而我今天要说的话题,主要着眼于两个方面. 一:如何 ...
- ChemDraw Pro移动原子有什么方法
很多的用户朋友在使用ChemDraw Pro 14过程中,会发现我们用[文本]工具在我们绘制的化学结构上建立原子符号和说明时一些标记的原子名称会显得拥挤,这个时候我们可以通过移动原子的方式来把空间放大 ...
- ASP.NET常见内置对象(一)
在web开发中,数据库都是通过HTTP协议来传输的.但HTTP是一个无状态协议,不会保留数据的状态和信息. 为了解决问题.各种开发语言都提供了状态管理功能. 状态管理是在同一页或不同页的多个请求发生时 ...
- Eclipse UML插件
Green UML http://green.sourceforge.net/ AmaterasUML http://amateras.sourceforge.jp/cgi-bin/fswiki_en ...
- 第一篇:《UNIX 环境高级编程》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- 将BT转为磁力链接
实战代码 安装完成后,我们来看下代码: 系统环境:Linux Python环境:Python2.7 请注意python版本 bt2url.py 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- SVN上新增一个项目和用户
author:headsen chen date:2018-05-04 11:01:08 1,在SVN服务器上,打开SVN的软件,在项目里新建一个文件夹.在Repositories下面 2,use ...