我参照网上的说法
- (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;
这样就可以了,无论你怎么点击,都是对了。必须要注意,返回按钮的区域的顺序问题。