zoukankan      html  css  js  c++  java
  • SwiftUI 实现Draggesture效果

       今天闲来无事,使用SwiftUI 实现拖动,并且返回的动态效果。代码不多。。。。。

    效果如下:

    代码如下:

    import SwiftUI
    import Combine
    
    class KBDragObjectBind: BindableObject {
        var didChange = PassthroughSubject<KBDragObjectBind,Never>()
        var mass:Double = 1.0 {
            didSet{
                massString = String(format: "%.2f", mass)
                self.didChange.send(self)
            }
        }
        var massString = "1.0" {
            didSet {
                self.didChange.send(self)
            }
        }
        var stiffness:Double = 100.0 {
            didSet{
                stiffnessString = String(format: "%.0f", stiffness)
                self.didChange.send(self)
            }
        }
        
        var stiffnessString = "100.0" {
            didSet {
                self.didChange.send(self)
            }
        }
        
        var damping:Double = 10.0 {
            didSet {
                dampingString = String(format: "%.0f", damping)
                self.didChange.send(self)
            }
        }
        var dampingString = "10.0"{
            didSet {
                self.didChange.send(self)
            }
        }
        
        var  initialVelocity:Double = 0.0 {
            didSet {
                initialVelocityString = String(format: "%.0f", initialVelocity)
                self.didChange.send(self)
            }
        }
        var initialVelocityString = "0.0"{
            didSet{
                self.didChange.send(self)
            }
        }
    }
    
    struct KBDragGestureView : View {
        @State var offset :CGSize = CGSize( 0, height: 0)
        @ObjectBinding var dragObj = KBDragObjectBind()
        @State var offset2 :CGSize = CGSize( 0, height: 0)
        
        var body:some View {
            VStack {
                Text("Default Setting")
                Image(systemName: "hand.draw.fill")
                    .resizable()
                    .frame( 100, height: 100)
                    .offset(offset)
                    .gesture(
                        DragGesture()
                            .onEnded({ (value) in
                                print("onEnd:(value)")
                                withAnimation(.spring()) {
                                    self.offset = CGSize( 0, height: 0)
                                }
                            })
                            .onChanged({ (value) in
                                print("onChanged: (value)")
                                self.offset = value.translation
                            })
                    ).zIndex(10)
                Divider()
                HStack(){
                    Text("质量弥撒曲mass((self.dragObj.massString)):")//
                    Slider(value: $dragObj.mass, from: 0.1, through: 1.0, by: 0.01)
                }
                HStack(){
                    Text("刚度stiffness((self.dragObj.stiffnessString)):")
                    Slider(value: $dragObj.stiffness, from: 0, through: 100.0, by: 1)
                }
                HStack(){
                    Text("阻尼dampin((self.dragObj.dampingString)):")
                    Slider(value: $dragObj.damping, from: 0, through: 100.0, by: 1)
                }
                HStack(){
                    Text("初始速度initialVelocity((self.dragObj.initialVelocityString)):")
                    Slider(value: $dragObj.initialVelocity, from: 0.0, through: 100.0, by: 1)
                }
                
                Image(systemName: "hand.draw")
                    .resizable()
                    .frame( 100, height: 100)
                    .offset(offset2)
                    .gesture(
                        DragGesture()
                            .onEnded({ (value) in
                                print("onEnd:(value)")
                                withAnimation(.spring(mass: self.dragObj.mass,
                                                      stiffness: self.dragObj.stiffness,
                                                      damping: self.dragObj.damping,
                                                      initialVelocity: self.dragObj.initialVelocity)) {
                                    self.offset2 = CGSize( 0, height: 0)
                                }
                            })
                            .onChanged({ (value) in
                                print("onChanged: (value)")
                                self.offset2 = value.translation
                            })
                )
                
                
            }.padding()
        }
    }
    
    #if DEBUG
    struct KBDragGestureView_Previews : PreviewProvider {
        static var previews: some View {
            KBDragGestureView()
        }
    }
    #endif
    
  • 相关阅读:
    宫立秋20201015-3 每周例行报告
    宫立秋 20201008-1 每周例行报告
    分析“中国铁路12306”查询某个火车经过的车站和预计到达时间的request请求和respond响应。
    来自童晶老师的游戏开发课程作业
    飞机大战
    总结
    20201207-总结
    实时时钟
    作业要求 20201126-1 每周例行报告
    要求 20201120-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/kingbo/p/11132533.html
Copyright © 2011-2022 走看看