having badge indicator object for the buttonIcon
This commit is contained in:
parent
1646eb75dc
commit
95d638ebf4
@ -43,6 +43,11 @@ open class ButtonIcon: Control {
|
|||||||
case colorFill, media
|
case colorFill, media
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Enum used to describe the badge indicator direction of icon button determining the expand direction.
|
||||||
|
public enum ExpandDirection: String, CaseIterable {
|
||||||
|
case right, center, left
|
||||||
|
}
|
||||||
|
|
||||||
/// Enum used to describe the size of button icon.
|
/// Enum used to describe the size of button icon.
|
||||||
public enum Size: String, EnumSubset {
|
public enum Size: String, EnumSubset {
|
||||||
case large
|
case large
|
||||||
@ -67,6 +72,8 @@ open class ButtonIcon: Control {
|
|||||||
private var centerYConstraint: NSLayoutConstraint?
|
private var centerYConstraint: NSLayoutConstraint?
|
||||||
private var layoutGuideWidthConstraint: NSLayoutConstraint?
|
private var layoutGuideWidthConstraint: NSLayoutConstraint?
|
||||||
private var layoutGuideHeightConstraint: NSLayoutConstraint?
|
private var layoutGuideHeightConstraint: NSLayoutConstraint?
|
||||||
|
private var badgeIndicatorLeadingConstraint: NSLayoutConstraint?
|
||||||
|
private var badgeIndicatorBottomConstraint: NSLayoutConstraint?
|
||||||
private var currentIconName: Icon.Name? {
|
private var currentIconName: Icon.Name? {
|
||||||
if let selectedIconName {
|
if let selectedIconName {
|
||||||
return selectedIconName
|
return selectedIconName
|
||||||
@ -75,9 +82,31 @@ open class ButtonIcon: Control {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var badgeIndicatorOffset: CGPoint {
|
||||||
|
switch (size, kind) {
|
||||||
|
case (.small, .ghost):
|
||||||
|
return .init(x: 1, y: 0)
|
||||||
|
case (.large, .ghost):
|
||||||
|
return .init(x: 1, y: 1)
|
||||||
|
case (.small, .lowContrast), (.small, .highContrast):
|
||||||
|
return .init(x: 4, y: 4)
|
||||||
|
case (.large, .lowContrast), (.large, .highContrast):
|
||||||
|
return .init(x: 6, y: 6)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Public Properties
|
// MARK: - Public Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
|
|
||||||
|
///BadgeIndicator object used to render for the ButtonIcon.
|
||||||
|
open var badgeIndicator = BadgeIndicator().with {
|
||||||
|
$0.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
// $0.hideBorder = true
|
||||||
|
// $0.borderWidth = 0
|
||||||
|
$0.size = .small
|
||||||
|
}
|
||||||
|
|
||||||
/// Icon object used to render out the Icon for this ButtonIcon.
|
/// Icon object used to render out the Icon for this ButtonIcon.
|
||||||
open var icon = Icon().with { $0.isUserInteractionEnabled = false }
|
open var icon = Icon().with { $0.isUserInteractionEnabled = false }
|
||||||
|
|
||||||
@ -107,7 +136,13 @@ open class ButtonIcon: Control {
|
|||||||
|
|
||||||
/// If set to true, the button icon will not have a border.
|
/// If set to true, the button icon will not have a border.
|
||||||
open var hideBorder: Bool = true { didSet { setNeedsUpdate() } }
|
open var hideBorder: Bool = true { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
|
/// If provided, the badge indicator will present.
|
||||||
|
open var showBadge: Bool = false { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
|
/// If provided, the button icon will have selectable Icon.
|
||||||
|
open var selectable: Bool = false { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
/// Used to move the icon inside the button in both x and y axis.
|
/// Used to move the icon inside the button in both x and y axis.
|
||||||
open var iconOffset: CGPoint = .init(x: 0, y: 0) { didSet { setNeedsUpdate() } }
|
open var iconOffset: CGPoint = .init(x: 0, y: 0) { didSet { setNeedsUpdate() } }
|
||||||
|
|
||||||
@ -270,11 +305,16 @@ open class ButtonIcon: Control {
|
|||||||
|
|
||||||
//add the icon
|
//add the icon
|
||||||
addSubview(icon)
|
addSubview(icon)
|
||||||
|
addSubview(badgeIndicator)
|
||||||
|
badgeIndicator.isHidden = !showBadge
|
||||||
|
|
||||||
//determines the height/width of the icon
|
//determines the height/width of the icon
|
||||||
layoutGuideWidthConstraint = iconLayoutGuide.width(constant: size.containerSize)
|
layoutGuideWidthConstraint = iconLayoutGuide.width(constant: size.containerSize)
|
||||||
layoutGuideHeightConstraint = iconLayoutGuide.height(constant: size.containerSize)
|
layoutGuideHeightConstraint = iconLayoutGuide.height(constant: size.containerSize)
|
||||||
|
badgeIndicatorBottomConstraint = icon.centerYAnchor.constraint(equalTo: badgeIndicator.bottomAnchor)
|
||||||
|
badgeIndicatorLeadingConstraint = badgeIndicator.leadingAnchor.constraint(equalTo: icon.centerXAnchor)
|
||||||
|
badgeIndicatorBottomConstraint?.isActive = true
|
||||||
|
badgeIndicatorLeadingConstraint?.isActive = true
|
||||||
//pin layout guide
|
//pin layout guide
|
||||||
iconLayoutGuide
|
iconLayoutGuide
|
||||||
.pinTop()
|
.pinTop()
|
||||||
@ -300,6 +340,9 @@ open class ButtonIcon: Control {
|
|||||||
hideBorder = true
|
hideBorder = true
|
||||||
iconOffset = .init(x: 0, y: 0)
|
iconOffset = .init(x: 0, y: 0)
|
||||||
iconName = nil
|
iconName = nil
|
||||||
|
// selectableIconName = nil
|
||||||
|
showBadge = false
|
||||||
|
selectable = false
|
||||||
shouldUpdateView = true
|
shouldUpdateView = true
|
||||||
setNeedsUpdate()
|
setNeedsUpdate()
|
||||||
}
|
}
|
||||||
@ -318,6 +361,8 @@ open class ButtonIcon: Control {
|
|||||||
} else {
|
} else {
|
||||||
icon.reset()
|
icon.reset()
|
||||||
}
|
}
|
||||||
|
badgeIndicatorLeadingConstraint?.constant = badgeIndicatorOffset.x
|
||||||
|
badgeIndicatorBottomConstraint?.constant = badgeIndicatorOffset.y
|
||||||
setNeedsLayout()
|
setNeedsLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user