Merge branch 'update/icon-tooltip' into 'develop'
updated for buttongroup See merge request BPHV_MIPS/vds_ios!62
This commit is contained in:
commit
749f70c35e
@ -71,11 +71,6 @@ open class ButtonGroup: View, UICollectionViewDataSource, UICollectionViewDelega
|
||||
//--------------------------------------------------
|
||||
// MARK: - Private Properties
|
||||
//--------------------------------------------------
|
||||
private let lineSpacing: CGFloat = 12.0
|
||||
private let itemSpacing: CGFloat = 16.0
|
||||
private let estimatedCellHeight: CGFloat = 40.0
|
||||
private let estimatedCellWidth: CGFloat = 150.0
|
||||
|
||||
fileprivate lazy var positionLayout = ButtonGroupPositionLayout().with {
|
||||
$0.position = .center
|
||||
$0.delegate = self
|
||||
@ -173,8 +168,12 @@ open class ButtonGroup: View, UICollectionViewDataSource, UICollectionViewDelega
|
||||
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionViewCell", for: indexPath) as? ButtonGroupCollectionViewCell else { return UICollectionViewCell() }
|
||||
cell.subviews.forEach { $0.removeFromSuperview() }
|
||||
cell.addSubview(button)
|
||||
cell.buttonable = button
|
||||
button.pinToSuperView()
|
||||
if hasDebugBorder {
|
||||
cell.addDebugBorder()
|
||||
} else {
|
||||
cell.removeDebugBorder()
|
||||
}
|
||||
return cell
|
||||
}
|
||||
|
||||
@ -194,5 +193,4 @@ open class ButtonGroup: View, UICollectionViewDataSource, UICollectionViewDelega
|
||||
buttons[indexPath.row]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -9,32 +9,12 @@ import Foundation
|
||||
import UIKit
|
||||
|
||||
|
||||
/// Cell is needed since the buttonable hitArea "can" be outside of it's container rectangle
|
||||
public class ButtonGroupCollectionViewCell: UICollectionViewCell {
|
||||
|
||||
var buttonable: Buttonable?
|
||||
|
||||
open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||
guard let buttonable else { return nil }
|
||||
|
||||
// Create a minimumHitArea variable with a value that represents the minimum size of the hit area you want to create for the button.
|
||||
let minimumHitArea = CGSize(width: buttonable.intrinsicContentSize.width, height: 44)
|
||||
|
||||
// Create a new hitFrame variable that is the same size as the minimumHitArea variable, but is centered on the button's frame.
|
||||
let hitFrame = CGRect(
|
||||
x: self.bounds.midX - minimumHitArea.width / 2,
|
||||
y: self.bounds.midY - minimumHitArea.height / 2,
|
||||
width: minimumHitArea.width,
|
||||
height: minimumHitArea.height
|
||||
)
|
||||
|
||||
// If the point that was passed to the hitTest(_:with:) method is within the hitFrame, return the button itself. This will cause the button to handle the touch event.
|
||||
if hitFrame.contains(point) {
|
||||
return buttonable
|
||||
}
|
||||
|
||||
// If the point is not within the hitFrame, return nil. This will cause the touch event to be handled by another view.
|
||||
return nil
|
||||
public class ButtonGroupCollectionViewCell: UICollectionViewCell {}
|
||||
|
||||
extension ButtonGroupCollectionViewCell: AppleGuidlinesTouchable {
|
||||
|
||||
override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
|
||||
Self.acceptablyOutsideBounds(point: point, bounds: bounds)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -118,41 +118,62 @@ extension UIView {
|
||||
|
||||
}
|
||||
|
||||
|
||||
extension UIView {
|
||||
|
||||
internal func removeDebugBorder() {
|
||||
layer.sublayers?.forEach({ layer in
|
||||
if layer.name?.hasPrefix("debug") ?? false {
|
||||
layer.removeFromSuperlayer()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
internal func addDebugBorder(color: UIColor = .red) {
|
||||
//ensure you remove existing
|
||||
removeDebugBorder()
|
||||
|
||||
//add bounds border
|
||||
let borderLayer = CALayer()
|
||||
borderLayer.name = "debugAreaLayer"
|
||||
borderLayer.frame = bounds
|
||||
borderLayer.bounds = bounds
|
||||
borderLayer.borderWidth = VDSFormControls.widthBorder
|
||||
borderLayer.borderColor = color.cgColor
|
||||
layer.addSublayer(borderLayer)
|
||||
|
||||
//add touchborder if applicable
|
||||
if type(of: self) is AppleGuidlinesTouchable.Type {
|
||||
let faultToleranceX: CGFloat = max((45 - bounds.size.width) / 2.0, 0)
|
||||
let faultToleranceY: CGFloat = max((45 - bounds.size.height) / 2.0, 0)
|
||||
|
||||
let touchableAreaPath = UIBezierPath(rect: bounds.insetBy(dx: -faultToleranceX, dy: -faultToleranceY))
|
||||
let touchLayer = CAShapeLayer()
|
||||
touchLayer.path = touchableAreaPath.cgPath
|
||||
touchLayer.strokeColor = color.cgColor
|
||||
touchLayer.fillColor = UIColor.clear.cgColor
|
||||
touchLayer.lineWidth = VDSFormControls.widthBorder
|
||||
touchLayer.opacity = 1.0
|
||||
touchLayer.name = "debugTouchableAreaLayer"
|
||||
touchLayer.zPosition = 100
|
||||
touchLayer.frame = bounds
|
||||
touchLayer.bounds = bounds
|
||||
layer.addSublayer(touchLayer)
|
||||
}
|
||||
}
|
||||
|
||||
public var hasDebugBorder: Bool {
|
||||
guard let layers = layer.sublayers else { return false }
|
||||
return layers.compactMap{$0.name}.filter{$0.hasPrefix("debug")}.count > 0
|
||||
}
|
||||
|
||||
public func debugBorder(show shouldShow: Bool = true, color: UIColor = .red) {
|
||||
if shouldShow {
|
||||
let borderLayer = CALayer()
|
||||
borderLayer.name = "debugAreaLayer"
|
||||
borderLayer.frame = bounds
|
||||
borderLayer.bounds = bounds
|
||||
borderLayer.borderWidth = VDSFormControls.widthBorder
|
||||
borderLayer.borderColor = color.cgColor
|
||||
layer.addSublayer(borderLayer)
|
||||
|
||||
if type(of: self) is AppleGuidlinesTouchable.Type {
|
||||
let faultToleranceX: CGFloat = max((45 - bounds.size.width) / 2.0, 0)
|
||||
let faultToleranceY: CGFloat = max((45 - bounds.size.height) / 2.0, 0)
|
||||
|
||||
let touchableAreaPath = UIBezierPath(rect: bounds.insetBy(dx: -faultToleranceX, dy: -faultToleranceY))
|
||||
let touchLayer = CAShapeLayer()
|
||||
touchLayer.path = touchableAreaPath.cgPath
|
||||
touchLayer.strokeColor = color.cgColor
|
||||
touchLayer.fillColor = UIColor.clear.cgColor
|
||||
touchLayer.lineWidth = VDSFormControls.widthBorder
|
||||
touchLayer.opacity = 1.0
|
||||
touchLayer.name = "debugTouchableAreaLayer"
|
||||
touchLayer.zPosition = 100
|
||||
touchLayer.frame = bounds
|
||||
touchLayer.bounds = bounds
|
||||
layer.addSublayer(touchLayer)
|
||||
}
|
||||
addDebugBorder(color: color)
|
||||
} else {
|
||||
layer.sublayers?.forEach({ layer in
|
||||
if layer.name?.hasPrefix("debug") ?? false {
|
||||
layer.removeFromSuperlayer()
|
||||
}
|
||||
})
|
||||
removeDebugBorder()
|
||||
}
|
||||
if let view = self as? Handlerable {
|
||||
view.updateView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user