今天闲来无事,使用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. hdu多校第六场1008 (hdu6641)TDL 暴力

    题意: 设f(n,m)为比n大的第m个和n互质的数,给定一个k=(f(n,m)-n)xor n和m,求最小的n 题解: 对于给定的m而言,一个k周围合法的n分布的很密,因此在k的邻域暴力搜索即可. # ...

  2. linux安装&卸载IB网卡(mellanox)驱动

    由于工作上的需求,需要在redhat6.5服务器上面安装mellanox品牌的IB网卡,故整理了一个安装&卸载IB网卡驱动的教程: 一.安装 1)下载相应操作系统驱动 http://www.m ...

  3. Devstack — screen 调试工具的使用

    目录 目录 为什么要使用 screen 工具 启动 screen screen 的切换常用 退出和重新连接 screen Restart Openstack Services screen 指令选项总 ...

  4. PAT_A1102#Invert a Binary Tree

    Source: PAT A1102 Invert a Binary Tree (25 分) Description: The following is from Max Howell @twitter ...

  5. 剑指offer——24链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点.   题解: 1.普通解法,先遍历一遍计算链表长度,然后遍历到倒数第k个节点: 2.只遍历一遍,使用双指针,使得头尾指针位差为k,那么当尾指针为空时 ...

  6. 「LibreOJ NOI Round #2」签到游戏

    题目 瞎猜一下我们只要\(n\)次询问就能确定出\(\{A_i\}\)来 感受一下大概是询问的区间越长代价就越小,比如询问\([l,n]\)或\([1,r]\)的代价肯定不会超过\([l,r]\) 所 ...

  7. VS2017打包

    转载:https://blog.csdn.net/Houheshuai/article/details/78518097 在要打包项目的解决方案 右键→添加→ 新建项目 ​ 后出现如下选择 ​ 如果没 ...

  8. 钉钉小程序----使用阿里的F2图表

    在钉钉小程序中使用F2的图表遇见很多问题 不能点击或者点击错乱的问题还没有解决,因为我解决不了........................... ------------------------- ...

  9. Java 基础 - 内存泄露Memory leak & 内存溢出Out of memory

    内存泄露 & 内存溢出 关系 https://www.cnblogs.com/panxuejun/p/5883044.html 内存泄露的6种情况: https://blog.csdn.net ...

  10. CF Round #427 (Div. 2) C. Star sky [dp]

    题目链接就长这样子? time limit per test 2 seconds memory limit per test 256 megabytes   Description The Carte ...