实战需求
SwiftUI 实现丝滑拖拽效果GestureState DragGesture
本文价值与收获
看完本文后,您将能够作出下面的界面

截屏2020-11-22 下午7.05.58.png
看完本文您将掌握的技能
基础知识
属性包装程序类型,当用户执行手势时更新属性,并在手势结束时将属性重置回其初始状态。
@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)
实战需求
SwiftUI 实现丝滑拖拽效果GestureState DragGesture
本文价值与收获
看完本文后,您将能够作出下面的界面

截屏2020-11-22 下午7.05.58.png
看完本文您将掌握的技能
基础知识
属性包装程序类型,当用户执行手势时更新属性,并在手势结束时将属性重置回其初始状态。
@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)
实战需求
SwiftUI 实现丝滑拖拽效果GestureState DragGesture
本文价值与收获
看完本文后,您将能够作出下面的界面

截屏2020-11-22 下午7.05.58.png
看完本文您将掌握的技能
基础知识
属性包装程序类型,当用户执行手势时更新属性,并在手势结束时将属性重置回其初始状态。
@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)