ios - SwiftUI Rectangle 突然变成 RoundedRectangle
问题描述
我刚刚开始学习 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 上看到的那样,当我将它一直拖到顶部或底部时,代码中明确表示为 Rectangles 的 Rectangles 变为圆角矩形
那么,为什么会这样呢?我试图用 clipShape(RoundedRect(...)) 替换 .cornerRadius() 修饰符,但它没有帮助。但我发现它有助于将这些矩形的角半径显式设置为零。
Rectangle().cornerRadius(0).foregroundColor(.red)
Rectangle().cornerRadius(0).foregroundColor(...)
我的猜测是 swiftUI 在后台进行了某种优化
提前致谢
解决方案
对我来说它看起来像一个错误,但有一个简单的修复。只需将绿色矩形的角半径显式设置为 0:
Rectangle().foregroundColor(.green).frame(height: geometry.size.height * CGFloat(self.fillPercent)).cornerRadius(0)
推荐阅读
- maven - 如何强制 maven 使用 pom.xml 中列出的存储库?
- android - 当来自手机的通知也被禁用时,Android Wear 应用程序通知也会被禁用
- python - 在 matplotlib 中以粗体打印字符串变量的更简单方法
- javascript - JavaScript 追加
- firebase - 从 Firebase 模块返回 Axios 数据
- wxpython - 我可以将第一个面板中的 OK 按钮绑定到一个运行的函数并检查是否输入了正确的 id,如果正确,下一个面板是否出现
- azure-devops - 拖动到进行中的 Azure DevOps Sprint Board 时如何自动为自己分配任务
- angular - 路由器事件三元语句中的匹配值
- material-design - Android Material Components 命名空间:MaterialComponents vs Design
- angular - RxJS 间隔,AJAX 请求和减少