gpt4 book ai didi

ios - 使用 UITableView 的老虎机动画

转载 作者:行者123 更新时间:2023-11-29 05:13:39 25 4
gpt4 key购买 nike

我需要根据提供的设计和计时来实现老虎机动画。

它应该执行无限滚动,直到触发某个事件。动画结束后,它应该减速并停在定义的位置

对于此任务,我使用了下一个解决方案:

  • UITableView 具有固定高度 单元格。它是同一个单元格,唯一的区别是图标或文本(取决于 indexPath.row)
  • Scroll 只能从下到上,这就是为什么我在 resetScrollPosition 方法中使用最后一个单元格作为起点
  • 如果到达第一个元素,滚动位置将重置为起点
  • 随着 contentOffset 执行的动画随线性选项变化。在完成 block 中,如果仍然需要动画,则会再次调用。如果不需要 - 使用 easeOut 选项启动减慢动画
var isRolling: Bool = false

func startScroll() {
isRolling = true

UIView.animate(
withDuration: 0.05,
delay: 0,
options: .curveLinear,
animations: {
self.tableView.contentOffset.y -= self.rowHeight
},
completion: { _ in
if self.isRolling {
self.startScroll()
} else {
self.resetScrollPosition

UIView.animate(
withDuration: 0.7,
delay: 0,
options: .curveEaseOut,
animations: {
self.tableView.contentOffset.y -= 8 * self.rowHeight
},
completion: nil
)
}
})
}

private func resetScrollPosition() {
tableView.reloadData()

tableView.contentOffset.y = startOffset
tableView.reloadData()
}

func stopScroll() {
isRolling = false
}

问题:

  1. 调用 resetScrollPosition 后,在动画完成 block 中,tableviews contentOffset.y 值已更新,但 tableView 保持在同一位置。我尝试将直接 contentOffset 更改为 setContentOffsetscrollToRowscrollToRect,将其包装在主队列中 - 否变化
  2. 减慢动画应滚动 8 个项目。它已执行,但前 6 项在动画期间不可见,仅最后两项不可见。检查问题gif(跳2->11即可):slot animation issue

最佳答案

UITableView 替换为 UIScrollView

已将代码上传到要点 - https://gist.github.com/OlesenkoViktor/76845c5448b421ead0a2303af2b1161d

感谢@Paulw11 his idea

关于ios - 使用 UITableView 的老虎机动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59423280/

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