Fix spring animation

This commit is contained in:
Ali
2021-11-20 17:58:30 +04:00
parent e45bad1616
commit 68986f9e5b
3 changed files with 16 additions and 6 deletions

View File

@@ -1135,6 +1135,11 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi
} }
self.reactionContextNodeIsAnimatingOut = true self.reactionContextNodeIsAnimatingOut = true
reactionContextNode.willAnimateOutToReaction(value: value)
self.animateOut(result: .default, completion: {
contentCompleted = true
intermediateCompletion()
})
reactionContextNode.animateOutToReaction(value: value, targetEmptyNode: targetEmptyNode, targetFilledNode: targetFilledNode, hideNode: hideNode, completion: { [weak self] in reactionContextNode.animateOutToReaction(value: value, targetEmptyNode: targetEmptyNode, targetFilledNode: targetFilledNode, hideNode: hideNode, completion: { [weak self] in
guard let strongSelf = self else { guard let strongSelf = self else {
return return
@@ -1144,10 +1149,6 @@ private final class ContextControllerNode: ViewControllerTracingNode, UIScrollVi
reactionCompleted = true reactionCompleted = true
intermediateCompletion() intermediateCompletion()
}) })
self.animateOut(result: .default, completion: {
contentCompleted = true
intermediateCompletion()
})
self.isUserInteractionEnabled = false self.isUserInteractionEnabled = false
} }

View File

@@ -151,7 +151,7 @@ public extension CALayer {
let animationGroup = CAAnimationGroup() let animationGroup = CAAnimationGroup()
var timeOffset = 0.0 var timeOffset = 0.0
for animation in animations { for animation in animations {
animation.beginTime = animation.beginTime + timeOffset animation.beginTime = self.convertTime(animation.beginTime, from: nil) + timeOffset
timeOffset += animation.duration / Double(animation.speed) timeOffset += animation.duration / Double(animation.speed)
} }
animationGroup.animations = animations animationGroup.animations = animations
@@ -217,7 +217,7 @@ public extension CALayer {
} }
if !delay.isZero { if !delay.isZero {
animation.beginTime = CACurrentMediaTime() + delay * UIView.animationDurationFactor() animation.beginTime = self.convertTime(CACurrentMediaTime(), from: nil) + delay * UIView.animationDurationFactor()
animation.fillMode = .both animation.fillMode = .both
} }

View File

@@ -528,6 +528,15 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate {
itemNode.layer.animateScale(from: 1.0, to: (targetSnapshotView.bounds.width * 0.5) / itemNode.bounds.width, duration: duration, removeOnCompletion: false) itemNode.layer.animateScale(from: 1.0, to: (targetSnapshotView.bounds.width * 0.5) / itemNode.bounds.width, duration: duration, removeOnCompletion: false)
} }
public func willAnimateOutToReaction(value: String) {
for itemNode in self.itemNodes {
if itemNode.item.reaction.rawValue != value {
continue
}
itemNode.isExtracted = true
}
}
public func animateOutToReaction(value: String, targetEmptyNode: ASDisplayNode, targetFilledNode: ASDisplayNode, hideNode: Bool, completion: @escaping () -> Void) { public func animateOutToReaction(value: String, targetEmptyNode: ASDisplayNode, targetFilledNode: ASDisplayNode, hideNode: Bool, completion: @escaping () -> Void) {
for itemNode in self.itemNodes { for itemNode in self.itemNodes {
if itemNode.item.reaction.rawValue != value { if itemNode.item.reaction.rawValue != value {