ios - Progressview tintColorIssue
问题描述
我已经根据数字图像创建了一个进度视图,如下面的代码所示。
let view = UIView()
view.backgroundColor = .clear
let progressView = UIProgressView(frame: CGRect(x: 0, y: 0, width: frameOfParentView.width/3 - 8, height: 30))
progressView.progressViewStyle = .default
progressView.progress = 0.0
progressView.tintColor = .red
progressView.trackTintColor = .gray
progressView.layoutIfNeeded()
view.addSubview(progressView)
self.arrayOfProgrssView.append(progressView)
正如您在 gif 中看到的,在起点 tintColor alpha 稍微少一点,但是当它紧张到 100% 时,它是完全红色的。
我还尝试了以下代码:-
progressView.progressTintColor = .red
但没有得到预期的结果。
要执行动画,
DispatchQueue.main.asyncAfter(deadline: .now() + 0.001) {
UIView.animate(withDuration: self.animationInMS) {
progressView.setProgress(1, animated: true)
}
}
progressView.layoutIfNeeded()
iOS 15 中的问题:-
正如您在下面看到的其他颜色的结果。
注意:- 我已在 iOS 12.4 中检查它工作正常,如您所见。
请让我知道我这边有什么要求。
提前致谢
解决方案
这似乎是 alpha 值与完成百分比匹配的“新行为”——尽管经过快速搜索后,我没有找到任何关于它的文档。
作为解决方法的一个选项:设置.progressImage
而不是色调颜色。
所以,使用你喜欢的代码来生成纯色图像,例如:
extension UIImage {
public static func withColor(_ color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
let format = UIGraphicsImageRendererFormat()
format.scale = 1
let image = UIGraphicsImageRenderer(size: size, format: format).image { rendererContext in
color.setFill()
rendererContext.fill(CGRect(origin: .zero, size: size))
}
return image
}
}
然后,而不是:
progressView.tintColor = .red
利用:
let img = UIImage.withColor(.red)
progressView.progressImage = img
未经过全面测试,但为避免更改现有代码,您也可以尝试:
extension UIProgressView {
open override var tintColor: UIColor! {
didSet {
let img = UIImage.withColor(tintColor)
progressImage = img
}
}
}
现在您可以保留现有的progressView.tintColor = .red
推荐阅读
- java - Thymeleaf 表单验证
- javascript - 如何在窗口环境中获取我的 JavaScript UMD 包的完整字符串?`.toString()` 不起作用
- amazon-web-services - 通过 API Gateway 公开在 EKS 中运行的 Kubernetes 服务
- json - 如何在 Swift 中使用 Codable 解析 JSON?
- css - Safari 忽略 CSS :not() 规则
- azure - 我可以将 Azure 交互模式用于 azure-cli-ml 扩展吗?
- ios - Object-c 在变量的值改变后运行代码,怎么办?
- java - 编码毕达哥拉斯定理
- swift - 如何在 Kotlin 中扩展 Activity,例如在 Swift 中扩展 UIViewController
- gradle - Gitlab CI 缓存更新