gpt4 book ai didi

ios - 使用 SwiftUI Shape 进行阴影偏移

转载 作者:行者123 更新时间:2023-12-01 15:42:57 34 4
gpt4 key购买 nike

我正在尝试使用 Shape、Geometry reader 和 Path 在 SwiftUI 中绘制一个圆圈,我希望阴影位于圆圈的正下方,但阴影出现偏移,我似乎无法将其绘制到哪里它应该:

shadow offset problem


struct ContentView: View {

var body: some View {

return GeometryReader { geometry in

VStack(alignment: .center) {
BackgroundRing()
.stroke(Color.red, style: StrokeStyle(lineWidth: geometry.size.width < geometry.size.height ? geometry.size.width / 12.0 : geometry.size.height / 12))
.padding()
.shadow(color: .gray, radius: 1.0, x: 0.0, y: 0.0)
}
}
}
}

struct BackgroundRing : Shape {
func path(in rect: CGRect) -> Path {
var path: Path = Path()

let radiusOfRing: CGFloat = (rect.width < rect.height ? rect.width/2 - rect.width / 12 : rect.height/2 - rect.height / 12)
path.addRelativeArc(center: CGPoint(x: rect.width/2, y: rect.height/2),
radius: radiusOfRing,
startAngle: Angle(radians: 0.0),
delta: Angle(radians: Double.pi * 2.0 ))

return path
}
}




最佳答案

好的 所以我似乎已经设法解决了这个问题。宽度/高度与代码交互以计算阴影位置 - 阴影位置似乎来自框架尺寸而不是形状。

添加

.aspectRatio(contentMode: .fit)

解决问题

此外,.shadow 似乎自动将默认偏移设置为与半径相同的值,因此要获得 0.0 的实际偏移,您必须相对于半径设置它,如下所示:

.shadow(radius: 10.0, x: -10.0, y: -10.0)

在我看来像是一个错误,但这个解决方法解决了它:

enter image description here

import SwiftUI

struct ContentView: View {

var body: some View {

return GeometryReader { geometry in

VStack(alignment: .center) {
BackgroundRing()
.stroke(Color.red,
style: StrokeStyle(lineWidth: geometry.size.width < geometry.size.height ? geometry.size.width / 12.0 : geometry.size.height / 12))
.shadow(radius: 30.0, x: -30.0, y: -30.0)
.aspectRatio(contentMode: .fit)
}
}

}
}

struct BackgroundRing : Shape {
func path(in rect: CGRect) -> Path {
var path: Path = Path()

let radiusOfRing: CGFloat = (rect.width < rect.height ? rect.width/2 - rect.width / 12 : rect.height/2 - rect.height / 12)
path.addRelativeArc(center: CGPoint(x: rect.width/2, y: rect.height/2), // <- this change solved the problem
radius: radiusOfRing,
startAngle: Angle(radians: 0.0),
delta: Angle(radians: Double.pi * 2.0 ))

return path
}
}

关于ios - 使用 SwiftUI Shape 进行阴影偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58470620/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com