SwiftUI中RotationGesture旋转角度无法通过Text显示问题求助
SwiftUI中显示旋转手势最终角度的解决方案
- 问题核心:
finaldegree是Angle类型,Text无法直接接收该类型,必须转换为字符串格式才能正常显示。 - 同时原手势逻辑存在角度丢失问题:直接将手势结束值赋值给
finaldegree会覆盖之前的累计角度,需要修正为累加逻辑。
修正后的完整代码
@State var degree: Angle = .zero @State var finaldegree: Angle = .zero var body: some View { VStack { Image("Encoder_White1") .padding(100) .scaleEffect(2) .rotationEffect(degree + finaldegree) .gesture( RotationGesture() .onChanged { value in degree = value } .onEnded { _ in // 累加临时拖动的角度到最终角度 finaldegree += degree degree = .zero } ) // 格式化显示最终角度,保留1位小数并添加单位 Text("最终角度:\(String(format: "%.1f", finaldegree.degrees))°") .padding(.top, 20) } }
关键说明
- 角度转换显示:通过
finaldegree.degrees获取角度的数值,用String(format:)格式化后传入Text,既解决了类型不匹配问题,也让显示更美观。 - 修复累计逻辑:手势结束时将临时拖动的
degree累加到finaldegree,再重置degree为0,保证每次旋转的角度都会被保留,符合常规旋转交互的预期。
内容的提问来源于stack exchange,提问作者Alex Kocha
相关产品推荐
相关产品推荐

