Optimize node affinity assignment

This commit is contained in:
Ali 2022-04-23 00:23:41 +04:00
parent 8eed4574aa
commit cd6da9c8aa

View File

@ -2502,6 +2502,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
let lowestNodeToInsertBelow = self.lowestNodeToInsertBelow()
var hadInserts = false
var hadChangesToItemNodes = false
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)
hadInserts = true
hadChangesToItemNodes = true
if let _ = updatedPreviousFrame {
if let itemNode = self.reorderNode?.itemNode, itemNode.supernode == self {
self.insertSubnode(node, belowSubnode: itemNode)
@ -2572,6 +2574,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
var previousLayout: ListViewItemNodeLayout?
let referenceNode = referenceNodeObject.syncWith({ $0 })
hadChangesToItemNodes = true
for (node, previousFrame) in previousApparentFrames {
if node === referenceNode {
@ -2605,6 +2608,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
if let index = node.index {
if let mapped = mapping[index] {
node.index = mapped
hadChangesToItemNodes = true
}
}
}
@ -2637,6 +2641,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
}
self.removeItemNodeAtIndex(index)
hadChangesToItemNodes = true
case let .UpdateLayout(index, layout, apply):
let node = self.itemNodes[index]
@ -2749,6 +2754,10 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
}
}
if hadChangesToItemNodes {
self.assignHeaderSpaceAffinities()
}
if self.debugInfo {
//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 lowerDisplayBound = self.visibleSize.height - self.insets.bottom
var visibleHeaderNodes = Set<VisibleHeaderNodeId>()
var visibleHeaderNodes: [VisibleHeaderNodeId] = []
let flashing = self.headerItemsAreFlashing()
@ -3483,7 +3492,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
stickLocationDistance = lowerBound - headerFrame.maxY
stickLocationDistanceFactor = max(0.0, min(1.0, stickLocationDistance / itemHeaderHeight))
}
visibleHeaderNodes.insert(id)
visibleHeaderNodes.append(id)
let initialHeaderNodeAlpha = self.itemHeaderNodesAlpha
let headerNode: ListViewItemHeaderNode
@ -3659,7 +3668,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
}
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) {
headerNode.removeFromSupernode()
}