BadgeValueView

效果

源码

https://github.com/YouXianMing/UI-Component-Collection 中的 BadgeValueView

//
// BadgeValueView.h
// BadgeView
//
// Created by YouXianMing on 16/5/17.
// Copyright © 2016年 YouXianMing. All rights reserved.
// #import <UIKit/UIKit.h> typedef NS_ENUM(NSUInteger, BadgePosition) { BadgePositionCenterLeft,
BadgePositionCenterRight, BadgePositionTopLeft,
BadgePositionTopRight, BadgePositionBottomLeft,
BadgePositionBottomRight,
}; @interface BadgeValueView : UIView /**
* bedge值
*/
@property (nonatomic, strong) NSString *badgeValue; /**
* 被附着的view
*/
@property (nonatomic, weak) UIView *contentView; /**
* 敏感字符增长宽度,默认值为4
*/
@property (nonatomic) CGFloat sensitiveTextWidth; /**
* 敏感增长宽度,默认为10
*/
@property (nonatomic) CGFloat sensitiveWidth; /**
* 固定高度,默认为20
*/
@property (nonatomic) CGFloat fixedHeight; /**
* 位置信息,默认为BadgePositionTopRight
*/
@property (nonatomic) BadgePosition position; /**
* 字体,默认为12
*/
@property (nonatomic, strong) UIFont *font; /**
* 字体颜色,默认为白色
*/
@property (nonatomic, strong) UIColor *textColor; /**
* bedge颜色,默认为红色
*/
@property (nonatomic, strong) UIColor *badgeColor; /**
* 开始生效
*/
- (void)makeEffect; /**
* 设置BadgeValue
*
* @param value BadgeValue
* @param animated 是否执行动画
*/
- (void)setBadgeValue:(NSString *)value animated:(BOOL)animated; @end
//
// BadgeValueView.m
// BadgeView
//
// Created by YouXianMing on 16/5/17.
// Copyright © 2016年 YouXianMing. All rights reserved.
// #import "BadgeValueView.h"
#import "UIView+SetRect.h" @interface BadgeValueView () @property (nonatomic, strong) UILabel *label; @end @implementation BadgeValueView - (instancetype)init { if (self = [super init]) { self.sensitiveWidth = ;
self.fixedHeight = ;
self.sensitiveTextWidth = ;
self.position = BadgePositionTopRight;
self.font = [UIFont systemFontOfSize:.f];
self.textColor = [UIColor whiteColor];
self.badgeColor = [UIColor redColor];
} return self;
} - (void)makeEffect { // 标签
self.label = [[UILabel alloc] init];
self.label.textColor = self.textColor;
self.label.textAlignment = NSTextAlignmentCenter;
self.label.font = self.font;
[self addSubview:self.label]; // 背景色
self.backgroundColor = self.badgeColor;
self.width = self.fixedHeight;
self.height = self.fixedHeight;
self.layer.cornerRadius = self.fixedHeight / .f;
self.layer.masksToBounds = YES; [_contentView addSubview:self];
} - (void)setBadgeValue:(NSString *)badgeValue animated:(BOOL)animated { _badgeValue = badgeValue; // 是否执行动画
if (animated) { [UIView animateWithDuration:0.15f animations:^{ self.alpha = badgeValue.length == ? : ;
}]; } else { self.alpha = badgeValue.length == ? : ;
} // 如果值为空,则不执行后续操作
if (badgeValue.length <= ) { return;
} // 设置文本
self.label.text = badgeValue;
[self.label sizeToFit]; // 更新尺寸
if (self.label.width + self.sensitiveTextWidth > self.width) { self.width += self.sensitiveWidth; } else { self.width = self.fixedHeight;
} // 更新文本尺寸
self.label.center = self.middlePoint; // 根据位置更新尺寸
CGFloat offset = self.fixedHeight / .f;
self.position == BadgePositionCenterLeft ? self.left = -offset, self.centerY = self.contentView.middleY : ;
self.position == BadgePositionCenterRight ? self.left = self.contentView.width - offset, self.centerY = self.contentView.middleY : ; self.position == BadgePositionTopLeft ? self.left = -offset, self.y = -offset : ;
self.position == BadgePositionTopRight ? self.top = -offset, self.left = self.contentView.width - offset : ; self.position == BadgePositionBottomLeft ? self.left = -offset, self.top = self.contentView.height - offset : ;
self.position == BadgePositionBottomRight ? self.left = self.contentView.width - offset, self.top = self.contentView.height - offset : ;
} - (void)setBadgeValue:(NSString *)badgeValue { [self setBadgeValue:badgeValue animated:NO];
} @end

BadgeValueView的更多相关文章

  1. 自定义按钮设置BadgeNumber

    TabbarButton.h @interface TabbarButton : UIButton @property (nonatomic, strong) UIButton *badgeValue ...

随机推荐

  1. JavaScript——HashMap实现

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接博客园蜗牛 cnblogs.com\tdws . 首先提供一种获取hashCode的方法,是一种比较受欢迎的方式,该方法参照了一位园友的 ...

  2. activeMQ安全配置及常见问题解决

    https://blog.csdn.net/dandan2zhuzhu/article/details/78461872

  3. 026 Spark 的官网(版本为1.6.1的总官网)

    1. 多多读官网,所有的只知识点都可以从上面的总纲中查到.

  4. 013 jquery中关于表格行的增删问题

    1.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  5. valgrind 内存调试工具

    一.valgrind 是运行在linux系统下的内存调试工具,支持很多对象:memcheck.addrcheck.cachegrind.Massif.helgrind.Callgrind等.使用val ...

  6. Java参数传值?or传引用?

    O'Reilly's Javain a Nutshell by David Flanagan (see Resources) puts it best: "javamanipulates o ...

  7. 006.MySQL双主-Master02可用配置

    [root@Master02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  8. 007.SMB其他应用

    一 目录权限 系统权限需要对共享目录生效 samba服务器权限也会对共享目录生效 当用户过多权限交叉的时候,建议使用系统权限控制共享目录权限,而不建议采用samba权限来控制 例如: [work] p ...

  9. MySQL Binlog 介绍

    Binlog 简介 MySQL中一般有以下几种日志: 日志类型 写入日志的信息 错误日志 记录在启动,运行或停止mysqld时遇到的问题 通用查询日志 记录建立的客户端连接和执行的语句 二进制日志 记 ...

  10. codevs 水过 骑马修栅栏

    [问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...