gpt4 book ai didi

ios - UIScrollView 中的跳跃(删除顶部 'page' 时)

转载 作者:行者123 更新时间:2023-11-30 13:27:02 24 4
gpt4 key购买 nike

我正在构建一个自定义分页UIScrollView的原型(prototype),其核心功能是在当前/最上面的“页面”通过顶 View 边界后立即将其删除(即完全超出看法)。这对于 ScrollView 委托(delegate)中相当原始的代码来说工作得很好,但是从第二个“页面”向前连续滑动会导致 ScrollView 非常快速地跳转到下一页的故障。这一直持续到 ScrollView 向相反方向移动为止。

我在图像数组中使用扑克牌图像作为页面,并且由于核心用户功能是快速滑动这些卡片页面,因此出现故障/的用户体验非常差快速响应。

例如,请观看下面的视频:

(大约 10 秒 - 请原谅重播) enter image description here

我的代码是:

func scrollViewDidScroll(scrollView: UIScrollView) {

if (scrollView.contentOffset.y >= scrollView.frame.height) {
print("CATCH at \(scrollView.contentOffset.y)")

// Handle 'cards' UIImageView array directly
self.cards.first?.removeFromSuperview()
self.cards.removeFirst()
for cardImage in self.cards {
cardImage.frame = CGRectOffset(cardImage.frame, 0, -cardImage.frame.height)
}

// Resize the scrollView's contentView and coordinates
scrollView.contentSize = CGSizeMake(scrollView.frame.width, scrollView.contentSize.height - scrollView.frame.height)
scrollView.setContentOffset(CGPointMake(0, 0), animated: false)

print("new content offset: \(scrollView.contentOffset.y)")
}
}

在上面的代码中,当 View 开始出现“故障”(即滚动速度非常快)时,contentOffset.y 的“CATCH”值超过 View 高度,而当它“平滑”时' CATCH' 值正是页面高度(我们对正常分页动画的期望);因此,我只能假设它捕捉到 View 太晚了,因为它进展得太快了(?)

首先将scrollView稍微向相反方向移动一点即可停止故障,这表明在执行此操作时有关scrollView的动画或速度的某些内容已重置。

我在 scrollViewDidEndDecelerating 委托(delegate)中尝试了许多不同的方法,例如重置scrollView的panGestureRecognizerscrollEnabled,但无济于事。

感谢这里的指点!

最佳答案

在尝试了UIScrollViewDelegate的各种委托(delegate)函数后,我发现在scrollView自然停止的点(例如下一个滚动条的末尾)操作scrollViewDidScroll分页 ScrollView 中的页面)在某些情况下(例如本例)会绕过 scrollViewDidEndDecelerating,并导致滚动再次开始时错误触发,这就是导致上面页面跳转的原因。

解决方案是将我的代码移至 scrollViewDidEndDecelerating 并仅在 scrollViewDidScroll 中处理“实时”滚动事件编辑。

关于ios - UIScrollView 中的跳跃(删除顶部 'page' 时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056308/

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