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动画不太明显,可以自己打开淘宝看看)

原文地址:https://www.cnblogs.com/XYQ-208910/p/9948298.html

时间: 2024-09-28 14:37:20

iOS:给标签栏控制器的UITabbarItem添加点击动效的相关文章

iOS开发学习之#标签栏控制器#(6)设置标签栏控制器

动态创建标签栏控制器就不说了,就是从视图库中托一些控件,这里要用到得是Tab Bar Controller,然后创建两个插座变量跟拖的控件进行关联.现在我们主要讲一下怎么对Tab Bar Controller进行设置: (1)设置条目标题 self.title = @"第一个视图"; [self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor

ios如何在一个控制器中添加另一个控制器

最近的项目由于项目需要,涉及过多次在当前控制器上添加另一个控制器的View问题.这里做个笔记,为了方便,当前视图控制器记为控制器1,添加的视图记为控制器2 第一种情况: 1.首先,因为控制器2的视图上有需要与用户交互的需求,所以一定要设置2为1的子控制器 ViewController *vc2 = [[ViewController alloc]init];      [self addChildViewController:vc2]; ps:当有多个子视图时还可能用到,子控制器的removeFr

UITabBarController(标签栏控制器)

一.标签栏控制器的基本概念 UITabBarController 继承于视图控制器,通过标签栏项的形式来管理视图控制器,各个标签栏项之间的视图控制器彼此独立,互不影响. (1)UITabBarController中各个视图控制器的生命周期与UITabBarController的生命周期是一致的: (2)点击不同的标签栏项(UITabBarItem),展现不同的视图控制器的View: (3)被选中的标签栏项对应的视图控制器的View处于显示状态,其他视图控制器的View处于卸载状态. 二.标签栏控

导航控制器和标签栏控制器

1. 导航控制器 1.1. 导航控制器的组成 1.2. 导航控制器的创建 1.3. 改变导航控制的关联视图 1.4. 实现导航 1.5. 添加标题 1.6. 设置导航栏颜色 1> 使用setBackgroudColor属性设置 2> 使用tintColor属性进行设置 1.7. 添加左右按钮 1> 静态添加按钮 2> 动态添加按钮 1.8. 设置返回按钮 2. 标签栏控制器 2.1. 标签栏控制器的创建 1> 静态创建标签栏视图控制器 2> 创建一个Tabbed App

iOS 中导航控制器全屏向右滑动返回上一界面

在iOS中,导航控制器默认就自带了侧滑功能,当用户在界面的左边(左边边缘)滑动的时候,才会有侧滑功能.但是我们往往在开发的过程中需要在屏幕的任意位置滑动,都需要返回到上一个界面. 多说无意,直接看代码: 效果图部分: 代码部分(第二个界面): #import "CJSecondViewController.h" @interface CJSecondViewController ()<UIGestureRecognizerDelegate> @end @implementa

IOS UINavigationController 导航控制器

/** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 2.zhan (zhan 中所有的子控制器) self.navigationController.viewControllers; 3.将控制器压入zhan 中 [self.navigationController pushView

ios中创建控制器的几种方式

1.通过storyboard创建: (1)先加载storyboard文件: UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Test"  bundle:nil]; (2) 初始化storyboard中的控制器: ①初始化"初始控制器":HLViewController * hl = [storyboard instantiateInitialViewController]; ②通过标识初始

往一个控制器的View添加另一个控制器的View出现的异常

往一个控制的view上添加另一个控制器的View,(由于layout缘故)可能视图会发生异常,出现伸缩(被添加视图的view变小,或者变大),所以应该设置被添加控制器的View的属性,让他不随父控件的变化而变化, 被添加控制器.view.autoresizingMask = UIViewAutoresizingNone; 往一个控制器的View添加另一个控制器的View出现的异常,布布扣,bubuko.com

在iOS开发中,给项目添加新的.framework

首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件.另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间. 上面提到