Swift ZStack以圆形矩形作为条形图。如何正确填充?

Swift ZStack以圆形矩形作为条形图。如何正确填充?,swift,charts,swiftui,Swift,Charts,Swiftui,我想在ZStack(用于演示的滑块)中使用两个圆角矩形创建垂直条形图: 这适用于~30以上的所有值。由于角半径的原因,下面的值将绿色矩形渲染为小矩形,以将其显示在第一个矩形的正上方: 我如何防止这种情况发生,或者我如何以其他方式创建这个简单的条形图 提前谢谢。您需要裁剪的形状如下 ZStack(对齐:。前导){ 圆角反射角(圆角半径:20)。前底色(颜色。灰色)。边框(宽度:300,高度:30) RoundedRectangle(圆角半径:20)。foregroundColor(颜色。绿色)

我想在ZStack(用于演示的滑块)中使用两个圆角矩形创建垂直条形图:

这适用于~30以上的所有值。由于角半径的原因,下面的值将绿色矩形渲染为小矩形,以将其显示在第一个矩形的正上方:

我如何防止这种情况发生,或者我如何以其他方式创建这个简单的条形图


提前谢谢。

您需要裁剪的形状如下

ZStack(对齐:。前导){
圆角反射角(圆角半径:20)。前底色(颜色。灰色)。边框(宽度:300,高度:30)
RoundedRectangle(圆角半径:20)。foregroundColor(颜色。绿色)。边框(宽度:值,高度:30)
}

.clipShape(圆角矩形(拐角半径:20))/您需要剪裁的形状,如下所示

ZStack(对齐:。前导){
圆角反射角(圆角半径:20)。前底色(颜色。灰色)。边框(宽度:300,高度:30)
RoundedRectangle(圆角半径:20)。foregroundColor(颜色。绿色)。边框(宽度:值,高度:30)
}

.clipShape(圆角矩形(拐角半径:20))/这里是使用
遮罩和
覆盖的替代解决方案:

struct Chart: View {
    @Binding var value: CGFloat

    var body: some View {
        let rectangle = RoundedRectangle(cornerRadius: 20)
        return rectangle.overlay(
            GeometryReader { _ in
                ZStack(alignment: .leading) {
                    Rectangle()
                        .frame(width: value)
                        .foregroundColor(.green)
                }
            }
            .mask(rectangle)
        )
        .foregroundColor(.gray)
    }
}

下面是使用
掩码
覆盖
的替代解决方案:

struct Chart: View {
    @Binding var value: CGFloat

    var body: some View {
        let rectangle = RoundedRectangle(cornerRadius: 20)
        return rectangle.overlay(
            GeometryReader { _ in
                ZStack(alignment: .leading) {
                    Rectangle()
                        .frame(width: value)
                        .foregroundColor(.green)
                }
            }
            .mask(rectangle)
        )
        .foregroundColor(.gray)
    }
}

嗯,那很容易。非常感谢你!嗯,那很容易。非常感谢你!
struct Chart: View {
    @Binding var value: CGFloat

    var body: some View {
        let rectangle = RoundedRectangle(cornerRadius: 20)
        return rectangle.overlay(
            GeometryReader { _ in
                ZStack(alignment: .leading) {
                    Rectangle()
                        .frame(width: value)
                        .foregroundColor(.green)
                }
            }
            .mask(rectangle)
        )
        .foregroundColor(.gray)
    }
}
Chart(value: $value)
    .frame(width: 300, height: 30)