77 lines
2.6 KiB
Swift
77 lines
2.6 KiB
Swift
//
|
||
// EPRadioButton.swift
|
||
// Crush
|
||
//
|
||
// Created by Leon on 2025/7/25.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
enum EPRadioButtonStyle {
|
||
/// 圆圈中带勾,未选中时也带勾
|
||
case checkIn
|
||
/// 空圆圈 + 带勾圆圈
|
||
case checkEmpty
|
||
}
|
||
|
||
class EPRadioButton: CLButton {
|
||
|
||
// MARK: - Initialization
|
||
override init(frame: CGRect) {
|
||
super.init(frame: frame)
|
||
contentMode = .center
|
||
setContentCompressionResistancePriority(.init(760), for: .horizontal)
|
||
setContentCompressionResistancePriority(.init(760), for: .vertical)
|
||
setupStyle(.round)
|
||
touchAreaInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
|
||
}
|
||
|
||
|
||
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
// MARK: - Public Methods
|
||
/// 标准:比较通用的圆或方形
|
||
func setupStyle(_ radius: IconButtonRadius) {
|
||
switch radius {
|
||
case .round:
|
||
setImage(nil, for: .normal)
|
||
setImage(UIImage(named: "checkmark_tick"), for: .selected)
|
||
|
||
case .rectangle:
|
||
// ⚠️这两张图片没有
|
||
setImage(UIImage(named: "gamer_game_m_unselected"), for: .normal)
|
||
setImage(UIImage(named: "gamer_game_m_selected"), for: .selected)
|
||
touchAreaInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
|
||
default:
|
||
break
|
||
}
|
||
}
|
||
/// 高级:特别模式,样式不同,用在不同地方(一般是定制)
|
||
func setupRadioStyle(_ style: EPRadioButtonStyle) {
|
||
switch style {
|
||
case .checkIn:
|
||
let normalImage = MWIconFont.image(fromIcon: .select, size: CGSize(width: 14.4, height: 14.4), color: .c.ctpd)
|
||
let selectedImage = MWIconFont.image(fromIcon: .select, size: CGSize(width: 14.4, height: 14.4), color: .c.ctpn)
|
||
setImage(normalImage, for: .normal)
|
||
setImage(selectedImage, for: .selected)
|
||
|
||
let normalBg = UIImage.circleImage(withColor: .c.csed, bounds: CGRect(x: 0, y: 0, width: 24, height: 24))
|
||
let selectedBg = UIImage.circleImage(withColor: .c.cpn, bounds: CGRect(x: 0, y: 0, width: 24, height: 24))
|
||
setBackgroundImage(normalBg, for: .normal)
|
||
setBackgroundImage(selectedBg, for: .selected)
|
||
case .checkEmpty:
|
||
setImage(UIImage(named: "checkmark_tick_light"), for: .normal)
|
||
setImage(UIImage(named: "checkmark_tick"), for: .selected)
|
||
}
|
||
}
|
||
|
||
override var isSelected: Bool {
|
||
didSet {
|
||
super.isSelected = isSelected
|
||
}
|
||
}
|
||
}
|