您可以使一个视图同时支持多种手势,例如给一个视图同时添加拖动手势和旋转手势。本节课演示如何给一个视图同时添加长按手势和拖动手势。
示例代码:
struct ContentView : View { @State var offset: CGSize = .zero //表示视图被拖动的距离 @GestureState var isLongPressed = false var body: some View { let longPressGesture = LongPressGesture() .updating($isLongPressed) { value, state, transcation in print(value, state, transcation) state = value } .onEnded { (value) in print(value) } let dragGesture = DragGesture() .onChanged { (value) in //响应拖动手势的状态变化 print(value.startLocation, value.location, value.translation) self.offset = value.translation } .onEnded { (value) in if(abs(value.translation.width) >= 40 || abs(value.translation.height - (-260)) >= 40){ self.offset = .zero } else{ self.offset = CGSize(width: 0, height: -260) } } .simultaneously(with: longPressGesture) return VStack{ Circle() .fill(Color.black) .opacity(0.1) .frame(width: 200, height: 200) .offset(CGSize(width: 0, height: -50)) Circle() .fill(Color.orange) .frame(width: 200, height: 200) .offset(offset) .gesture(dragGesture) .scaleEffect(isLongPressed ? 1.4 : 1) .animation(.spring()) } } }