From e578479e7b83cc1a0a3f2932c3296e82d9b1ec88 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 28 Sep 2021 15:42:12 +0400 Subject: [PATCH] Fix scrolling --- submodules/Display/Source/ListView.swift | 23 ++++++++++--------- .../Source/ObjCRuntimeUtils/RuntimeUtils.m | 2 ++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/submodules/Display/Source/ListView.swift b/submodules/Display/Source/ListView.swift index 1a00e6fd5d..e23d5b6a4b 100644 --- a/submodules/Display/Source/ListView.swift +++ b/submodules/Display/Source/ListView.swift @@ -4,7 +4,6 @@ import SwiftSignalKit import UIKitRuntimeUtils import ObjCRuntimeUtils -private let infiniteScrollSize: CGFloat = 10000.0 private let insertionAnimationDuration: Double = 0.4 private struct VisibleHeaderNodeId: Hashable { @@ -161,6 +160,8 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture private final var lastContentOffset: CGPoint = CGPoint() private final var lastContentOffsetTimestamp: CFAbsoluteTime = 0.0 private final var ignoreScrollingEvents: Bool = false + + private let infiniteScrollSize: CGFloat private final var displayLink: CADisplayLink! private final var needsAnimations = false @@ -368,6 +369,8 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.transactionQueue = ListViewTransactionQueue() self.scroller = ListViewScroller() + + self.infiniteScrollSize = 10000.0 super.init() @@ -837,13 +840,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture print("Scrolling delta: \(delta)") } } - self.previousDidScrollTimestamp = timestamp - - if let displayLink = self.scroller.getIvarValue("_scrollHeartbeat") as? CADisplayLink { - if #available(iOS 10.0, *) { - displayLink.preferredFramesPerSecond = 120 - } - }*/ + self.previousDidScrollTimestamp = timestamp*/ //CATransaction.begin() //CATransaction.setDisableActions(true) @@ -871,7 +868,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.trackingOffset += -deltaY } - self.enqueueUpdateVisibleItems(synchronous: true) + self.enqueueUpdateVisibleItems(synchronous: false) var useScrollDynamics = false @@ -1531,8 +1528,12 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture else { self.scroller.contentSize = CGSize(width: self.visibleSize.width, height: infiniteScrollSize * 2.0) - self.lastContentOffset = CGPoint(x: 0.0, y: infiniteScrollSize) - self.scroller.contentOffset = self.lastContentOffset + if abs(self.scroller.contentOffset.y - infiniteScrollSize) > infiniteScrollSize / 2.0 { + self.lastContentOffset = CGPoint(x: 0.0, y: infiniteScrollSize) + self.scroller.contentOffset = self.lastContentOffset + } else { + self.lastContentOffset = self.scroller.contentOffset + } } self.ignoreScrollingEvents = wasIgnoringScrollingEvents } diff --git a/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m b/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m index 3e708424e6..4435e0b5dd 100644 --- a/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m +++ b/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m @@ -109,6 +109,8 @@ } else { return nil; } +} + + (NSArray * _Nonnull)getIvarList:(Class _Nonnull)classValue { NSMutableArray *result = [[NSMutableArray alloc] init];