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%,您会看到红色叠加层超出了左上和左下的蓝色背景矩形范围。参见下图。

Red overlay out of bounds...

我觉得这不是适当的解决方案,但是我也找不到正确的组合(尝试scaleEffect,一堆offsetposition数学)来真正确定它。

对我来说,就像我上面说的那样,当值是0.4时,感觉覆盖层应该能够说“仅使我最左边的40%可见”。

这很long,对此我深表歉意。如果您已经阅读了此书,并且有任何建议要发表,我将非常感激。

谢谢!

答案

如果我正确理解了您的担忧,请采取以下解决方案。经过Xcode 11.4 / ios 13.4的测试。

demo

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-仅显示视图的百分比的主要内容,如果未能解决你的问题,请参考以下文章

在JavaFX中仅显示填充了图像的百分比

处理选项卡选择 SwiftUI

SwiftUI onTapGesture 仅调用一次

有没有办法强制 SwiftUI 中的横向模式仅用于某些视图?

只显示图片的百分比,swiftUI

使用 ForEach SwiftUI Core Data 仅更改列表中的一项