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
    
  • 相关阅读:
    Spring Boot → 08:嵌入式Servlet容器自定义
    Spring Boot → 09:使用外置Servlet容器_tomcat9.0
    Spring Boot → 07:错误处理机制
    Spring Boot → 06:项目实战-账单管理系统
    Spring Boot → 05:Web开发
    zzz Objective-C的消息传递机制
    Objective-C中的SEL、IMP和Class类型(转)
    zzzObjective-C的动态特性
    zzz KVC/KVO原理详解及编程指南
    zzzzz iOS绘图教程
  • 原文地址:https://www.cnblogs.com/kingbo/p/11132533.html
Copyright © 2011-2022 走看看