mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Optimize node affinity assignment
This commit is contained in:
parent
8eed4574aa
commit
cd6da9c8aa
@ -2502,6 +2502,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
|
|
||||||
let lowestNodeToInsertBelow = self.lowestNodeToInsertBelow()
|
let lowestNodeToInsertBelow = self.lowestNodeToInsertBelow()
|
||||||
var hadInserts = false
|
var hadInserts = false
|
||||||
|
var hadChangesToItemNodes = false
|
||||||
|
|
||||||
let visibleBounds = CGRect(origin: CGPoint(), size: self.visibleSize)
|
let visibleBounds = CGRect(origin: CGPoint(), size: self.visibleSize)
|
||||||
|
|
||||||
@ -2527,6 +2528,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
|
|
||||||
self.insertNodeAtIndex(animated: nodeAnimated, animateAlpha: animateAlpha, forceAnimateInsertion: forceAnimateInsertion, previousFrame: updatedPreviousFrame, nodeIndex: index, offsetDirection: offsetDirection, node: node, layout: layout, apply: apply, timestamp: timestamp, listInsets: listInsets, visibleBounds: visibleBounds)
|
self.insertNodeAtIndex(animated: nodeAnimated, animateAlpha: animateAlpha, forceAnimateInsertion: forceAnimateInsertion, previousFrame: updatedPreviousFrame, nodeIndex: index, offsetDirection: offsetDirection, node: node, layout: layout, apply: apply, timestamp: timestamp, listInsets: listInsets, visibleBounds: visibleBounds)
|
||||||
hadInserts = true
|
hadInserts = true
|
||||||
|
hadChangesToItemNodes = true
|
||||||
if let _ = updatedPreviousFrame {
|
if let _ = updatedPreviousFrame {
|
||||||
if let itemNode = self.reorderNode?.itemNode, itemNode.supernode == self {
|
if let itemNode = self.reorderNode?.itemNode, itemNode.supernode == self {
|
||||||
self.insertSubnode(node, belowSubnode: itemNode)
|
self.insertSubnode(node, belowSubnode: itemNode)
|
||||||
@ -2572,6 +2574,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
var previousLayout: ListViewItemNodeLayout?
|
var previousLayout: ListViewItemNodeLayout?
|
||||||
|
|
||||||
let referenceNode = referenceNodeObject.syncWith({ $0 })
|
let referenceNode = referenceNodeObject.syncWith({ $0 })
|
||||||
|
hadChangesToItemNodes = true
|
||||||
|
|
||||||
for (node, previousFrame) in previousApparentFrames {
|
for (node, previousFrame) in previousApparentFrames {
|
||||||
if node === referenceNode {
|
if node === referenceNode {
|
||||||
@ -2605,6 +2608,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
if let index = node.index {
|
if let index = node.index {
|
||||||
if let mapped = mapping[index] {
|
if let mapped = mapping[index] {
|
||||||
node.index = mapped
|
node.index = mapped
|
||||||
|
hadChangesToItemNodes = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2637,6 +2641,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.removeItemNodeAtIndex(index)
|
self.removeItemNodeAtIndex(index)
|
||||||
|
hadChangesToItemNodes = true
|
||||||
case let .UpdateLayout(index, layout, apply):
|
case let .UpdateLayout(index, layout, apply):
|
||||||
let node = self.itemNodes[index]
|
let node = self.itemNodes[index]
|
||||||
|
|
||||||
@ -2749,6 +2754,10 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if hadChangesToItemNodes {
|
||||||
|
self.assignHeaderSpaceAffinities()
|
||||||
|
}
|
||||||
|
|
||||||
if self.debugInfo {
|
if self.debugInfo {
|
||||||
//print("replay after \(self.itemNodes.map({"\($0.index) \(unsafeAddressOf($0))"}))")
|
//print("replay after \(self.itemNodes.map({"\($0.index) \(unsafeAddressOf($0))"}))")
|
||||||
}
|
}
|
||||||
@ -3459,7 +3468,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
|
|
||||||
let upperDisplayBound = self.headerInsets.top
|
let upperDisplayBound = self.headerInsets.top
|
||||||
let lowerDisplayBound = self.visibleSize.height - self.insets.bottom
|
let lowerDisplayBound = self.visibleSize.height - self.insets.bottom
|
||||||
var visibleHeaderNodes = Set<VisibleHeaderNodeId>()
|
var visibleHeaderNodes: [VisibleHeaderNodeId] = []
|
||||||
|
|
||||||
let flashing = self.headerItemsAreFlashing()
|
let flashing = self.headerItemsAreFlashing()
|
||||||
|
|
||||||
@ -3483,7 +3492,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
stickLocationDistance = lowerBound - headerFrame.maxY
|
stickLocationDistance = lowerBound - headerFrame.maxY
|
||||||
stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight))
|
stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight))
|
||||||
}
|
}
|
||||||
visibleHeaderNodes.insert(id)
|
visibleHeaderNodes.append(id)
|
||||||
|
|
||||||
let initialHeaderNodeAlpha = self.itemHeaderNodesAlpha
|
let initialHeaderNodeAlpha = self.itemHeaderNodesAlpha
|
||||||
let headerNode: ListViewItemHeaderNode
|
let headerNode: ListViewItemHeaderNode
|
||||||
@ -3659,7 +3668,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
}
|
}
|
||||||
|
|
||||||
let currentIds = Set(self.itemHeaderNodes.keys)
|
let currentIds = Set(self.itemHeaderNodes.keys)
|
||||||
for id in currentIds.subtracting(visibleHeaderNodes) {
|
for id in currentIds.subtracting(Set(visibleHeaderNodes)) {
|
||||||
if let headerNode = self.itemHeaderNodes.removeValue(forKey: id) {
|
if let headerNode = self.itemHeaderNodes.removeValue(forKey: id) {
|
||||||
headerNode.removeFromSupernode()
|
headerNode.removeFromSupernode()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user