UI combo update

This commit is contained in:
Ali
2021-05-07 18:10:31 +04:00
parent a82d1351bd
commit a5f4d23489
31 changed files with 719 additions and 289 deletions

View File

@@ -234,11 +234,11 @@ private final class SemanticStatusNodeProgressTransition {
self.initialValue = initialValue
}
func valueAt(timestamp: Double, actualValue: CGFloat) -> CGFloat {
func valueAt(timestamp: Double, actualValue: CGFloat) -> (CGFloat, Bool) {
let duration = 0.2
var t = CGFloat((timestamp - self.beginTime) / duration)
t = min(1.0, max(0.0, t))
return t * actualValue + (1.0 - t) * self.initialValue
return (t * actualValue + (1.0 - t) * self.initialValue, t >= 1.0 - 0.001)
}
}
@@ -388,7 +388,11 @@ private final class SemanticStatusNodeProgressContext: SemanticStatusNodeStateCo
let resolvedValue: CGFloat?
if let value = self.value {
if let transition = self.transition {
resolvedValue = transition.valueAt(timestamp: timestamp, actualValue: value)
let (v, isCompleted) = transition.valueAt(timestamp: timestamp, actualValue: value)
resolvedValue = v
if isCompleted {
self.transition = nil
}
} else {
resolvedValue = value
}
@@ -400,12 +404,12 @@ private final class SemanticStatusNodeProgressContext: SemanticStatusNodeStateCo
func updateValue(value: CGFloat?) {
if value != self.value {
let previousValue = value
let previousValue = self.value
self.value = value
let timestamp = CACurrentMediaTime()
if let _ = value, let previousValue = previousValue {
if let transition = self.transition {
self.transition = SemanticStatusNodeProgressTransition(beginTime: timestamp, initialValue: transition.valueAt(timestamp: timestamp, actualValue: previousValue))
self.transition = SemanticStatusNodeProgressTransition(beginTime: timestamp, initialValue: transition.valueAt(timestamp: timestamp, actualValue: previousValue).0)
} else {
self.transition = SemanticStatusNodeProgressTransition(beginTime: timestamp, initialValue: previousValue)
}
@@ -509,7 +513,11 @@ private final class SemanticStatusNodeCheckContext: SemanticStatusNodeStateConte
let resolvedValue: CGFloat
if let transition = self.transition {
resolvedValue = transition.valueAt(timestamp: timestamp, actualValue: value)
let (v, isCompleted) = transition.valueAt(timestamp: timestamp, actualValue: value)
resolvedValue = v
if isCompleted {
self.transition = nil
}
} else {
resolvedValue = value
}