mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Improve tag transition animation
This commit is contained in:
parent
8479dd4a6e
commit
fa17676a5a
1 changed files with 33 additions and 0 deletions
|
|
@ -2691,6 +2691,13 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||
)))
|
||||
}
|
||||
|
||||
var previousHeaderNodeFrames: [(ListViewItemHeaderNode, CGRect)] = []
|
||||
if animateFullTransition {
|
||||
for (_, itemHeaderNode) in self.itemHeaderNodes {
|
||||
previousHeaderNodeFrames.append((itemHeaderNode, itemHeaderNode.frame))
|
||||
}
|
||||
}
|
||||
|
||||
var takenPreviousNodes = Set<ListViewItemNode>()
|
||||
for operation in operations {
|
||||
if case let .InsertNode(_, _, _, node, _, _) = operation {
|
||||
|
|
@ -3609,6 +3616,14 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||
headerNodesTransition.0.animatePositionAdditive(node: topItemOverscrollBackground, offset: CGPoint(x: 0.0, y: -headerNodesTransition.2))
|
||||
}
|
||||
|
||||
if animateFullTransition {
|
||||
for (previousHeaderNode, previousFrame) in previousHeaderNodeFrames {
|
||||
if previousHeaderNode.supernode === self {
|
||||
previousHeaderNode.layer.animatePosition(from: CGPoint(x: 0.0, y: previousFrame.minY - previousHeaderNode.frame.minY), to: CGPoint(), duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, additive: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.setNeedsAnimations()
|
||||
|
||||
self.updateVisibleContentOffset()
|
||||
|
|
@ -3623,6 +3638,24 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||
self.updateItemHeaders(leftInset: listInsets.left, rightInset: listInsets.right, synchronousLoad: synchronousLoads, transition: headerNodesTransition, animateInsertion: animated || !requestItemInsertionAnimationsIndices.isEmpty)
|
||||
self.updateItemNodesVisibilities(onlyPositive: deferredUpdateVisible)
|
||||
|
||||
if animateFullTransition {
|
||||
for (_, headerNode) in self.itemHeaderNodes {
|
||||
var found = false
|
||||
for (previousHeaderNode, previousFrame) in previousHeaderNodeFrames {
|
||||
if previousHeaderNode === headerNode {
|
||||
found = true
|
||||
if previousHeaderNode.supernode === self {
|
||||
previousHeaderNode.layer.animatePosition(from: CGPoint(x: 0.0, y: previousFrame.minY - previousHeaderNode.frame.minY), to: CGPoint(), duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring, additive: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
headerNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
|
||||
headerNode.layer.animateScale(from: 0.7, to: 1.0, duration: 0.3, timingFunction: kCAMediaTimingFunctionSpring)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if animated {
|
||||
self.setNeedsAnimations()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue