Размер ProgressHUD без изменения пользовательского интерфейса - PullRequest
0 голосов
/ 08 мая 2018

Продолжая работать над своим фитнес-приложением, чтобы добавлять новые функции, я иногда спотыкаюсь. У меня возникли проблемы с получением ProgressHUD для обновления размера представления. Я знаю, что значение отправляется в свойствах представления, но ширина не изменяется в пользовательском интерфейсе. Вот код, который я использую для обновления.

// linked to view that needs to change size when progressHUD is updated
@IBOutlet weak var progressHUD: UIView!


// this is set inside a timer that fires every 20 seconds and should update progressHUD

progressHUD.frame.size.width = (view.frame.size.width/10) * CGFloat((userHeartRate/Double(maxHeartRate)))

Вот графический интерфейс:

User interface

Приложение получает текущую частоту сердечных сокращений пользователя, сравнивает ее с максимальной частотой сердечных сокращений, чтобы получить процент от максимальной частоты сердечных сокращений. Эта процентная доля представлена ​​прогрессом HUD (серая полоска под прогревом) и должна сдвигаться вправо в зависимости от процента максимальной частоты сердечных сокращений.

Я знаю, что значения рассчитываются правильно и присваивают значение progressHUD.frame.size.width, но серая полоса не отражает назначенное ей значение.

Я установил кокопод для ProgressHUD и считаю, что все работает правильно. (Не было ошибок при установке)

Должно быть что-то простое, что я упускаю из виду!

Любая предоставленная помощь очень ценится.

1 Ответ

0 голосов
/ 08 мая 2018

Похоже, в вашей формуле есть ненужное деление на 10 .

Если вы хотите, чтобы progressHUD варьировалось от 0% до 100% от width кадра view's. тогда вы должны сделать:

progressHUD.frame.size.width = view.frame.size.width * CGFloat(userHeartRate)/CGFloat(maxHeartRate)

Если предположить, что userHeartRate не превышает maxHeartRate, тогда CGFloat(userHeartRate)/CGFloat(maxHeartRate) - это значение между 0.0 и 1.0. Умножение на то, что width представления дает значение от 0% до 100% от width.

представления.

Вы можете добавить max() функцию, если userHeartRate может превышать maxHeartRate:

progressHUD.frame.size.width = view.frame.size.width * max(1.0, CGFloat(userHeartRate)/CGFloat(maxHeartRate))

Поскольку ваше представление progressHUD размещено на раскадровке, вы можете использовать Auto Layout для его масштабирования. Получите выход к ограничению ширины вида:

@IBOutlet weak var progressHUDwidth: NSLayoutContraint!

Затем обновите его, установив свойство constant:

progressHUDwidth.constant = view.frame.size.width * ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...