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的更多相关文章

  1. UIDynamic(简单介绍)

    一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞等现 ...

  2. 实现步骤: 推送&传感器&UIDynamic

    一.本地通知基本使用: #01.请求授权(8.0以前默人授权) #02.创建本地通知 #03.设置通知内容 #04.设置通知时间(多久后发通知) #05.发送通知 二.本地通知而外设置: #01.设置 ...

  3. iOS开发——高级篇——UIDynamic 物理引擎

    一.UIDynamic 1.简介什么是UIDynamicUIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力.弹性碰撞 ...

  4. UIDynamic动画

    UIDynamic是从iOS7开始引入的技术 属于UIkit框架 可以模拟显示生活中的物理现象 如碰撞 抖动 摆动等 一.使用UIDynamic步骤: 1.创建一个动力效果器UIDynamicAnim ...

  5. UIDynamic(物理仿真)

    简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如: 重力.弹性碰撞等现象 物理引 ...

  6. iOS开发拓展篇—UIDynamic(简单介绍)

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  7. iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)

    iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...

  8. iOS开发拓展篇—UIDynamic(捕捉行为)

    iOS开发拓展篇—UIDynamic(捕捉行为) 一.简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype ...

  9. UIDynamic仿物理引擎-浮动碰撞效果-b

    最近产品提了个需求(电商的APP-两鲜),需要在APP背景加上几个水果图案在那里无规则缓慢游荡...模仿 天天果园 APP的.好吧,那我就在网上找了很多文章,总结一下写个demo.效果如下: Mou ...

随机推荐

  1. Delphi 文件目录相关的操作函数

    需要User   SysUtils 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: ...

  2. ACM__最小生成树之prime

    今天做了一道题,根本没想到最小生成树,稀里糊涂的浪费了很多时间,复习一下 转载自https://www.cnblogs.com/zhangming-blog/p/5414514.html Prim算法 ...

  3. python语言中的数据类型

    一.内存管理 1.python解释器的垃圾回收机制 垃圾:当一个值上没有人绑定任何变量名时(当引用计数为0),该值就是一个垃圾. python解释器运行时会检测值的引用计数,当引用计数=0该值会被清除 ...

  4. Mysql(MyISAM和InnoDB)及Btree和索引优化

    MYSQL 一.引擎 mysql:MySQL是一个关系型数据库管理系统,其中有两种引擎最为常见MyISAM和InnoDB MyISAM(非聚集索引)  MySQL 5.0 之前的默认数据库引擎,最为常 ...

  5. Zabbix 3.0 LTS安装配置

    关于Zabbix监控项类型的官网介绍: https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes zabbix ...

  6. OGNL表达式(转载)

    OGNL表达式(转载)   1.什么是OGNL OGNL:Object Graphic Navigation Language(对象图导航语言) 它是Struts2中默认的表达式语言.使用表达式需要借 ...

  7. Zookeeper与HBse安装过程纪录

    1 zookeeper安装 1.1 环境变量 1.2 配置zoo.cfg 初次使用 ZooKeeper 时, 需要将 $ZOOKEEPER_HOME/conf 目录下的 zoo_sample.cfg ...

  8. GDI+ 实现透明水印和文字

    最近给<JPEG浏览缩放器>增加了水印功能,在设计的过程中,参考了网上的文章,但是发现文章使用的GDI+ API封装包不是我现在使用的那一套,目前DELPHI使用的GDI+ API封装包有 ...

  9. float double

    float : 单精度浮点数 double : 双精度浮点数 两者的主要区别如下: 01.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02.有效数字位数不 ...

  10. centos7升级内核

    载入elrepo源,搜索内核更新资源,并进行更新操作. 具体实验步骤: # 载入公钥rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org ...