今天闲来无事,使用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(width: 0, height: 0)
@ObjectBinding var dragObj = KBDragObjectBind()
@State var offset2 :CGSize = CGSize(width: 0, height: 0) var body:some View {
VStack {
Text("Default Setting")
Image(systemName: "hand.draw.fill")
.resizable()
.frame(width: 100, height: 100)
.offset(offset)
.gesture(
DragGesture()
.onEnded({ (value) in
print("onEnd:\(value)")
withAnimation(.spring()) {
self.offset = CGSize(width: 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(width: 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(width: 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

SwiftUI 实现Draggesture效果的更多相关文章

  1. 关于Mongodb的全面总结

    MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...

  2. 解析SwiftUI布局细节(二)循环轮播+复杂布局

    前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...

  3. SwiftUI学习(一)

    总览 如果你想要入门 SwiftUI 的使用,那 Apple 这次给出的官方教程绝对给力.这个教程提供了非常详尽的步骤和说明,网页的交互也是一流,是觉得值得看和动手学习的参考. 不过,SwiftUI ...

  4. SwiftUI学习(二)

    教程 2 - Building Lists and Navigation Section 4 - Step 2: 静态 List var body: some View { List { Landma ...

  5. SwiftUI or Flutter ?

    看到这篇好文,忍不住想分享一下 本文转自https://juejin.im/post/5d05b45bf265da1bcc193ff4 版权归原文所有 ------------------------ ...

  6. SwiftUI 实战:从 0 到 1 研发一个 App

    心得感悟 起初看到 WWDC 上的演示 SwiftUI 时,我就觉得 SwiftUI 有种陌生的熟悉感(声明式语法),所以体验下,看看有没有什么启发. 先说下整体项目完成下来的感受: 用 Swift ...

  7. 基于 SwiftUI 创建一个可删除、可添加列表项的列表

    执行环境 macOS Mojave: 10.14.5 xcode: Version 11.0 beta 6 (11M392q) 预览效果 完整代码 import SwiftUI class Item: ...

  8. SwiftUI - 一步一步教你使用UIViewRepresentable封装网络加载视图(UIActivityIndicatorView)

    概述 网络加载视图,在一个联网的APP上可以讲得上是必须要的组件,在SwiftUI中它并没有提供如 UIKit 中的UIActivityIndicatorView直接提供给我们调用,但是我们可以通过 ...

  9. SwiftUI - 一起来仿写微信APP之一首页列表视图

    简介 最近在学习 SwiftUI ,我一般都是先去学习界面布局,所以就想着仿写一下经常使用的软件的界面,所以先拿微信开刀.因为不想一次性发太多的内容,所以只好将主题分解,一部分一部分地去讲,接下来我们 ...

随机推荐

  1. kafka拦截器原理|案例实操

    拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑. 对于producer而言,interceptor使得用 ...

  2. docker快速安装kibana

    一.拉取镜像 docker pull kibana:5.6.9 二.启动容器 docker run --name kibana -e ELASTICSEARCH_URL=http://10.0.0.1 ...

  3. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded2

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  4. iOS7 AVAudioRecorder不能录音

    今天写录音代码的时候,在iOS7以下就可以录音,但是iOS7上不可以,后来才知道iOS7录音方式变了,加上下面的代码就可以了,bingo AVAudioSession *audioSession = ...

  5. 执行SQL语句---SELECT

    1.通常从MySQL数据库中检索数据有4个步骤: (1)发出查询: 用mysql_query发出查询. (2)检索数据: 用mysql_store_result/mysql_use_result (3 ...

  6. Java-Class-@I:org.springframework.validation.annotation.Validated

    ylbtech-Java-Class-@I:org.springframework.validation.annotation.Validated 1.返回顶部   2.返回顶部 1. package ...

  7. 第37讲 谈谈Spring Bean的生命周期和作用域

    在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...

  8. 剑指offer——06二叉树的下一个节点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针.   题目的意思是,在一颗二叉树的中序遍历中,给出其中一 ...

  9. webAPI(DOM) 2.1 获取页面元素 | 事件1 | 属性操作 | 节点 | 创建元素 | 事件2

    js分三个部分: ECMAScript标准:js的基本语法 DOM:Ducument Object Model--->文档对象模型--->操作页面的元素 BOM:Browser Objec ...

  10. 6-Python操作MySQL-增(insert)-删(delete)-改(update)-查(select)

    增删改 from pymysql import * def main(): # 创建Connection连接 conn = connect(host='localhost',port=3306,dat ...