今天闲来无事,使用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. PHP PDO 事务与自动提交

    现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的. 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isola ...

  2. 【历年真题】斐波那契数列logn做法

    描述 [题解] 用矩阵乘法加速递推 [0 1] [1 1] [f[n-1]] [f[n-2]] = [f[n-1]] [f[n]] 求A矩阵的n-2次幂然后再乘B矩阵. 结果矩阵中的第二行第一列就是f ...

  3. lua数组和数据类型转换

    一.lua数组 Lua数组大小不固定,下标是从  1开始. --数组 arr={"aaa","bbb","ccc"} --使用数值 for通 ...

  4. csp-s模拟测试96

    csp-s模拟测试96 $T1$一眼慢速乘,$T2$稍证一手最优性尝试用神奇数据结构优化,无果,弃.$T3$暴力+信仰. 100 03:16:38 95 03:16:56 35 03:17:10 23 ...

  5. sqlserver中常用的windows命令行的操作

    1.删除指定目录下指定时间之前的文件: ), ), @sqltxtdel varchar(max) --指定的删除时间 set @deldate= '-8' --指定的删除路径 set @bakpat ...

  6. RN书签

    Bookmarks 书签栏 门户 配置reactNative(RN)过程中 出现react-native:command not... - 简书 * React-NativeChannel - sma ...

  7. 纯CSS3制作的“Ribbons”效果

    在看具体每个demo之前,我们一起来看下面一个截图: 上图是一个典型的“Ribbons”各部位的示意图,但每一个“Ribbons”并不会都使用上图示意的各个部分,在下面的实例中大家可以明显的看 到或者 ...

  8. 如果一个文件块有130M,请问有多少个mapper

    如果一个文件块有130M,请问有多少个mapper 130M的文件将被分成2个mapper. 原因:根据FileInputFormat类 有一个成员变量 private static final do ...

  9. API文档管理工具

    系统庞大之后,前后端分离开发,前端调用后端提供的接口,请求协议一般是 HTTP,数据格式一般是 JSON.后台只负责数据的提供和计算,而完全不处理展现逻辑和样式:前端则负责拿到数据,组织数据并展现的工 ...

  10. [转载]Spring AOP 深入剖析

    转载自 http://www.cnblogs.com/digdeep/p/4528353.html 多谢@digdeep AOP是Spring提供的关键特性之一.AOP即面向切面编程,是OOP编程的有 ...