在SwiftUI中拖动后,应用旋转使其上一个偏移居中

nkoocmlb  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(97)

我想在swiftUI中创建一个视图,这样我就可以拖动视图并根据其当前偏移量旋转视图。但不幸的是,在平移视图后,当我尝试旋转时,它以其基础偏移为中心旋转,而不是视图的当前中心。我现在正在寻找一个精确的解决方案,使视图将从其当前中心旋转。我的代码在这里是为了更好地理解:

struct MyGestureView : View {
    
    @State private var lastOffset : CGSize = .zero
    @State private var offset : CGSize = .zero
    
    @State private var lastRotation : Angle = .zero
    @State private var rotation : Angle = .zero
    
    var body: some View {
        Rectangle()
            .frame(width: 100, height: 100)
            .offset(offset)
            .rotationEffect(rotation)
            .gesture(
                DragGesture(minimumDistance: 0)
                    .onChanged({ value in
                        offset.width = lastOffset.width + value.translation.width
                        offset.height = lastOffset.height + value.translation.height
                    })
                    .onEnded({ value in
                        lastOffset = offset
                    })
            )
            .gesture(
                RotationGesture(minimumAngleDelta: Angle.degrees(3))
                    .onChanged({ angle in
                        rotation = lastRotation + angle
                    })
                    .onEnded({ angle in
                        lastRotation = rotation
                    })
            )
    }
}

字符串

63lcw9qa

63lcw9qa1#

先 * 旋转视图,不添加任何偏移,以便正确旋转视图。然后可以添加偏移,这不会影响旋转。
即交换rotationEffectoffset的顺序:

.rotationEffect(rotation)
.offset(offset)

字符串

相关问题