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

实战需求

SwiftUI 实现丝滑拖拽效果GestureState DragGesture

本文价值与收获

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

截屏2020-11-22 下午7.05.58.png

截屏2020-11-22 下午7.05.58.png

看完本文您将掌握的技能


基础知识

@GestureState

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

@propertyWrapper @frozen struct GestureState<Value>

总览

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)
top Created with Sketch.