iOS TabBarItem 双击旋转动画以及刷新数据

640?wx_fmt=jpeg

黑客技术 点击右侧关注,了解黑客的世界! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java开发进阶 点击右侧关注,掌握进阶之路! 640?wx_fmt=jpeg

640?wx_fmt=jpeg

Linux编程 点击右侧关注,免费入门到精通! 640?wx_fmt=jpeg


来源丨iOS开发精髓
https://mp.weixin.qq.com/s/LBLIjKy7KYpIBa8Mez9kFg
看见有些应用,比如今日头条等都有双击第一个按钮,TabBarItem的图标就会变刷新,同时刷新数据等。就研究了一下。


如下图:双击前:


640?wx_fmt=other


双击后:


640?wx_fmt=other


动画原理:给Layer添加CABasicAnimation


640?wx_fmt=png


那么问题来了,加在什么地方?
需要找到继承UIView视图才可以获取Layer,而UITabBarItem获取不了,所以我需要找到其中继承UIView的类:UITabBarButton


获取UITabBarButton的方法:


一 、KVC


UIControl*tabBarButton = [currentViewController.tabBarItemvalueForKey:@"view"];


二、循环便利TabBar的SubViews


640?wx_fmt=other


这里我选择第一种获取方法:


添加后我发现给tabBarButton添加旋转动画会导致文字和图片一起旋转,而我只需要图片旋转,文字不动。于是我需要找到tabBarButton中所展示的ImageView,给这个imageView的Layer加动画就对了。


获取图片的ImageView: KVC:UIImageView*tabBarSwappableImageView = [tabBarButtonvalueForKey:@"info"];


添加动画:


640?wx_fmt=other


双击刷新:


动画有了,现在是要判断如何触发双击刷新:


原理:在自定义的TabBarViewController中签订UITabBarControllerDelegate 获取TabBarItem点击事件,再通过时间间隔判断是否是连点操作。当然,如果要更精确点击位置,可以通过记录上一次点击TabBarItem的ViewController和时间间隔双重条件来判断。


640?wx_fmt=other


我这里就只通过时间去判断是否是第一个界面(ChannelListViewController)的双击,其他界面不添加双击刷新效果


PS: 问题一:获取tabBarButton为什么要用KVC,不用数组循环。 我刚开始是使用数组记录所有的TabBarButton,然后通过点击的Index去取数组的tabBarButton然后用KVC取ImageView,但是我发现一个问题,当我双击后,我需要更改tabBarItem.selectImage的图片,而我更改后再从数组里去ImageView的时候,这个动画却加不上去了,原因未知,可能跟isa地址有关吧。所以我使用KVC去实施获取tabBarButton的ImageView;


问题二:使用KVC会不会调用了私有API


这个问题我也有所担心,我也在技术群里问了下大家,有个哥们说去年他也用了这个key并没有被拒(今年鬼知道apple规则有没有变),而且只是加个动画,应该不算是私有API,这些是群里朋友们的意见,总之都不敢保证,我也Google 和 stackoverflow  搜了下对应的关键字,没有发现被拒相关的文章。

 推荐↓↓↓ 

640?wx_fmt=jpeg

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “ 在看” 行不行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值