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

实战需求 SwiftUI 实现丝滑拖拽效果GestureState DragGesture
本文价值与收获 看完本文后,您将能够作出下面的界面 SwiftUI|SwiftUI 实现丝滑拖拽效果GestureState DragGesture(教程含源码)
文章图片
截屏2020-11-22 下午7.05.58.png 看完本文您将掌握的技能

  • getsture
  • DragGesture
  • @GestureState
  • .onEnded
基础知识 @GestureState 属性包装程序类型,当用户执行手势时更新属性,并在手势结束时将属性重置回其初始状态。
@propertyWrapper @frozen struct GestureState

总览
SwiftUI为我们提供了一个特定的属性包装器,用于跟踪手势状态,称为@GestureState。尽管您可以使用简单的@State属性包装器完成相同的操作,但@GestureState它具有附加功能,即在手势结束时,它会自动将属性设置回其初始值。
@GestureStateupdating(_:body:)@GestureState
【SwiftUI|SwiftUI 实现丝滑拖拽效果GestureState DragGesture(教程含源码)】向添加长按手势Circle,并在手势过程中通过将属性声明为来更新界面:@GestureState
struct SimpleLongPressGestureView: View { @GestureState var isDetectingLongPress = falsevar 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) } }

实战代码

    推荐阅读