代码之家  ›  专栏  ›  技术社区  ›  Jabed Dhali

在SwiftUI中拖动后以其上一偏移为中心应用的旋转

  •  0
  • Jabed Dhali  · 技术社区  · 2 年前

    我想在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
                        })
                )
        }
    }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Sweeper    2 年前

    旋转视图 第一 ,而不添加任何偏移,以便正确旋转视图。然后可以添加偏移,这不会影响旋转。

    即切换 rotationEffect offset :

    .rotationEffect(rotation)
    .offset(offset)