提问者:小点点

SwiftUI矩形突然变成圆角矩形


我刚刚开始学习SwiftUI,正在玩视图和动画,我想让控制器有点像苹果的控制中心的音量或亮度。 但我发现了一个有趣的小东西,我真的不知道该怎么处理。

struct DragControler: View {
    @GestureState var fillPercentGS : Double = 0.5
    @State var fillPercent = 0.5
    var body: some View {
        ZStack{

            Rectangle()
            GeometryReader { geometry in
                VStack(spacing: 0) {
                    Rectangle().foregroundColor(.red) //these rects
                    Rectangle().foregroundColor(.green).frame(height: geometry.size.height * CGFloat(self.fillPercent))
                }.gesture(DragGesture(coordinateSpace: .local).updating(self.$fillPercentGS, body: { (value, state, transaction) in
                    state =  Double(value.location.y/geometry.size.height)

                }).onChanged({ (value) in
                    self.fillPercent = max(0, min(1 - Double(value.location.y/geometry.size.height), 1))
                }))
            }
            Text("\(fillPercent)").foregroundColor(.white)
            }.cornerRadius(50).aspectRatio(1/4, contentMode: .fit).padding()
    }
}

当其中一个矩形填满整个视图时,它变成舍入

所以你可以在gif上看到,当我把它一直拖到顶部或底部时,在代码中清楚地说是矩形的矩形变成了圆角矩形

那么,为什么会发生这种事呢? 我已经尝试用剪贴板(RoundedRect(。。。))替换。CornerRadius()修饰符 但这于事无补。 但是我发现,将这些矩形的角半径显式地设置为零是有帮助的。

Rectangle().cornerRadius(0).foregroundColor(.red)
Rectangle().cornerRadius(0).foregroundColor(...)

我猜这是swiftUI在后台做的一些优化

提前致谢


共1个答案

匿名用户

在我看来这是一个bug,但有一个简单的修复方法。 只需显式地将绿色矩形的角半径设置为0:

Rectangle().foregroundColor(.green).frame(height: geometry.size.height * CGFloat(self.fillPercent)).cornerRadius(0)