swift4.2 - UIDynamic
1. SB放上俩 imageview,拖线成类属性
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var box2: UIImageView!
@IBOutlet weak var box1: UIImageView!
//1.s创建仿真器
private lazy var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: self.view)
override func viewDidLoad() {
super.viewDidLoad()
//设置背景颜色图
view.backgroundColor = UIColor(patternImage: UIImage.init(named: "background") ?? UIImage())
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let point = touches.first?.location(in: view)
snap(point: point ?? CGPoint.zero)
gravity()
collision()
push()
}
///重力
func gravity() {
//2.创建仿真行为
let behavior = UIGravityBehavior(items: [box1])
//重力方向,重力的力度
// behavior.gravityDirection = CGVector(dx: 10, dy: -10)
// //角度
// behavior.angle = -CGFloat.pi
//
// //量级:速度
// behavior.magnitude = 5
//设置角度和量级
behavior.setAngle( CGFloat.pi/2, magnitude: 5)
//3. 仿真器添加仿真行为
animator.addBehavior(behavior)
}
/// 碰撞
func collision() {
//2.创建仿真行为
let behavior = UICollisionBehavior(items: [box1, box2])
//添加碰撞边界: view的bounds
behavior.translatesReferenceBoundsIntoBoundary = true
// items: 只碰撞元素
// boundaries:只碰撞边界
// everything:任何东西
//碰撞模式
behavior.collisionMode = UICollisionBehavior.Mode.everything
//设置边界的内边距
// behavior.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
let str : NSString = "123" // NSString 遵循NSCopying
let str1 : String = "123" //String 没有遵循NSCopying
//添加一个边界
// behavior.addBoundary(withIdentifier: str, from: CGPoint(x: 0, y: 500), to: CGPoint(x: view.frame.size.width, y: 300))
//设置代理
behavior.collisionDelegate = self
//3. 仿真器添加仿真行为
animator.addBehavior(behavior)
}
/// 创建捕捉行为
func snap(point:CGPoint){
//FIXME:如果想要多次执行p捕捉行为,必须先移除添加捕捉行为
animator.removeAllBehaviors()
let behavior = UISnapBehavior(item: box2, snapTo: point)
//动画流畅度
behavior.damping = 1
animator.addBehavior(behavior)
}
func push(){
// continuous:一直推
// instantaneous:推一次
//1.创建推行为
let behavior = UIPushBehavior(items: [box1], mode: UIPushBehavior.Mode.instantaneous)
//设置方向
behavior.pushDirection = CGVector(dx: 0, dy: -8)
//2. 仿真器添加仿真行为
animator.addBehavior(behavior)
}
}
extension ViewController:UICollisionBehaviorDelegate{
func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item1: UIDynamicItem, with item2: UIDynamicItem, at p: CGPoint){
print("开始碰撞 元素 - 元素", p)
}
func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item1: UIDynamicItem, with item2: UIDynamicItem){
print("结束碰撞 元素 - 元素")
}
func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?, at p: CGPoint){
print("开始碰撞 元素 - 边界", p)
}
func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?){
print("结束碰撞 元素 - 边界")
}
}
swift4.2 - UIDynamic的更多相关文章
- UIDynamic(简单介绍)
一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现 ...
- 实现步骤: 推送&传感器&UIDynamic
一.本地通知基本使用: #01.请求授权(8.0以前默人授权) #02.创建本地通知 #03.设置通知内容 #04.设置通知时间(多久后发通知) #05.发送通知 二.本地通知而外设置: #01.设置 ...
- iOS开发——高级篇——UIDynamic 物理引擎
一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...
- UIDynamic动画
UIDynamic是从iOS7开始引入的技术 属于UIkit框架 可以模拟显示生活中的物理现象 如碰撞 抖动 摆动等 一.使用UIDynamic步骤: 1.创建一个动力效果器UIDynamicAnim ...
- UIDynamic(物理仿真)
简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如: 重力.弹性碰撞等现象 物理引 ...
- iOS开发拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...
- iOS开发拓展篇—UIDynamic(捕捉行为)
iOS开发拓展篇—UIDynamic(捕捉行为) 一.简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype ...
- UIDynamic仿物理引擎-浮动碰撞效果-b
最近产品提了个需求(电商的APP-两鲜),需要在APP背景加上几个水果图案在那里无规则缓慢游荡...模仿 天天果园 APP的.好吧,那我就在网上找了很多文章,总结一下写个demo.效果如下: Mou ...
随机推荐
- Delphi 文件目录相关的操作函数
需要User SysUtils 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: ...
- ACM__最小生成树之prime
今天做了一道题,根本没想到最小生成树,稀里糊涂的浪费了很多时间,复习一下 转载自https://www.cnblogs.com/zhangming-blog/p/5414514.html Prim算法 ...
- python语言中的数据类型
一.内存管理 1.python解释器的垃圾回收机制 垃圾:当一个值上没有人绑定任何变量名时(当引用计数为0),该值就是一个垃圾. python解释器运行时会检测值的引用计数,当引用计数=0该值会被清除 ...
- Mysql(MyISAM和InnoDB)及Btree和索引优化
MYSQL 一.引擎 mysql:MySQL是一个关系型数据库管理系统,其中有两种引擎最为常见MyISAM和InnoDB MyISAM(非聚集索引) MySQL 5.0 之前的默认数据库引擎,最为常 ...
- Zabbix 3.0 LTS安装配置
关于Zabbix监控项类型的官网介绍: https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes zabbix ...
- OGNL表达式(转载)
OGNL表达式(转载) 1.什么是OGNL OGNL:Object Graphic Navigation Language(对象图导航语言) 它是Struts2中默认的表达式语言.使用表达式需要借 ...
- Zookeeper与HBse安装过程纪录
1 zookeeper安装 1.1 环境变量 1.2 配置zoo.cfg 初次使用 ZooKeeper 时, 需要将 $ZOOKEEPER_HOME/conf 目录下的 zoo_sample.cfg ...
- GDI+ 实现透明水印和文字
最近给<JPEG浏览缩放器>增加了水印功能,在设计的过程中,参考了网上的文章,但是发现文章使用的GDI+ API封装包不是我现在使用的那一套,目前DELPHI使用的GDI+ API封装包有 ...
- float double
float : 单精度浮点数 double : 双精度浮点数 两者的主要区别如下: 01.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02.有效数字位数不 ...
- centos7升级内核
载入elrepo源,搜索内核更新资源,并进行更新操作. 具体实验步骤: # 载入公钥rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ...