Files
divkit/client/ios/DivKit/Extensions/DivAnimationExtensions.swift
babaevmm 099c02b37d add tooltip animation properties
commit_hash:1a2c686df21e57ae95ad975dcaf1c41ab0fcdabb
2025-03-12 02:33:55 +03:00

55 lines
1.7 KiB
Swift

import Foundation
import LayoutKit
import VGSL
extension DivAnimation {
func resolveAnimations(
expressionResolver: ExpressionResolver,
animationNameToKind: (DivAnimation.Name) -> TransitioningAnimation.Kind?,
defaultStartValue: (TransitioningAnimation.Kind) -> Double,
defaultEndValue: (TransitioningAnimation.Kind) -> Double,
invertResolvedStartAndEnd: Bool = false
) -> [TransitioningAnimation] {
let name = resolveName(expressionResolver) ?? .noAnimation
if name == .set {
return (items ?? []).flatMap {
$0.resolveAnimations(
expressionResolver: expressionResolver,
animationNameToKind: animationNameToKind,
defaultStartValue: defaultStartValue,
defaultEndValue: defaultEndValue,
invertResolvedStartAndEnd: invertResolvedStartAndEnd
)
}
}
guard let kind = animationNameToKind(name) else {
return []
}
let originalStart = self.resolveStartValue(expressionResolver)
let originalEnd = self.resolveEndValue(expressionResolver)
let startValue: Double?
let endValue: Double?
if invertResolvedStartAndEnd {
startValue = originalEnd
endValue = originalStart
} else {
startValue = originalStart
endValue = originalEnd
}
let animation = TransitioningAnimation(
kind: kind,
start: startValue ?? defaultStartValue(kind),
end: endValue ?? defaultEndValue(kind),
duration: TimeInterval(milliseconds: resolveDuration(expressionResolver)),
delay: TimeInterval(milliseconds: resolveStartDelay(expressionResolver)),
timingFunction: resolveInterpolator(expressionResolver).asTimingFunction()
)
return [animation]
}
}