有人问到tabbar上自定义角标红点形状,翻了翻以前的项目,找到了,也忘了参考谁的,反正闲着蛋疼,记录一下;
系统的角标 系统有方法,tabBarItem.badgeValue=@"1"
有些需要自定义的,代码如下(UITabBar的类别)
.h里代码
//
// UITabBar+XSDExt.h
// XSD-PK UITabBar类别
//
// Created by 小广 on 15/11/28.
// Copyright © 2015年 XSD. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface UITabBar (XSDExt)
- (void)showBadgeOnItemIndex:(NSInteger)index; ///<显示小红点
- (void)hideBadgeOnItemIndex:(NSInteger)index; ///<隐藏小红点
@end
.m方法
//
// UITabBar+XSDExt.m
// XSD-PK
//
// Created by 小广 on 15/11/28.
// Copyright © 2015年 XSD. All rights reserved.
//
#import "UITabBar+XSDExt.h"
#define TabbarItemNums 3.0 //tabbar的数量 如果是5个设置为5
@implementation UITabBar (XSDExt)
//显示小红点
- (void)showBadgeOnItemIndex:(NSInteger)index{
//移除之前的小红点
[self removeBadgeOnItemIndex:index];
//新建小红点
UIView *badgeView = [[UIView alloc]init];
badgeView.tag = 888 + index;
badgeView.layer.cornerRadius = 5.0;//圆形
badgeView.backgroundColor = [UIColor redColor];//颜色:红色
CGRect tabFrame = self.frame;
//确定小红点的位置
CGFloat percentX = (index + 0.6) / TabbarItemNums;
CGFloat x = ceilf(percentX * tabFrame.size.width);
CGFloat y = ceilf(0.1 * tabFrame.size.height);
badgeView.frame = CGRectMake(x, y, 10.0, 10.0);//圆形大小为10
badgeView.clipsToBounds = YES;
[self addSubview:badgeView];
}
//隐藏小红点
- (void)hideBadgeOnItemIndex:(NSInteger)index{
//移除小红点
[self removeBadgeOnItemIndex:index];
}
//移除小红点
- (void)removeBadgeOnItemIndex:(NSInteger)index{
//按照tag值进行移除
for (UIView *subView in self.subviews) {
if (subView.tag == 888+index) {
[subView removeFromSuperview];
}
}
}
@end
用法:
//显示
[self.tabBarController.tabBar showBadgeOnItemIndex:2];
//隐藏
[self.tabBarController.tabBar hideBadgeOnItemIndex:2];
在tabbar的一个VC里调用就行;
栗子如图: