99 lines
2.6 KiB
Swift
99 lines
2.6 KiB
Swift
|
|
//
|
|||
|
|
// BadgeView.swift
|
|||
|
|
// LegendTeam
|
|||
|
|
//
|
|||
|
|
// Created by 梁博 on 16/12/21.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
import UIKit
|
|||
|
|
|
|||
|
|
class BadgeView: UIView {
|
|||
|
|
/// 是否显示为小红点,默认false
|
|||
|
|
public var onlyShowPoint = false
|
|||
|
|
/// 是否超过99 只显示... 默认false
|
|||
|
|
public var showMax99 = false
|
|||
|
|
/// 显示红点数值,设置为0会自动隐藏
|
|||
|
|
public var badgeValue = 0 {
|
|||
|
|
didSet {
|
|||
|
|
reloadBadge()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// 显示为红点的时候的宽高 默认 8
|
|||
|
|
public var pointWidth: CGFloat = 8
|
|||
|
|
/// 字体大小 默认
|
|||
|
|
public var badgeFont: UIFont = .t.tnmxs
|
|||
|
|
|
|||
|
|
private var leftPadding: CGFloat = 4
|
|||
|
|
private var rightPadding: CGFloat = 4
|
|||
|
|
private let defaultBgColor = UIColor.c.cin
|
|||
|
|
private let defaultTextColor = UIColor.white
|
|||
|
|
private let contentLabel = UILabel()
|
|||
|
|
|
|||
|
|
override init(frame: CGRect) {
|
|||
|
|
super.init(frame: frame)
|
|||
|
|
|
|||
|
|
setupUI()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private func setupUI() {
|
|||
|
|
isUserInteractionEnabled = false
|
|||
|
|
backgroundColor = defaultBgColor
|
|||
|
|
layer.masksToBounds = true
|
|||
|
|
|
|||
|
|
snp.makeConstraints { make in
|
|||
|
|
make.width.greaterThanOrEqualTo(snp.height)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
addSubview(contentLabel)
|
|||
|
|
contentLabel.textColor = defaultTextColor
|
|||
|
|
contentLabel.font = badgeFont
|
|||
|
|
contentLabel.textAlignment = .center
|
|||
|
|
contentLabel.snp.makeConstraints { make in
|
|||
|
|
make.edges.equalToSuperview()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private func reloadBadge() {
|
|||
|
|
isHidden = false
|
|||
|
|
contentLabel.isHidden = false
|
|||
|
|
|
|||
|
|
if badgeValue == 0 {
|
|||
|
|
isHidden = true
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if onlyShowPoint {
|
|||
|
|
contentLabel.isHidden = true
|
|||
|
|
contentLabel.snp.remakeConstraints { make in
|
|||
|
|
make.edges.equalToSuperview()
|
|||
|
|
make.size.equalTo(CGSize(width: pointWidth, height: pointWidth))
|
|||
|
|
}
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if showMax99 && badgeValue > 99 {
|
|||
|
|
contentLabel.text = "···"
|
|||
|
|
} else {
|
|||
|
|
contentLabel.text = String(badgeValue)
|
|||
|
|
}
|
|||
|
|
contentLabel.snp.remakeConstraints { make in
|
|||
|
|
make.leading.equalTo(self).offset(leftPadding)
|
|||
|
|
make.trailing.equalTo(self).offset(-rightPadding)
|
|||
|
|
make.width.greaterThanOrEqualTo(6)
|
|||
|
|
make.top.bottom.equalTo(self)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
override func layoutSubviews() {
|
|||
|
|
super.layoutSubviews()
|
|||
|
|
if bounds.size.width > 0 {
|
|||
|
|
layer.cornerRadius = bounds.size.height * 0.5
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
required init?(coder: NSCoder) {
|
|||
|
|
fatalError("init(coder:) has not been implemented")
|
|||
|
|
}
|
|||
|
|
}
|