gpt4 book ai didi

ios - UIScrollViewDelegate scrollViewDidScroll 方法跟不上高速滚动(轻弹)?

转载 作者:行者123 更新时间:2023-11-28 19:29:51 29 4
gpt4 key购买 nike

我有一个 UIScrollView 和一个 UIView header ,它贴在 ScrollView 的顶部,并在用户向下滚动时从全尺寸缩小到小尺寸。当然,这些都是通过 ScrollView 委托(delegate)实现的:

// scroll view delegate
extension SomeViewController {

// scroll view did scroll
public func scrollViewDidScroll(_ scrollView: UIScrollView) {

let contentOffsetY = scrollView.contentOffset.y

// make banner sticky
banner.frame.origin.y = max(0, contentOffsetY)

// shrink banner
if contentOffsetY > 0 && contentOffsetY <= bannerHeight! - 64 {
banner.frame.size.height = bannerHeight! - contentOffsetY
bannerGraphic.frame = banner.bounds
}

}

}

效果很好...如果用户不高速滚动。如果用户轻弹向下滚动(高速),代表似乎没有跟上,横幅永远不会完全缩小(可能缩小 85-90%)。为了验证这一点,我将 ScrollView 的偏移量打印到控制台,并注意到当用户缓慢滚动时,控制台可能会打印 100 行当前偏移量。当用户快速滚动时,控制台可能会打印 25 行当前偏移量。委托(delegate)根本跟不上高速滚动。

有没有一种方法可以确保无论滚动速度如何,横幅都会缩小,或者这只是 UIKit 的方式?

最佳答案

ScrollView Delegate 不会收到 View 滚动的每个点的通知。而且您真的不希望那样……这会造成太多不必要的处理。

因此,在快速滚动时完全有可能出现较大的间隙。事实上,在快速测试中,我刚刚将 .contentOffsetY 值从 0 跳到 75 再到 300...

您的代码很接近。您要做的是在您超过您的最大值时处理该情况。

试一试(我认为它只会插入并替换您的函数):

extension TestViewController: UIScrollViewDelegate {

// scroll view did scroll
public func scrollViewDidScroll(_ scrollView: UIScrollView) {

let contentOffsetY = scrollView.contentOffset.y

// make banner sticky
banner.frame.origin.y = max(0, contentOffsetY)

// if scrollView content is all the way at the top
// (or pulled down, waiting to "bounce back up")

if contentOffsetY <= 0 {

// set banner to original height
banner.frame.size.height = bannerHeight
bannerGraphic.frame = banner.bounds

} else {

// view has scrolled (user has dragged *up*)

// set banner height to originalHeight - y offset,
// but keep it a minimum of 64

banner.frame.size.height = max(bannerHeight! - contentOffsetY, 64)
bannerGraphic.frame = banner.bounds

}

}

}

关于ios - UIScrollViewDelegate scrollViewDidScroll 方法跟不上高速滚动(轻弹)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474503/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com