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(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效果的更多相关文章
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- 解析SwiftUI布局细节(二)循环轮播+复杂布局
前言 上一篇我们总结的主要是VStack里面的东西,由他延伸到 @ViewBuilder, 接着我们上一篇总结的我们这篇内容主要说的是下面的几点,在这些东西说完后我准备解析一下苹果在SiwftUI文档 ...
- SwiftUI学习(一)
总览 如果你想要入门 SwiftUI 的使用,那 Apple 这次给出的官方教程绝对给力.这个教程提供了非常详尽的步骤和说明,网页的交互也是一流,是觉得值得看和动手学习的参考. 不过,SwiftUI ...
- SwiftUI学习(二)
教程 2 - Building Lists and Navigation Section 4 - Step 2: 静态 List var body: some View { List { Landma ...
- SwiftUI or Flutter ?
看到这篇好文,忍不住想分享一下 本文转自https://juejin.im/post/5d05b45bf265da1bcc193ff4 版权归原文所有 ------------------------ ...
- SwiftUI 实战:从 0 到 1 研发一个 App
心得感悟 起初看到 WWDC 上的演示 SwiftUI 时,我就觉得 SwiftUI 有种陌生的熟悉感(声明式语法),所以体验下,看看有没有什么启发. 先说下整体项目完成下来的感受: 用 Swift ...
- 基于 SwiftUI 创建一个可删除、可添加列表项的列表
执行环境 macOS Mojave: 10.14.5 xcode: Version 11.0 beta 6 (11M392q) 预览效果 完整代码 import SwiftUI class Item: ...
- SwiftUI - 一步一步教你使用UIViewRepresentable封装网络加载视图(UIActivityIndicatorView)
概述 网络加载视图,在一个联网的APP上可以讲得上是必须要的组件,在SwiftUI中它并没有提供如 UIKit 中的UIActivityIndicatorView直接提供给我们调用,但是我们可以通过 ...
- SwiftUI - 一起来仿写微信APP之一首页列表视图
简介 最近在学习 SwiftUI ,我一般都是先去学习界面布局,所以就想着仿写一下经常使用的软件的界面,所以先拿微信开刀.因为不想一次性发太多的内容,所以只好将主题分解,一部分一部分地去讲,接下来我们 ...
随机推荐
- QueryList getData()方法中多次调用来实现递归多级采集。
<?php require 'QueryList/vendor/autoload.php'; use QL\QueryList; //获取每个li里面的h3标签内容,和class为item的元素 ...
- kafka集群安装和使用
kafka(1)kafka是一个分布式的消息缓存系统(2)kafka集群中的服务器都叫做broker(3)kafka有两类客户端,一个叫做producer(消息生产者),一类叫做consumer(消息 ...
- string替换所有指定字符串(C++)【转载】
转载自https://blog.csdn.net/a_222850215/article/details/79985504 C++的string提供了replace方法来实现字符串的替换,但是对于将字 ...
- vue+webpack项目中px2rem的例子
项目环境搭建此处省略,不再赘述,需要的请查阅相关资料. 本篇只介绍,如果在vue+webpack的项目中配置,把px自动转为rem 第一步安装 npm install postcss-px2r ...
- 快速排序--Python实现
快速排序算法:1.选择一个基准数2.小于基准数的放左边,大于基准数的放右边3.利用递归的方法针对左边的数据进行快速排序,再对右边的数据进行快速排序4.递归停止的条件:数组为空或者只有一个元素 时间复杂 ...
- 10.1 Nested vectored interrupt controller (NVIC) 嵌套矢量中断控制器
特点 60个可屏蔽中断通道(不包含16个Cortex™-M3的中断线): 16个可编程的优先等级(使用了4位中断优先级): 低延迟的异常和中断处理: 电源管理控制: 系统控制寄存器的实现: 1. 中断 ...
- Codeforces 1163A - Eating Soup
题目链接:http://codeforces.com/problemset/problem/1163/A 题意:n 只猫围成一圈,离开 m 只,最多剩下几组猫. 思路:当 n == m 即猫都离开时 ...
- Python3 From Zero——{最初的意识:003~数字、日期、时间}
一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...
- webservice - 使用JAX-WS注解的方式快速搭建服务端和客户端
1.Define the interface import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebRe ...
- 查看网站pv
PV(page view),即页面浏览量,或点击量:通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.简单来解释PV,那就是一个访问者在24小时(0点到24点)内到底看了你网站多少个页面.这 ...