mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Fix spring animation
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user