swift - 用居中的角度渐变填充圆不能正确居中
问题描述
我正在观看 WDDC session 237 视频,看到了一个有趣的例子,它使用 SwiftUI 的渐变和形状创建了一个“色轮”-esque circle,所以我尝试在我的代码中复制它,但我没有得到相同的结果。
这是代码:
let spectrum = Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: Angle(degrees: -90))
return Circle().fill(conic)
但它的中心靠近底部而不是圆的中心。另一方面,在 an 上做同样的事情,Ellipse
并按Capsule
预期工作:
椭圆:
let spectrum = Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: Angle(degrees: -90))
return Ellipse().fill(conic)
胶囊:
let spectrum = Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red])
let conic = AngularGradient(gradient: spectrum, center: .center, angle: Angle(degrees: -90))
return Capsule().fill(conic)
以下是他们三个人的样子:
这是一个错误还是我错过了什么?
解决方案
Circle
似乎需要.aspectRatio(contentMode: ContentMode.fit)
, 才能使渐变起作用。
struct ContentView : View {
var body: some View {
let spectrum = Gradient(colors: [
.red, .yellow, .green, .blue, .purple, .red
])
let conic = AngularGradient(gradient: spectrum,
center: .center,
angle: Angle(degrees: -90))
return VStack {
Circle().fill(conic).aspectRatio(contentMode: .fit)
Ellipse().fill(conic)
Capsule().fill(conic)
}
}
}
输出:
推荐阅读
- java - 如何使用 WebClient 访问 REST 子资源并在 Rest Client 中使用它们
- websocket - Flask Socket 连接不适用于使用 HTTPS 的域名
- python - 读取镶木地板文件时 Dask OutOfBoundsDatetime
- if-statement - Powerbi 使用标准表中使用的 IF 返回“NA”
- qt - 如何在 Qml 中为 3d 场景添加灯光?
- node.js - Nodejs 工作线程如何在后台工作?
- mongodb - MongoDB 聚合:如何展平对象?
- python - 将列从一个数据帧附加到另一个数据帧,循环中有多个匹配项
- c++ - 使用 Visual Studio 调试 C++ 默认生成的 == 运算符
- arrays - 从react js中的数组数据获取Img标签时如何设置图像路径?