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? {
|
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||||
if !self.isHidden, let target = self.target {
|
if !self.isHidden, let target = self.target {
|
||||||
if target.bounds.contains(point) {
|
if target.bounds.contains(point) {
|
||||||
|
target.scroller.forceDecelerating = false
|
||||||
if target.decelerationAnimator != nil {
|
if target.decelerationAnimator != nil {
|
||||||
target.decelerationAnimator?.isPaused = true
|
target.decelerationAnimator?.isPaused = true
|
||||||
target.decelerationAnimator = nil
|
target.decelerationAnimator = nil
|
||||||
@ -854,6 +855,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
self.decelerationAnimator?.isPaused = true
|
self.decelerationAnimator?.isPaused = true
|
||||||
let startTime = CACurrentMediaTime()
|
let startTime = CACurrentMediaTime()
|
||||||
let decelerationRate: CGFloat = 0.998
|
let decelerationRate: CGFloat = 0.998
|
||||||
|
self.scroller.forceDecelerating = true
|
||||||
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
return
|
return
|
||||||
@ -879,6 +881,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
|
|||||||
}
|
}
|
||||||
|
|
||||||
if abs(currentVelocity) < 0.1 {
|
if abs(currentVelocity) < 0.1 {
|
||||||
|
strongSelf.scroller.forceDecelerating = false
|
||||||
strongSelf.decelerationAnimator?.isPaused = true
|
strongSelf.decelerationAnimator?.isPaused = true
|
||||||
strongSelf.decelerationAnimator = nil
|
strongSelf.decelerationAnimator = nil
|
||||||
}
|
}
|
||||||
|
@ -42,4 +42,9 @@ public final class ListViewScroller: UIScrollView, UIGestureRecognizerDelegate {
|
|||||||
override public func touchesShouldCancel(in view: UIView) -> Bool {
|
override public func touchesShouldCancel(in view: UIView) -> Bool {
|
||||||
return true
|
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
|
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
|
private let shimmer: Shimmer
|
||||||
|
|
||||||
var theme: PresentationTheme
|
var theme: PresentationTheme
|
||||||
@ -468,7 +476,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
|||||||
self.maybeLoadHoleAnchor = maybeLoadHoleAnchor
|
self.maybeLoadHoleAnchor = maybeLoadHoleAnchor
|
||||||
self.coveringOffsetUpdated = coveringOffsetUpdated
|
self.coveringOffsetUpdated = coveringOffsetUpdated
|
||||||
|
|
||||||
self.scrollView = UIScrollView()
|
self.scrollView = ScrollView()
|
||||||
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
|
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
|
||||||
self.scrollView.contentInsetAdjustmentBehavior = .never
|
self.scrollView.contentInsetAdjustmentBehavior = .never
|
||||||
}
|
}
|
||||||
@ -502,6 +510,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
|||||||
@objc func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
@objc func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||||
self.items?.itemBinding.didScroll()
|
self.items?.itemBinding.didScroll()
|
||||||
if let decelerationAnimator = self.decelerationAnimator {
|
if let decelerationAnimator = self.decelerationAnimator {
|
||||||
|
self.scrollView.forceDecelerating = false
|
||||||
self.decelerationAnimator = nil
|
self.decelerationAnimator = nil
|
||||||
decelerationAnimator.invalidate()
|
decelerationAnimator.invalidate()
|
||||||
}
|
}
|
||||||
@ -803,6 +812,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
|||||||
let startTime = CACurrentMediaTime()
|
let startTime = CACurrentMediaTime()
|
||||||
var currentOffset = self.scrollView.contentOffset
|
var currentOffset = self.scrollView.contentOffset
|
||||||
let decelerationRate: CGFloat = 0.998
|
let decelerationRate: CGFloat = 0.998
|
||||||
|
self.scrollView.forceDecelerating = true
|
||||||
self.scrollViewDidEndDragging(self.scrollView, willDecelerate: true)
|
self.scrollViewDidEndDragging(self.scrollView, willDecelerate: true)
|
||||||
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
self.decelerationAnimator = ConstantDisplayLinkAnimator(update: { [weak self] in
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
@ -833,6 +843,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
|||||||
strongSelf.scrollViewDidScroll(strongSelf.scrollView)
|
strongSelf.scrollViewDidScroll(strongSelf.scrollView)
|
||||||
if didEnd {
|
if didEnd {
|
||||||
strongSelf.scrollViewDidEndDecelerating(strongSelf.scrollView)
|
strongSelf.scrollViewDidEndDecelerating(strongSelf.scrollView)
|
||||||
|
strongSelf.scrollView.forceDecelerating = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
self.decelerationAnimator?.isPaused = false
|
self.decelerationAnimator?.isPaused = false
|
||||||
@ -1045,6 +1056,7 @@ public final class SparseItemGrid: ASDisplayNode {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if let decelerationAnimator = strongSelf.decelerationAnimator {
|
if let decelerationAnimator = strongSelf.decelerationAnimator {
|
||||||
|
strongSelf.scrollView.forceDecelerating = false
|
||||||
strongSelf.decelerationAnimator = nil
|
strongSelf.decelerationAnimator = nil
|
||||||
decelerationAnimator.invalidate()
|
decelerationAnimator.invalidate()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user