iOS 系统TabBarItem添加动画效果

项目需求:

双击TabBarItem刷新页面,并且TabBar添加旋转Loading动画,如图:

双击前样式和双击刷新后
双击刷新中(中心旋转)


动画原理:给Layer添加CABasicAnimation

通过 layer addAnimation 添加动画

那么问题来了,加在什么地方?

需要找到继承UIView视图才可以获取Layer,而UITabBarItem获取不了,所以我需要找到其中继承UIView的类:UITabBarButton

获取UITabBarButton的方法:

一 、KVC

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

二、循环便利TabBar的SubViews

该博客地址:blog.csdn.net/sinat_20559947/article/details/52828164

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

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

获取图片的ImageView:

KVC:UIImageView*tabBarSwappableImageView = [tabBarButtonvalueForKey:@"info"];


添加动画:

添加或者移除动画的方法

双击刷新:

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

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

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

任务完成!

PS:

问题一:获取tabBarButton为什么要用KVC,不用数组循环。

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

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

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

所以我打算还是用吧,如果以后审核被拒我也会及时在这里告知大家~

Demo地址:demo中第二个TabBarItem双击可看到效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,161评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,613评论 6 30
  • Core Animation Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,...
    45b645c5912e阅读 3,088评论 0 21
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,287评论 4 61
  • 世界上最美丽的巧合就是你喜欢的人也恰好喜欢你,最甜蜜的好运就是你得感情能够得到回应。但所谓在一起是两个人的事,分手...
    榴莲小姐进化论阅读 2,774评论 23 42