SwiftUI 实现丝滑拖拽效果GestureState DragGesture(教程含源码)

实战需求

SwiftUI 实现丝滑拖拽效果GestureState DragGesture

本文价值与收获

看完本文后,您将能够作出下面的界面

SwiftUI 实现丝滑拖拽效果GestureState DragGesture(教程含源码)_第1张图片
截屏2020-11-22 下午7.05.58.png

看完本文您将掌握的技能

  • getsture
  • DragGesture
  • @GestureState
  • .onEnded

基础知识

@GestureState

属性包装程序类型,当用户执行手势时更新属性,并在手势结束时将属性重置回其初始状态。

@propertyWrapper @frozen struct GestureState

总览

SwiftUI为我们提供了一个特定的属性包装器,用于跟踪手势状态,称为@GestureState。尽管您可以使用简单的@State属性包装器完成相同的操作,但@GestureState它具有附加功能,即在手势结束时,它会自动将属性设置回其初始值。

@GestureStateupdating(_:body:)@GestureState

向添加长按手势Circle,并在手势过程中通过将属性声明为来更新界面:@GestureState

struct SimpleLongPressGestureView: View {
    @GestureState var isDetectingLongPress = false

    var longPress: some Gesture {
        LongPressGesture(minimumDuration: 3)
            .updating($isDetectingLongPress) { currentstate, gestureState, transaction in
                gestureState = currentstate
            }
    }

    var body: some View {
        Circle()
            .fill(self.isDetectingLongPress ? Color.red : Color.green)
            .frame(width: 100, height: 100, alignment: .center)
            .gesture(longPress)
    }
}

实战代码

你可能感兴趣的:(SwiftUI 实现丝滑拖拽效果GestureState DragGesture(教程含源码))