原文链接:https://github.com/fzhlee/SwiftUI-Guide#-%E7%AC%AC6%E8%8A%82longpressgestureanddraggesture-
您可以使一个视图同时支持多种手势,例如给一个视图同时添加拖动手势和旋转手势。本节课演示如何给一个视图同时添加长按手势和拖动手势。
示例代码:
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())
}
}
}

网友评论