【发布时间】:2018-04-11 10:30:17
【问题描述】:
看到一个关于更改滚动视图的内容偏移属性的奇怪问题。
我有一个 CADisplayLink 每帧调用一个方法。此方法计算调整内容偏移量以产生自动滚动类型的效果。
@objc private func tick() {
let fps = 1 / (displayLink.targetTimestamp - displayLink.timestamp)
let relativeAutoscrollAmount = autoscrollAmount / CGFloat(fps)
scrollView.contentOffset.x += relativeAutoscrollAmount
}
autoscrollAmount 是一个CGFloat 属性,表示每秒移动多少像素。在像 iPhone 这样的 60Hz 屏幕上,如果该属性为 5,这意味着每次调用该方法都会发生 5/60 的偏移。但是,内容偏移量实际上从未改变!无论是视觉上还是记忆中,我都可以随时打破和检查它,它总是为 0!
请注意,如果我每次将其调整 1 或更大,它就可以正常工作。不过,动画还远远不够快。
有什么想法吗?
编辑: 显然,您实际上一次不能调整少于一个像素,但是当我之前使用约束常数执行此操作时,系统只是计算了如何处理此问题。 (我假设每隔几个刻度移动一次)。
【问题讨论】:
标签: ios swift uiscrollview cadisplaylink