From bd7a43fe44057228237a071f8071c418d6019382 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 | 13 +++++++++++ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/submodules/Display/Source/ListView.swift b/submodules/Display/Source/ListView.swift index 4c998fb9a3..679bb053a7 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 60bf470fbd..4435e0b5dd 100644 --- a/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m +++ b/submodules/ObjCRuntimeUtils/Source/ObjCRuntimeUtils/RuntimeUtils.m @@ -98,6 +98,19 @@ object_setClass(self, newClass); } +- (NSNumber * _Nullable)floatValueForKeyPath:(NSString * _Nonnull)keyPath { + id value = [self valueForKeyPath:keyPath]; + if (value != nil) { + if ([value respondsToSelector:@selector(floatValue)]) { + return @([value floatValue]); + } else { + return nil; + } + } else { + return nil; + } +} + + (NSArray * _Nonnull)getIvarList:(Class _Nonnull)classValue { NSMutableArray *result = [[NSMutableArray alloc] init];