自定义BadgeView
-(instancetype)initWithFrame:(CGRect)frame{
if (self=[super initWithFrame:frame]) {
self.userInteractionEnabled=NO;
[self setBackgroundImage:[UIImage imageNamed:@"main_badge"] forState:UIControlStateNormal];
self.titleLabel.font=WBBadgeFont;
[self sizeToFit];
}
return self;
}
/**重写set方法 当文字的宽度大于lab的宽度**/
-(void)setBadgeValue:(NSString *)badgeValue{
_badgeValue=badgeValue;
if (badgeValue.length==0 || [badgeValue isEqualToString:@"0"]) {
self.hidden=YES;
}else{
self.hidden=NO;
}
NSMutableDictionary * dict=[NSMutableDictionary dictionary];
dict[NSForegroundColorAttributeName]=WBBadgeFont;
CGSize size=[badgeValue sizeWithAttributes:dict];
if (size.width>self.width) {
[self setImage:[UIImage imageNamed:@"new_dot"] forState:UIControlStateNormal];
[self setTitle:nil forState:UIControlStateNormal];
[self setBackgroundImage:nil forState:UIControlStateNormal];
}else{
[self setBackgroundImage:[UIImage imageNamed:@"main_badge"] forState:UIControlStateNormal];
[self setTitle:badgeValue forState:UIControlStateNormal];
[self setImage:nil forState:UIControlStateNormal];
}
}
@property (nonatomic, strong) UITabBarItem *item;
#import "WBTabBarButton.h"
#import "WBBadge.h"
#import"UIView+Extension.m"
#define CZImageRidio 0.7
@interface WBTabBarButton ()
@property(nonatomic,weak)WBBadge * badgeView;
@end
@implementation WBTabBarButton
-(WBBadge *)badgeView{
if (!_badgeView) {
WBBadge * btn=[WBBadge buttonWithType:UIButtonTypeCustom];
[self addSubview:btn];
_badgeView=btn;
}
return _badgeView;
}
-(void)setItem:(UITabBarItem *)item{
_item=item;
[self observeValueForKeyPath:nil ofObject:nil change:nil context:nil];
[item addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
[item addObserver:self forKeyPath:@"image" options:NSKeyValueObservingOptionNew context:nil];
[item addObserver:self forKeyPath:@"selectedImage" options:NSKeyValueObservingOptionNew context:nil];
[item addObserver:self forKeyPath:@"badageValue" options:NSKeyValueObservingOptionNew context:nil];
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
[self setTitle:_item.title forState:UIControlStateNormal];
[self setImage:_item.image forState:UIControlStateNormal];
[self setImage:_item.selectedImage forState:UIControlStateSelected];
self.badgeView.badgeValue=_item.badgeValue;
}
/**布局自控的位置**/
- (void)layoutSubviews
{
[super layoutSubviews];
// 1.imageView
CGFloat imageX = 0;
CGFloat imageY = 0;
CGFloat imageW = self.bounds.size.width;
CGFloat imageH = self.bounds.size.height * CZImageRidio;
self.imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);
// 2.title
CGFloat titleX = 0;
CGFloat titleY = imageH - 3;
CGFloat titleW = self.bounds.size.width;
CGFloat titleH = self.bounds.size.height - titleY;
self.titleLabel.frame = CGRectMake(titleX, titleY, titleW, titleH);
// 3.badgeView
self.badgeView.x = self.width - self.badgeView.width - 10;
self.badgeView.y = 0;
}
自定义BadgeView的更多相关文章
- ios资源
ios 资源 分类: ios开发2012-05-30 16:39 573人阅读 评论(0) 收藏 举报 ios文档calendar2010reference图像处理 学习过程当中查找到的资料,做一个记 ...
- 【转】IOS开发资源汇总
转自:http://blog.csdn.net/favormm/article/details/6664970 如何用Facebook graphic api上传视频: http://develope ...
- IOS地址
IOS开发-你不可缺少的资源汇总-知识分享-转 如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ ...
- iPhone开发 - 常用库
iPhone开发 - 常用库 这里总结了iPhone开发者开发过程中可能需要的一些资源 如何用Facebook graphic api上传视频: http://developers.facebook. ...
- (转)IOS 的一些资源汇总
UI界面类项目: Panoramagl —— 720全景展示 Panorama viewer library for iPhone, iPad and iPod touch MBProgressH ...
- iPhone开发资源汇总
如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...
- (转) iphone开发资源汇总
如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...
- iOS tabbar 自定义小红点 消息显示,定制边框、颜色、高宽
一般我们需要显示消息数,会利用到系统提供的api UIApplication.sharedApplication().applicationIconBadgeNumber = 10 但如果我们不想显示 ...
- BadgeView新提示开源工具类
BadgeView是使用某个图标作为新功能的提醒,类似于收到短息后短信图标的右上方有信息数目或者其他的显示性提示.BadgeView很好的实现了这个功能,而且进行了拓展,可自定义位置和提示图标. 工具 ...
随机推荐
- shell导出mysql部分数据
#!/bin/shSYSTEM=`uname -s` echo "echo"$SYSTEM if [[ $SYSTEM = "Linux" ]]; then ...
- 日常积累oracle 有关信息
对于VARCHAR2类型,我们在内存使用和效率上需要做出一个权衡.对于VARCHAR2(长度>=2000)变量,PL/SQL动态分配内存来存放实际值,但对于VARCHAR2(长度<2000 ...
- google浏览器打开报出文件不可读解决方案
1.打开*.desktop文件 gedit ~/.local/share/applications/name.desktop 在文件中做改动: The .desktop file should loo ...
- DP4J -- mnist
标签(空格分隔): DeepLearning mnist mnist是一个数据集,其中包含很多手写数字的图片,每张图片都已经打上了label: Deep Learning 传统的机器学习神经网络由一层 ...
- 关于Struts、hibernate、spring三大框架详解。
struts 控制用的 hibernate 操作数据库的 spring 用解耦的 Struts . spring . Hibernate 在各层的作用 1 ) struts 负责 web 层 . Ac ...
- Eclipse 快捷键 (应用中自己总结)
调试快捷键: 1: resume(F8) 调试中用来直接跳到下一个断点 2: 用来结束JVM 3:step into (F5)跳入函数 4: step over (F6)单步执行 5:step re ...
- Openfire Strophe IE跨域问题
Openfire和Strophejs网站 域名不同如何进行通信,这个问题总算解决,下面是解决步骤. 解决方案一: Chrome浏览器默认支持跨域访问 IE浏览器需要做配置:点击IE浏览器的的“工具-& ...
- PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第四组(转)
十:联机处理-可选项终端根据卡片行为分析的结果,执行对应的处理.若卡片响应联机,则终端发起联机操作.联机处理使得发卡行后台可以根据基于后台的风险管理参数检查并授权批准或拒绝交易.除了传统的联机欺诈和信 ...
- Mysql导入导出非常慢解决办法
MySQL导出的SQL语句在导入时有可能会非常非常慢,经历过导入仅45万条记录,竟用了近3个小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSER ...
- GoF--外观设计模式
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...