提问人:dramadom 提问时间:11/17/2023 更新时间:11/17/2023 访问量:25
在 SwiftUI 中围绕圆圈旋转图像,使图像在屏幕上保持直立
Rotating images around a circle in SwiftUI, keep images upright on screen
问:
我有 3 张图片,都在一个圆圈的不同位置。我希望图像以顺时针方向绕圆圈旋转,同时在绕圆圈的整个旅程中保持直立在屏幕上。在下面的代码中,它们沿顺时针方向移动,但当它们相对于屏幕在周边移动时不会保持直立。它们相对于圆的中间在圆圈周围保持直立。
有谁知道如何确保图像相对于屏幕保持直立?此外,如果有人建议尝试反向旋转,请尝试在我的旋转角度变量中添加一个“-”符号,您会看到它只是逆时针移动。
谢谢,这是我的代码:
import SwiftUI
struct AnotherCircleTry: View {
@State private var rotationAngle = 0.0
var body: some View {
VStack {
Spacer()
Text("Rotating images!")
Spacer()
ZStack {
Circle()
.stroke()
.frame(width: 250, height: 250)
.hidden()
// Image 1
Image("image-1")
.resizable()
.frame(width: 50, height: 50)
.clipShape(Circle())
.offset(x: cos(CGFloat(rotationAngle) / 180.0 * .pi) * 100,
y: sin(CGFloat(rotationAngle) / 180.0 * .pi) * 100)
.rotationEffect(.degrees(rotationAngle), anchor: .center)
// Image 2
Image("image-2")
.resizable()
.frame(width: 50, height: 50)
.clipShape(Circle())
.offset(x: cos(CGFloat(rotationAngle) / 180.0 * .pi) * 100,
y: sin(CGFloat(rotationAngle) / 180.0 * .pi) * 100)
.rotationEffect(.degrees((rotationAngle + 120)), anchor: .center)
// Image 3
Image("image-3")
.resizable()
.frame(width: 50, height: 50)
.clipShape(Circle())
.offset(x: cos(CGFloat(rotationAngle) / 180.0 * .pi) * 100,
y: sin(CGFloat(rotationAngle) / 180.0 * .pi) * 100)
.rotationEffect(.degrees((rotationAngle + 240)), anchor: .center)
}
.padding(.horizontal)
Spacer()
}
.onAppear {
withAnimation(Animation.linear(duration: 8).repeatForever(autoreverses: false)) {
rotationAngle += 360
}
}
}
}
#Preview{
AnotherCircleTry()
}
答:
1赞
rob mayoff
11/17/2023
#1
您需要在修饰符之前应用相反的旋转:offset
Image("image-1")
.resizable()
.frame(width: 50, height: 50)
.clipShape(Circle())
.rotationEffect(.degrees(-rotationAngle), anchor: .center) // <- NEW
.offset(
x: cos(CGFloat(rotationAngle) / 180.0 * .pi) * 100,
y: sin(CGFloat(rotationAngle) / 180.0 * .pi) * 100
)
.rotationEffect(.degrees(rotationAngle), anchor: .center)
评论