美文网首页ios开发专题
ios上UITabbar上的按钮的跳动动画

ios上UITabbar上的按钮的跳动动画

作者: zl520k | 来源:发表于2018-08-02 11:19 被阅读2次

我参照网上的说法

- (void)tabBar:(UITabBar*)tabBar didSelectItem:(UITabBarItem*)item{

    NSLog(@"%zi",self.selectedIndex);

    NSIntegerindex = [self.tabBar.itemsindexOfObject:item];

    if(self.indexFlag!= index) {

        if(!_btArray.count) {

            NSMutableDictionary *dic = [NSMutableDictionary new];

            for(UIView*btninself.tabBar.subviews) {

                if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

                    [_btArray addObject btn];

                }

            }

        }

        //放大效果,并回到原位

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

        //速度控制函数,控制动画运行的节奏

        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        animation.duration=0.08;      //执行时间

        animation.repeatCount=1;      //执行次数

        animation.autoreverses=YES;    //完成动画后会回到执行动画之前的状态

        animation.fromValue= [NSNumbernumberWithFloat:0.7];  //初始伸缩倍数

        animation.toValue= [NSNumbernumberWithFloat:1.3];    //结束伸缩倍数

        [[_btArray[index]layer]addAnimation:animationforKey:nil];

        self.indexFlag= index;

    }

}

发现点击的时候,根本不是当前按钮,打印了,发现

UITabBarButton: 0x105cb7dd0; frame = (252 1; 121 48); opaque = NO;

UITabBarButton: 0x105cb3ba0; frame = (127 1; 121 48);opaque = NO;

UITabBarButton: 0x10c512830; frame = (2 1; 121 48); opaque = NO; 

这个按钮返回的顺序发生变化,这个就需要重新排序一下,就可以了

if (!_btArray.count) {

            NSMutableDictionary *dic = [NSMutableDictionary new];

            for(UIView*btninself.tabBar.subviews) {

                if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

                    dic[@(btn.frame.origin.x)] = btn;

                }

            }

            NSArray*array = dic.allKeys;

            array = [arraysortedArrayUsingSelector:@selector(compare:)];

            @weakify(self)

            [arrayenumerateObjectsUsingBlock:^(id  _Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

                @strongify(self)

                UIView*bt = dic[obj];

                [self.btArrayaddObject:bt];

            }];

        }

        //放大效果,并回到原位

        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

        //速度控制函数,控制动画运行的节奏

        animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

        animation.duration=0.08;      //执行时间

        animation.repeatCount=1;      //执行次数

        animation.autoreverses=YES;    //完成动画后会回到执行动画之前的状态

        animation.fromValue= [NSNumbernumberWithFloat:0.7];  //初始伸缩倍数

        animation.toValue= [NSNumbernumberWithFloat:1.3];    //结束伸缩倍数

        [[_btArray[index]layer]addAnimation:animationforKey:nil];

        self.indexFlag= index;

这样就可以了,无论你怎么点击,都是对了。必须要注意,返回按钮的区域的顺序问题。

相关文章

网友评论

    本文标题:ios上UITabbar上的按钮的跳动动画

    本文链接:https://www.haomeiwen.com/subject/gjejvftx.html