iOS:给标签栏控制器的UITabbarItem添加点击动效
一、介绍
现在很多app,附带很炫的点击效果,让用户享受到非常棒的体验,例如动画、渐变、音效等。
当然,市面上大多数app的标签栏点击还是挺中规中矩的,只是切换图片而已。然而,这个是可以优化的,附带点特效能极大为app增色。
例如音效和波动,淘宝和今日头条就是这么实现的,效果特别棒。这里实现一下UITabbarItem波动的动画。
二、代码
1、遍历标签栏控制器的UITabbarItem,给其每一个子视图按钮添加点击事件
for (UIControl *tabBarButton in [UITabBarController tabBar].subviews) {
if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")] ||
[tabBarButton isKindOfClass:NSClassFromString(@"UIButton")]) {
[tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
}
}
2、在点击事件中实现波动动画
- (void)tabBarButtonClick:(UIControl *)tabBarButton {
for (UIView *imageView in tabBarButton.subviews) {
if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")] ||
[imageView isKindOfClass:NSClassFromString(@"UIImageView")]) {
CAKeyframeAnimation *continueAimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
continueAimation.duration = 0.4f;
NSMutableArray *continueValues = [NSMutableArray array];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.6, 0.6, 1.0)]];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1, 1.0)]];
[continueValues addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
continueAimation.values = continueValues;
continueAimation.removedOnCompletion = NO;
continueAimation.fillMode = kCAFillModeForwards;
[imageView.layer addAnimation:continueAimation forKey:nil];
}
}
}
三、效果 (参看淘宝的就行,gif动画不太明显,可以自己打开淘宝看看)
iOS:给标签栏控制器的UITabbarItem添加点击动效的更多相关文章
- iOS 7 标签栏控制器进行模态视图跳转后变成透明
要解决此问题,需要设置tabBar的如下属性: self.tabBar.translucent = NO;
- IOS开发中如何给UIImageView添加点击事件
1.先创建一个UIImageView控件: photeImageView = [[UIImageView alloc]init]; photeImageView.frame = CGRectMake( ...
- ios 给移动的控件添加点击事件
前言: 给一个UIView做移动动画,虽然看起来frame在持续改变,但是它的frame已经是最终值了. 也就是说表面看到的动画都是假象,它的真实位置已经是固定的了.所以只有点击在他的真实frame范 ...
- iOS:切换视图的第三种方式:UITabBarController标签栏控制器
UITabBarController:标签栏控制器 •通过设置viewControllers属性或者addChildViewController方法可以添加子控制器 –NSArray *viewCon ...
- 标签栏控制器(UITabBarController)
一.标签栏控制器基础 1.绪论 a.一个标签栏是一个独立的界面对象,它经常与一个视图控制器(UITabBarController是UIViewController的子类)一起使用. b.一个标签栏项目 ...
- iOS:导航控制器侧滑出栈实现
介绍:在iOS中,导航控制器UINavigationController是默认实现左侧边缘侧滑手势出栈的,但是如果当开发者对导航控制器子控制实现自定义leftBaButtonItem时,这个侧滑功能就 ...
- iOS真机测试,为Provisioning添加设备 -- based xcode6[原]
iOS真机测试, 我们需要添加几台新的设备进行测试.我们只需要对Provisioning Profiles 进行更新. 1. 在苹果开发者中心添加测试设备 打开苹果Certificates, Ide ...
- 在iOS开发中,给项目添加新的.framework
首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ...
- iOS 控制单个控制器旋转
iOS 控制单个控制器旋转 控制单个ViewController 的旋转 //不旋转,保持竖屏 //iOS 5 - (BOOL) shouldAutorotateToInterfaceOrientat ...
随机推荐
- LAMP编译安装部分
# yum install -y apr-devel apr-util-devel pcre-devel # wget http://mirror.bit.edu.cn/apache/httpd/ht ...
- 学号:20165239 预备作业3 Linux安装及学习
实验三 用户及文件权限管理 之前从未接触过虚拟机,借着老师布置的任务,这次寒假初次接触了虚拟机,既紧张又兴奋,在学习了老师的一部分教程以及查阅网上的资料之后,有了以下的学习笔记和心得. 一.Linux ...
- HtmlTestRunner
1.一般生成报告时,会使用时间来作为报告名称的一部分,引入time这个第三方,使用以下方式格式化当前时间 下面运行最终结果:2019-03-29-14_29_18------>年-月-日-时-分 ...
- 查看windows电脑CPU核心数,线程数
在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中输入“cpu get *”即可查看物理CPU数.CPU核心数.线程数.其中, Name:表示物理CPU数 NumberOfC ...
- 归并排序(Java实现)
package sort; public class MergeSort { static void msort(int []a,int start,int end){ int mid=(start+ ...
- Python replace() 和 re.sub() 字符串字符替换
Python replace() 和 re.sub() 字符串字符替换 replace() testStr = 'aa:bb[cc' testStr.replace(':','_') 每次只能替换一个 ...
- 在Idea中添加自定义补全代码设置(Main方法为例)
一.打开File->setting->Editor->Live Templates 二.注意右边有“+”.“-”号,点击+号选择第二个Template Group...,并输入新组名 ...
- HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
<题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...
- python与mysql交互中的各种坑
开始学python 交互MySQLdb,踩了很多坑 第一个 %d format: a number is required, not str 参照以下博客: https://blog.csdn.net ...
- 如何做出一个更好的Machine Learning预测模型【转载】
作者:文兄链接:https://zhuanlan.zhihu.com/p/25013834来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 初衷 这篇文章主要从工程角度来 ...