美文网首页
SwiftUI—如何使一个视图同时支持多种的手势

SwiftUI—如何使一个视图同时支持多种的手势

作者: anny_4243 | 来源:发表于2020-07-15 15:49 被阅读0次

原文链接: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())
        }
        
    }
}
image

相关文章

网友评论

      本文标题:SwiftUI—如何使一个视图同时支持多种的手势

      本文链接:https://www.haomeiwen.com/subject/fwgdhktx.html