【发布时间】:2021-10-09 08:03:00
【问题描述】:
我有一个视图上的图像。
- 添加旋转以旋转视图
- 添加了拖动手势以平移图像
- 图像未旋转时,拖动手势可以正常工作
- 一旦视图旋转到某个角度,拖动手势就会受到干扰,因为视图已旋转。
那么,如何根据旋转角度调整dragOffset和位置?
代码:
struct ImageView: View {
@State private var dragOffset: CGSize = .zero
@State private var position: CGSize = .zero
@State private var currentRotation: Angle = .zero
@GestureState private var twistAngle: Angle = .zero
public var body: some View {
let rotationGesture = RotationGesture(minimumAngleDelta: .degrees(10))
.updating($twistAngle, body: { (value, state, _) in
state = value
})
.onEnded{ self.currentRotation += $0 }
let dragGesture = DragGesture()
.onChanged({ (value) in
self.dragOffset = value.translation
})
.onEnded({ (value) in
self.position.width += value.translation.width
self.position.height += value.translation.height
self.dragOffset = .zero
})
let gestures = rotationGesture
.simultaneously(with: dragGesture)
Image.placeholder320x192
.offset(x: dragOffset.width + position.width, y: dragOffset.height + position.height)
.rotationEffect(currentRotation + twistAngle)
.gesture(gestures, including: .gesture)
}
}
【问题讨论】:
-
不是很清楚你需要什么。旋转只是一种视觉效果,视图的框架和坐标系(包括在事件中使用,在这种情况下拖动)保持不变。
-
@Asperi - 当我从上到下拖动视图时,它应该从上到下拖动,但由于视图是旋转的,视图会以旋转角度平移/拖动,这对用户不友好。