mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix scroll views not ignoring content touches for transferred deceleration
This commit is contained in:
parent
1910062888
commit
09980ea42b
@ -67,6 +67,7 @@ public final class ListViewBackingView: UIView {
|
||||
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||
if !self.isHidden, let target = self.target {
|
||||
if target.bounds.contains(point) {
|
||||
target.scroller.forceDecelerating = false
|
||||
if target.decelerationAnimator != nil {
|
||||
target.decelerationAnimator?.isPaused = true
|
||||
target.decelerationAnimator = nil
|
||||
@ -854,6 +855,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
||||
self.decelerationAnimator?.isPaused = true
|
||||
let startTime = CACurrentMediaTime()
|
||||
let decelerationRate: CGFloat = 0.998
|
||||
self.scroller.forceDecelerating = true
|
||||
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
@ -879,6 +881,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
||||
}
|
||||
|
||||
if abs(currentVelocity) < 0.1 {
|
||||
strongSelf.scroller.forceDecelerating = false
|
||||
strongSelf.decelerationAnimator?.isPaused = true
|
||||
strongSelf.decelerationAnimator = nil
|
||||
}
|
||||
|
@ -42,4 +42,9 @@ public final class ListViewScroller: UIScrollView, UIGestureRecognizerDelegate {
|
||||
override public func touchesShouldCancel(in view: UIView) -> Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
var forceDecelerating = false
|
||||
public override var isDecelerating: Bool {
|
||||
return self.forceDecelerating || super.isDecelerating
|
||||
}
|
||||
}
|
||||
|
@ -437,8 +437,16 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
}
|
||||
|
||||
let zoomLevel: ZoomLevel
|
||||
|
||||
class ScrollView: UIScrollView {
|
||||
var forceDecelerating = false
|
||||
|
||||
override var isDecelerating: Bool {
|
||||
return self.forceDecelerating || super.isDecelerating
|
||||
}
|
||||
}
|
||||
|
||||
let scrollView: UIScrollView
|
||||
let scrollView: ScrollView
|
||||
private let shimmer: Shimmer
|
||||
|
||||
var theme: PresentationTheme
|
||||
@ -468,7 +476,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
self.maybeLoadHoleAnchor = maybeLoadHoleAnchor
|
||||
self.coveringOffsetUpdated = coveringOffsetUpdated
|
||||
|
||||
self.scrollView = UIScrollView()
|
||||
self.scrollView = ScrollView()
|
||||
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
|
||||
self.scrollView.contentInsetAdjustmentBehavior = .never
|
||||
}
|
||||
@ -502,6 +510,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
@objc func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||
self.items?.itemBinding.didScroll()
|
||||
if let decelerationAnimator = self.decelerationAnimator {
|
||||
self.scrollView.forceDecelerating = false
|
||||
self.decelerationAnimator = nil
|
||||
decelerationAnimator.invalidate()
|
||||
}
|
||||
@ -803,6 +812,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
let startTime = CACurrentMediaTime()
|
||||
var currentOffset = self.scrollView.contentOffset
|
||||
let decelerationRate: CGFloat = 0.998
|
||||
self.scrollView.forceDecelerating = true
|
||||
self.scrollViewDidEndDragging(self.scrollView, willDecelerate: true)
|
||||
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
||||
guard let strongSelf = self else {
|
||||
@ -833,6 +843,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
strongSelf.scrollViewDidScroll(strongSelf.scrollView)
|
||||
if didEnd {
|
||||
strongSelf.scrollViewDidEndDecelerating(strongSelf.scrollView)
|
||||
strongSelf.scrollView.forceDecelerating = false
|
||||
}
|
||||
})
|
||||
self.decelerationAnimator?.isPaused = false
|
||||
@ -1045,6 +1056,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
||||
return nil
|
||||
}
|
||||
if let decelerationAnimator = strongSelf.decelerationAnimator {
|
||||
strongSelf.scrollView.forceDecelerating = false
|
||||
strongSelf.decelerationAnimator = nil
|
||||
decelerationAnimator.invalidate()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user