ios - 如何更改 UIScrollView 行为以在 > 0 处开始滚动?

标签 ios swift uiscrollview

几天来我一直在努力解决与 UIScrollViews 相关的逻辑问题。我的目标是渲染一个温度 slider ,该 slider 从可变的最低温度开始并在最高温度停止。

为此,我每十个点画一条线,它应该代表一个度数。我希望 slider 从 0 摄氏度或 273 开尔文开始,并位于屏幕中间。所以我计算 273*10 并获得 UIScrollview 所需的起点。此外,我减去屏幕上一半的点,然后滚动到那里。当指定的最低温度 <= 0 时,它可以正常工作。

这是温度从 <= 0 开始并渲染时的结果:

slider beginning under zero

如果我用开尔文进行整个操作,或者摄氏温度从 >0 开始, ScrollView 直到大约 -187 K 才会停止滚动,这当然不应该发生:

enter image description here

这是我现在使用的公式:

// CONTENT SIZE
self.universalRulerScroll.contentSize = CGSize(width: (maxTemp*10) + halfScreenWidth, height: scrollHeight)

// LEFT INSET
self.universalRulerScroll.contentInset.left = CGFloat(abs(minTemp)*10) + CGFloat(halfScreenWidth)

// SCROLL AT THE BEGINNING TO:
self.universalRulerScroll.contentOffset = CGPoint(x: -CGFloat(halfScreenWidth)+(zeroTemp*10), y: 0)

也许有人立刻就发现了逻辑错误?谢谢!

最佳答案

我不太懂你的数学。假设每个度数标记的宽度为 10 点(这就是您乘以 10 的原因),您可能需要类似以下内容:

let tempRange = maxTemp - minTemp  // Width is number of degrees * 10 points

let zeroPosition = zeroTemp - minPosition // Zero position is offset by leftmost (minimum) degrees

self.universalRulerScroll.contentSize = CGSize(width: tempRange * 10, height: scrollHeight)

self.universalRulerScroll.contentOffset = CGPoint(x: zeroPosition * 10 + halfScreenWidth, y: 0)

关于ios - 如何更改 UIScrollView 行为以在 > 0 处开始滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54967953/

相关文章:

ios - MVVM 模式和 Storyboard iOS

ios - 清除 UIWebview 缓存

swift - 什么时候是mapView :viewForAnnotation called in Swift?

ios - 如何为 UICollectionView 启用缩放

ios - 带有按钮的 ScrollView 可以在点击时出现和消失

ios - dispatch_group_async 性能

swift - 将图像发送到 API - Swift 4

ios - 使用未解析的标识符 'addChild'

iPhone iOs 5,根据内容高度动态更改滚动查看器的高度不起作用?

android - Cordova 初始屏幕无法在 Android 或 iOS 中加载