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 = 10;
self.fixedHeight = 20;
self.sensitiveTextWidth = 4;
self.position = BadgePositionTopRight;
self.font = [UIFont systemFontOfSize:12.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 / 2.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 == 0 ? 0 : 1;
}];
} else {
self.alpha = badgeValue.length == 0 ? 0 : 1;
}
// 如果值為空,則不執行後續操作
if (badgeValue.length <= 0) {
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 / 2.f;
self.position == BadgePositionCenterLeft ? self.left = -offset, self.centerY = self.contentView.middleY : 0;
self.position == BadgePositionCenterRight ? self.left = self.contentView.width - offset, self.centerY = self.contentView.middleY : 0;
self.position == BadgePositionTopLeft ? self.left = -offset, self.y = -offset : 0;
self.position == BadgePositionTopRight ? self.top = -offset, self.left = self.contentView.width - offset : 0;
self.position == BadgePositionBottomLeft ? self.left = -offset, self.top = self.contentView.height - offset : 0;
self.position == BadgePositionBottomRight ? self.left = self.contentView.width - offset, self.top = self.contentView.height - offset : 0;
}
- (void)setBadgeValue:(NSString *)badgeValue {
[self setBadgeValue:badgeValue animated:NO];
}
@end