SwiftUI sync/mask trim 两个圆圈叠加
SwiftUI sync/mask trim of two circles with overlay
我确信对此有一个非常简单的解决方案,但我无法解决。我用另一个填充了 LinearGradient 的 Circle 覆盖了一个 Circle。我想用 LinearGradient(动态)旋转圆而不旋转主圆。
那是因为我在我的主圆上使用“trim”并且我希望 trimming 从顶部开始,这就是我将主圆旋转 270 度的原因。
目前,我当然看不到 trimmed 第一个圆圈,因为它与第二个圆圈重叠。有没有办法屏蔽第二个圆圈,使其与 trimmed 主圆圈同步?
编辑:我添加了一个 .mask,但我不喜欢该代码,因为它是多余的。将结构放入其中会有所帮助。是应该这样做还是有更简单的方法?
谢谢!
import SwiftUI
struct ContentView: View {
@State var myRotation: Double = 90
var body: some View {
Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30))
.overlay(
Circle()
.stroke(style: StrokeStyle(lineWidth: 30))
.fill(LinearGradient(
gradient: .init(colors: [Color.red, Color.orange]),
startPoint: .top,
endPoint: .bottom
))
.rotationEffect(Angle(degrees: self.myRotation))
.mask(Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30)))
)
.rotationEffect(Angle(degrees: 270))
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
下面是相同的删除冗余(虽然我不确定我是否达到了你的最终目标)。
使用 Xcode 12b
测试
struct ContentView: View {
@State var myRotation: Double = 90
var body: some View {
Circle()
.stroke(style: StrokeStyle(lineWidth: 30))
.fill(LinearGradient(
gradient: .init(colors: [Color.red, Color.orange]),
startPoint: .top,
endPoint: .bottom
))
.rotationEffect(Angle(degrees: self.myRotation))
.mask(Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30)))
.rotationEffect(Angle(degrees: 270))
.padding()
}
}
我确信对此有一个非常简单的解决方案,但我无法解决。我用另一个填充了 LinearGradient 的 Circle 覆盖了一个 Circle。我想用 LinearGradient(动态)旋转圆而不旋转主圆。
那是因为我在我的主圆上使用“trim”并且我希望 trimming 从顶部开始,这就是我将主圆旋转 270 度的原因。
目前,我当然看不到 trimmed 第一个圆圈,因为它与第二个圆圈重叠。有没有办法屏蔽第二个圆圈,使其与 trimmed 主圆圈同步?
编辑:我添加了一个 .mask,但我不喜欢该代码,因为它是多余的。将结构放入其中会有所帮助。是应该这样做还是有更简单的方法?
谢谢!
import SwiftUI
struct ContentView: View {
@State var myRotation: Double = 90
var body: some View {
Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30))
.overlay(
Circle()
.stroke(style: StrokeStyle(lineWidth: 30))
.fill(LinearGradient(
gradient: .init(colors: [Color.red, Color.orange]),
startPoint: .top,
endPoint: .bottom
))
.rotationEffect(Angle(degrees: self.myRotation))
.mask(Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30)))
)
.rotationEffect(Angle(degrees: 270))
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
下面是相同的删除冗余(虽然我不确定我是否达到了你的最终目标)。
使用 Xcode 12b
测试struct ContentView: View {
@State var myRotation: Double = 90
var body: some View {
Circle()
.stroke(style: StrokeStyle(lineWidth: 30))
.fill(LinearGradient(
gradient: .init(colors: [Color.red, Color.orange]),
startPoint: .top,
endPoint: .bottom
))
.rotationEffect(Angle(degrees: self.myRotation))
.mask(Circle()
.trim(from: 0.0, to: CGFloat(0.5))
.stroke(style: StrokeStyle(lineWidth: 30)))
.rotationEffect(Angle(degrees: 270))
.padding()
}
}