Как я могу изменить поведение UIScrollView, чтобы начать прокрутку с> 0? - PullRequest
0 голосов
/ 03 марта 2019

Я уже несколько дней борюсь с проблемой логики, связанной с UIScrollViews.Моя цель состоит в том, чтобы сделать ползунок температуры, который начинается при переменной минимальной температуре и останавливается при максимальной температуре.

Для этого я рисую каждые десять точек линию, которая должна представлять градус.Я хочу, чтобы ползунок начинался с 0 градусов Цельсия или 273 Кельвинов и располагался посередине экрана.Поэтому я вычисляю 273 * 10 и получаю желаемую начальную точку просмотра UIScrollview.Кроме того, я вычитаю половину точек на экране и затем прокручиваю их там.Работает без проблем, когда указанная минимальная температура <= 0. </p>

Это результат, когда температура начинается с <= 0 и отображается: </p>

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)

Может быть, кто-то сразу увидит логическую ошибку?Спасибо!

1 Ответ

0 голосов
/ 04 марта 2019

Я действительно не следую твоей математике.Предполагая, что каждая отметка степени имеет ширину 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...