f3d*_*m76 5 svg rendering linear-gradients ios swiftui
我正在尝试在矩形上渲染线性渐变。这是代码:
Rectangle()
.foregroundColor(Color.red)
.overlay(
LinearGradient(gradient: Gradient(colors: [.red, .yellow, .blue]), startPoint: .topLeading, endPoint: .bottomTrailing)
)
.frame(width: 300, height: 200)
.position(x: 170, y: 120)
Run Code Online (Sandbox Code Playgroud)
当我将其渲染在正方形上时,一切看起来都是正确的:
然而,当我在矩形上渲染它时,它看起来不再像从顶部前角到底部尾随。它看起来就像是被剪辑的同一个:
这是它在 svg 中的渲染方式(蓝色看起来不一样,但这不是重要的部分),以及我希望它在 swift 中的外观:
黄色对角线应该直接从一个角到另一个角,因为我指定了startPoint: .topLeading, endPoint: .bottomTrailing
. 这里说SwiftUI 对角线 LinearGradient 在一个矩形中,这是一个标准行为,没关系 - 我并不是想说 SwiftUI 渲染它不正确,我只是需要一种方法让它看起来像 svg 中的那样。
多么有趣的问题:)
\n“天真的”方法是将渐变渲染为正方形,然后旋转它或挤压或拉伸它以适合矩形。旋转需要更多数学运算,因此这是“挤压”版本:
\nstruct ContentView: View {\n var body: some View {\n \n Rectangle()\n .overlay(\n GeometryReader { g in\n LinearGradient(\n gradient: Gradient(colors: [.red, .yellow, .blue]),\n startPoint: .topLeading,\n endPoint: .bottomTrailing\n )\n .frame(width: g.size.width, height: g.size.width)\n .scaleEffect(x: 1.0, y: g.size.height / g.size.width, anchor: .top)\n }\n )\n .frame(width: 300, height: 200)\n \n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n笔记:
\n请告诉我这是否是您正在寻找的或者是否有更好的方法来做到这一点!
\n干杯,\n\xe2\x80\x93Baglan
\n 归档时间: |
|
查看次数: |
1439 次 |
最近记录: |