修改车辆监控细节

This commit is contained in:
DDIsFriend
2023-12-28 13:35:21 +08:00
parent c8a5fe7450
commit 2ab5ee5cb4
8 changed files with 199 additions and 125 deletions

View File

@@ -11,25 +11,30 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
case bottom,top
}
public enum ExpandLevel {
case min,`default`,max
}
public struct PanGesValue {
public var from : PanGestureFromType = .bottom ///
public var minDisplayHeight : CGFloat = 0 ///
public var defaultDisplayHeight : CGFloat = 0 ///
public var maxDisplayHeight : CGFloat = 0 ///
public var criticalValue : CGFloat? ///
public var expandLevel : ExpandLevel = .min ///
///
public var from : PanGestureFromType = .bottom
///
public var minDisplayHeight : CGFloat = 0
///
public var defaultDisplayHeight : CGFloat = 0
///
public var maxDisplayHeight : CGFloat = 0
/// 0,1]
public var dragScale : CGFloat = 0.5
///
public var expandLevel : ExpandLevel = .min
internal var translationY : CGFloat = 0
internal var currentY : CGFloat = 0
}
public var panGesValue = PanGesValue.init()
///
/// - Parameter target: target
public init() {
@@ -43,7 +48,7 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
}
@objc fileprivate func panGesAction(ges: DDUIPanGestureRecognizer) {
getBaseValue(duration: 0.1) { viewFrame, minY, defaultY, maxY, currentY in
baseAction(duration: 0.1) { viewFrame, minY, defaultY, maxY, currentY in
switch ges.state {
case .began:
currentY = viewFrame.origin.y
@@ -57,15 +62,22 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
currentY = (viewFrame.origin.y) + deltaY
break
case .ended:
///
let criticalValue = ges.panGesValue.criticalValue ?? (ges.panGesValue.maxDisplayHeight / 2)
let criticalY = maxY - criticalValue
if ges.panGesValue.currentY < criticalY {
currentY = minY
}else{
/// currentYmaxYdefaultY
let criticalYBetweenOfMaxYAndDefaultY = maxY - (maxY - defaultY) * ges.panGesValue.dragScale
if ges.panGesValue.currentY <= maxY && ges.panGesValue.currentY > criticalYBetweenOfMaxYAndDefaultY {
currentY = maxY
}else if ges.panGesValue.currentY > defaultY && ges.panGesValue.currentY <= criticalYBetweenOfMaxYAndDefaultY {
currentY = defaultY
}
/// currentYminYdefaultY
let criticalYBetweenOfMinYAndDefaultY = defaultY - (defaultY - minY) * ges.panGesValue.dragScale
if ges.panGesValue.currentY <= defaultY && ges.panGesValue.currentY > criticalYBetweenOfMinYAndDefaultY {
currentY = defaultY
}else if ges.panGesValue.currentY > minY && ges.panGesValue.currentY <= criticalYBetweenOfMinYAndDefaultY {
currentY = minY
}
ges.panGesValue.translationY = 0
break
default:
@@ -75,7 +87,7 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
}
}
func getBaseValue(duration: TimeInterval,baseValueHandler: (_ viewFrame: CGRect, _ minY: CGFloat, _ defaultY: CGFloat, _ maxY: CGFloat,_ currentY: inout CGFloat) -> Void) {
func baseAction(duration: TimeInterval,baseActionHandler: (_ viewFrame: CGRect, _ minY: CGFloat, _ defaultY: CGFloat, _ maxY: CGFloat,_ currentY: inout CGFloat) -> Void) {
guard let superView = view?.superview else {
assert(false,"父类都没有,拖什么拖")
return
@@ -110,7 +122,7 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
var currentY : CGFloat = 0.0
///
baseValueHandler(viewFrame,minY,defaultY,maxY,&currentY)
baseActionHandler(viewFrame,minY,defaultY,maxY,&currentY)
/// y
if currentY < minY {
@@ -122,8 +134,10 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
return
}
/// currentY
panGesValue.currentY = currentY
/// expandLevel
if panGesValue.currentY == minY {
panGesValue.expandLevel = .max
}else if panGesValue.currentY == maxY {
@@ -142,7 +156,7 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
}
public func expand(_ expand: ExpandLevel) {
getBaseValue(duration: 0.25) { viewFrame, minY, defaultY, maxY, currentY in
baseAction(duration: 0.25) { viewFrame, minY, defaultY, maxY, currentY in
if expand == .max {
currentY = minY
}else if expand == .min {
@@ -153,14 +167,3 @@ open class DDUIPanGestureRecognizer : UIPanGestureRecognizer {
}
}
}
extension UIView {
public func addPanGesture(from: DDUIPanGestureRecognizer.PanGestureFromType, minDisplayHeight: CGFloat, maxDisplayHeight: CGFloat, criticalValue: CGFloat? = nil) {
let pan = DDUIPanGestureRecognizer.init()
pan.panGesValue.from = from
pan.panGesValue.minDisplayHeight = minDisplayHeight
pan.panGesValue.maxDisplayHeight = maxDisplayHeight
pan.panGesValue.criticalValue = criticalValue
addGestureRecognizer(pan)
}
}