Various Fixes

This commit is contained in:
Ilya Laktyushin 2021-08-30 02:17:52 +03:00
parent 7f0501d2cb
commit c73cf2386d
3 changed files with 16 additions and 10 deletions

View File

@ -328,6 +328,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
private var reorderInProgress: Bool = false private var reorderInProgress: Bool = false
private var reorderingItemsCompleted: (() -> Void)? private var reorderingItemsCompleted: (() -> Void)?
private var reorderScrollStartTimestamp: Double? private var reorderScrollStartTimestamp: Double?
private var reorderScrollUpdateTimestamp: Double?
private var reorderLastTimestamp: Double? private var reorderLastTimestamp: Double?
public var reorderedItemHasShadow = true public var reorderedItemHasShadow = true
@ -570,7 +571,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
for i in 0 ..< self.itemNodes.count { for i in 0 ..< self.itemNodes.count {
if let itemNodeIndex = self.itemNodes[i].index, itemNodeIndex != reorderItemIndex { if let itemNodeIndex = self.itemNodes[i].index, itemNodeIndex != reorderItemIndex {
let itemFrame = self.itemNodes[i].apparentContentFrame let itemFrame = self.itemNodes[i].apparentContentFrame
// let itemOffset = itemFrame.midY
let offsetToMin = itemFrame.minY - verticalOffset let offsetToMin = itemFrame.minY - verticalOffset
let offsetToMax = itemFrame.maxY - verticalOffset let offsetToMax = itemFrame.maxY - verticalOffset
let deltaOffset: CGFloat let deltaOffset: CGFloat
@ -579,7 +580,6 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
} else { } else {
deltaOffset = offsetToMin deltaOffset = offsetToMin
} }
// let deltaOffset = min(itemFrame.minY - verticalOffset, itemFrame.maxY - verticalOffset)
if let (_, closestOffset) = closestIndex { if let (_, closestOffset) = closestIndex {
if abs(deltaOffset) < abs(closestOffset) { if abs(deltaOffset) < abs(closestOffset) {
closestIndex = (itemNodeIndex, deltaOffset) closestIndex = (itemNodeIndex, deltaOffset)
@ -590,7 +590,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
} }
} }
if let (closestIndexValue, offset) = closestIndex { if let (closestIndexValue, offset) = closestIndex {
//print("closest \(closestIndexValue) offset \(offset)") // print("closest \(closestIndexValue) offset \(offset)")
var toIndex: Int var toIndex: Int
if offset > 0 { if offset > 0 {
toIndex = closestIndexValue toIndex = closestIndexValue
@ -604,7 +604,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
} }
} }
if toIndex != reorderItemNode.index { if toIndex != reorderItemNode.index {
if let reorderLastTimestamp = self.reorderLastTimestamp, timestamp < reorderLastTimestamp + 0.3 { if let reorderLastTimestamp = self.reorderLastTimestamp, timestamp < reorderLastTimestamp + 0.2 {
return return
} }
if reorderNode.currentState?.0 != reorderItemIndex || reorderNode.currentState?.1 != toIndex { if reorderNode.currentState?.0 != reorderItemIndex || reorderNode.currentState?.1 != toIndex {
@ -4101,7 +4101,13 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
self.enqueueUpdateVisibleItems(synchronous: false) self.enqueueUpdateVisibleItems(synchronous: false)
} }
self.checkItemReordering() if scrollingForReorder {
if let reorderScrollUpdateTimestamp = self.reorderScrollUpdateTimestamp, timestamp < reorderScrollUpdateTimestamp + 0.05 {
return
}
self.reorderScrollUpdateTimestamp = timestamp
self.checkItemReordering(force: true)
}
} }
override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

View File

@ -47,7 +47,7 @@ public final class ListViewReorderingGestureRecognizer: UIGestureRecognizer {
private func startLongPressTimer() { private func startLongPressTimer() {
self.longPressTimer?.invalidate() self.longPressTimer?.invalidate()
let longPressTimer = SwiftSignalKit.Timer(timeout: 0.8, repeat: false, completion: { [weak self] in let longPressTimer = SwiftSignalKit.Timer(timeout: 0.6, repeat: false, completion: { [weak self] in
self?.longPressTimerFired() self?.longPressTimerFired()
}, queue: Queue.mainQueue()) }, queue: Queue.mainQueue())
self.longPressTimer = longPressTimer self.longPressTimer = longPressTimer

View File

@ -622,7 +622,7 @@ final class ChatMediaInputNode: ChatInputNode {
return .single(false) return .single(false)
} }
self?.lastReorderItemIndex = toIndex self?.lastReorderItemIndex = toIndex
let fromEntry = entries[fromIndex] let fromEntry = entries[fromIndex]
guard case let .stickerPack(_, fromPackInfo, _, _, _) = fromEntry else { guard case let .stickerPack(_, fromPackInfo, _, _, _) = fromEntry else {
return .single(false) return .single(false)
@ -744,7 +744,7 @@ final class ChatMediaInputNode: ChatInputNode {
} }
} }
self?.startCollapseTimer(timeout: 1.0) self?.startCollapseTimer(timeout: 2.0)
}) })
} }
@ -1275,7 +1275,7 @@ final class ChatMediaInputNode: ChatInputNode {
strongSelf.panelFocusScrollToIndex = nil strongSelf.panelFocusScrollToIndex = nil
strongSelf.panelFocusInitialPosition = nil strongSelf.panelFocusInitialPosition = nil
} }
strongSelf.startCollapseTimer(timeout: decelerated ? 0.5 : 2.0) strongSelf.startCollapseTimer(timeout: decelerated ? 0.5 : 2.5)
strongSelf.scrollingStickerPacksListPromise.set(false) strongSelf.scrollingStickerPacksListPromise.set(false)
} }
@ -1315,7 +1315,7 @@ final class ChatMediaInputNode: ChatInputNode {
strongSelf.panelFocusScrollToIndex = nil strongSelf.panelFocusScrollToIndex = nil
strongSelf.panelFocusInitialPosition = nil strongSelf.panelFocusInitialPosition = nil
} }
strongSelf.startCollapseTimer(timeout: decelerated ? 0.5 : 2.0) strongSelf.startCollapseTimer(timeout: decelerated ? 0.5 : 2.5)
} }
} }
} }