gpt4 book ai didi

ios - SwiftUI 圆圈位置 x 和 y

转载 作者:行者123 更新时间:2023-12-01 23:17:42 25 4
gpt4 key购买 nike

我无法找到正确的方法来找到要放置的 x 和 y 坐标,并将 overlay 中的 Image 放置到进度 View 的正确位置 I正在制作。我希望最终结果看起来像屏幕截图,只是不确定我会使用什么公式。至少可以说,我的数学技能很差。

GeometryReader { geometry in
ZStack {
Circle()
.trim(from: 0.0, to: 0.5)
.stroke(Color.blue, style: StrokeStyle(lineWidth: 5))
.rotationEffect(.degrees(-180))
.frame(width: geometry.size.width)
.opacity(0.5)
.overlay(Circle()
.trim(from: 0.0, to: CGFloat(configuration.fractionCompleted ?? 0) / 2)
.stroke(Color.blue, style: StrokeStyle(lineWidth: 5))
.rotationEffect(.degrees(-180))
.frame(width: geometry.size.width).overlay(
Circle()
.frame(width: 20, height: 20)
.position(x: 0, y: 0)
}
}

enter image description here

最佳答案

这里你只需要非常基本的几何形状

你需要得到 C点坐标。按照这张图,就是(x, height / 2 - y) .

获取y你需要知道 sin α = CD/CA , 作为 ACD是直角三角形。从哪里y = r * sin α

对于 x我们看一下同一个三角形,但取 cos:cos α = AD/CA , cos α = (r-x)/r => x = r - r * cos α = r * (1 - cos α)

您最不需要的是 α这很简单:如果Pi,半圆的最后一点,因此您只需要将它与进度相乘即可。

struct ContentView: View {
@State
var progress: CGFloat = 0

var body: some View {
GeometryReader { geometry in
let diameter = geometry.size.width
let radius = diameter / 2
let angle = progress * .pi
ZStack {
Circle()
.trim(from: 0.0, to: 0.5)
.stroke(Color.blue, style: StrokeStyle(lineWidth: 5))
.rotationEffect(.degrees(-180))
.frame(width: diameter)
.opacity(0.5)
.overlay(
Circle()
.trim(from: 0.0, to: progress / 2)
.stroke(Color.blue, style: StrokeStyle(lineWidth: 5))
.rotationEffect(.degrees(-180))
.frame(width: diameter)
.overlay(
Circle()
.frame(width: 20, height: 20)
.position(
x: radius * (1 - cos(angle)),
y: geometry.size.height / 2 - radius * sin(angle)
)
)
)
}
}.onAppear {
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
withAnimation {
progress += 0.04
}
if progress >= 1 {
timer.invalidate()
}
}
}
}
}

关于ios - SwiftUI 圆圈位置 x 和 y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68608135/

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