Проблема с UIProgressView не работает плавно после увеличения высоты и закругления углов - PullRequest
1 голос
/ 30 мая 2020

У меня проблема с UIProgressView (с использованием Xcode 11.5 и текущей версии Swift). Моя цель - создать индикатор выполнения с увеличенной высотой (по сравнению со стандартной высотой Apple) и закругленными углами, которая плавно отображает прогресс воспроизводимого аудиофайла.

предполагаемый стиль индикатора выполнения

Я могу легко добиться желаемого вида, объединив ограничение высоты в конструкторе интерфейса со следующим кодом:

audioProgress.layer.cornerRadius = bubble.frame.size.height / 3
audioProgress.clipsToBounds = true

Однако проблема, с которой я столкнулся, заключается в том, что индикатор выполнения не запускается плавно с самого начала - вместо этого он перескакивает примерно на 1/3 полосы (изменяется в зависимости от размера устройства) и останавливается там, пока звук "не догонит". "в этой позиции, с которой он продолжает плавно работать до конца.

Я убедился, что это не ошибка в моем коде, повторных аудиофайлах, таймере и т. д. c. но некоторые проблемы с макетом. Например, как только я изменю высоту полосы обратно на стандартную высоту Apple, прогресс будет отображаться должным образом.

Я могу избежать этого странного поведения, используя приведенный ниже код для увеличения высоты полосы (вместо ограничения) :

let transform: CGAffineTransform = CGAffineTransform(scaleX: 1.0, y: transformFactor)
audioProgress.transform = transform

Однако это больше не позволяет мне скруглять углы, как показано выше, так как комбинация команд layer.cornerRadius и CGAffineTransform приводит к странно скошенным углам, как показано в других сообщениях. 1017 И как этого избежать?

Если использование команды CGAffineTransform является единственным способом go - есть ли другой способ добиться скругленных углов? Например, по строкам «сначала трансформируйте высоту, и только ЗАТЕМ закругляйте углы» (в отличие от того, чтобы делать это наоборот, что, в моем понимании, вызывает искаженный вид ...)

1 Ответ

0 голосов
/ 30 мая 2020

Попробуйте это -

    audioProgress?.layer.cornerRadius = bubble.frame.size.height / 3
    audioProgress?.layer.masksToBounds = true
...