Swiftui-仅显示视图的百分比
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swiftui-仅显示视图的百分比相关的知识,希望对你有一定的参考价值。
我有一个RoundedRectangle
,我的目标是在其上放置另一个RoundedRectangle
,以使覆盖图显示“完成百分比”。不过,我似乎找不到合适的方法。
I think理想情况下,叠加层应该以某种方式仅显示其自身的百分比。调整自身大小以匹配百分比会歪曲叠加层的形状。
import PlaygroundSupport
struct ContentView: View {
@State private var value: Double = 0
var body: some View {
GeometryReader { geom in
VStack {
Slider(value: self.$value, in: 0...1, step: 0.01)
ZStack {
ZStack(alignment: .leading) {
// The main rectangle
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.frame(width: geom.size.width,
height: 200)
// The progress indicator...
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.opacity(0.5)
.frame(width: CGFloat(self.value) * geom.size.width,
height: 200)
}
Text("(Int(self.value * 100)) %")
}
}
}
.padding()
}
}
PlaygroundPage.current.setLiveView(ContentView())
在上面的游乐场中,如果您看到1、2或什至3%,您会看到红色叠加层超出了左上和左下的蓝色背景矩形范围。参见下图。
我觉得这不是适当的解决方案,但是我也找不到正确的组合(尝试scaleEffect
,一堆offset
和position
数学)来真正确定它。
对我来说,就像我上面说的那样,当值是0.4
时,感觉覆盖层应该能够说“仅使我最左边的40%可见”。
这很long,对此我深表歉意。如果您已经阅读了此书,并且有任何建议要发表,我将非常感激。
谢谢!
答案
如果我正确理解了您的担忧,请采取以下解决方案。经过Xcode 11.4 / ios 13.4的测试。
ZStack {
ZStack(alignment: .leading) {
// The main rectangle
RoundedRectangle(cornerRadius: 10)
.fill(Color.blue)
.frame(width: geom.size.width,
height: 200)
// The progress indicator...
RoundedRectangle(cornerRadius: 10)
.fill(Color.red)
.opacity(0.5)
.frame(width: CGFloat(self.value) * geom.size.width,
height: 200)
}
.clipShape(RoundedRectangle(cornerRadius: 10)) // << here !!
另一答案
这是我的处理方式,因此我不必管理多个cornerRadius
。
Stack {
ZStack(alignment: .leading) {
// The main rectangle
Rectangle()
.fill(Color.blue)
.frame(width: geom.size.width,
height: 200)
// The progress indicator...
Rectangle()
.fill(Color.red)
.opacity(0.5)
.frame(width: CGFloat(self.value) * geom.size.width,
height: 200)
}
.cornerRadius(10)
以上是关于Swiftui-仅显示视图的百分比的主要内容,如果未能解决你的问题,请参考以下文章