1. SB放上俩 imageview,拖线成类属性

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. @IBOutlet weak var box2: UIImageView!
  6. @IBOutlet weak var box1: UIImageView!
  7.  
  8. //1.s创建仿真器
  9. private lazy var animator: UIDynamicAnimator = UIDynamicAnimator(referenceView: self.view)
  10. override func viewDidLoad() {
  11. super.viewDidLoad()
  12. //设置背景颜色图
  13. view.backgroundColor = UIColor(patternImage: UIImage.init(named: "background") ?? UIImage())
  14. }
  15.  
  16. override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
  17.  
  18. let point = touches.first?.location(in: view)
  19. snap(point: point ?? CGPoint.zero)
  20.  
  21. gravity()
  22. collision()
  23. push()
  24. }
  25.  
  26. ///重力
  27. func gravity() {
  28.  
  29. //2.创建仿真行为
  30. let behavior = UIGravityBehavior(items: [box1])
  31.  
  32. //重力方向,重力的力度
  33. // behavior.gravityDirection = CGVector(dx: 10, dy: -10)
  34.  
  35. // //角度
  36. // behavior.angle = -CGFloat.pi
  37. //
  38. // //量级:速度
  39. // behavior.magnitude = 5
  40.  
  41. //设置角度和量级
  42. behavior.setAngle( CGFloat.pi/2, magnitude: 5)
  43.  
  44. //3. 仿真器添加仿真行为
  45. animator.addBehavior(behavior)
  46. }
  47.  
  48. /// 碰撞
  49. func collision() {
  50.  
  51. //2.创建仿真行为
  52. let behavior = UICollisionBehavior(items: [box1, box2])
  53.  
  54. //添加碰撞边界: view的bounds
  55. behavior.translatesReferenceBoundsIntoBoundary = true
  56.  
  57. // items: 只碰撞元素
  58. // boundaries:只碰撞边界
  59. // everything:任何东西
  60. //碰撞模式
  61. behavior.collisionMode = UICollisionBehavior.Mode.everything
  62.  
  63. //设置边界的内边距
  64. // behavior.setTranslatesReferenceBoundsIntoBoundary(with: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
  65.  
  66. let str : NSString = "123" // NSString 遵循NSCopying
  67. let str1 : String = "123" //String 没有遵循NSCopying
  68. //添加一个边界
  69. // behavior.addBoundary(withIdentifier: str, from: CGPoint(x: 0, y: 500), to: CGPoint(x: view.frame.size.width, y: 300))
  70.  
  71. //设置代理
  72. behavior.collisionDelegate = self
  73. //3. 仿真器添加仿真行为
  74. animator.addBehavior(behavior)
  75. }
  76.  
  77. /// 创建捕捉行为
  78. func snap(point:CGPoint){
  79. //FIXME:如果想要多次执行p捕捉行为,必须先移除添加捕捉行为
  80. animator.removeAllBehaviors()
  81.  
  82. let behavior = UISnapBehavior(item: box2, snapTo: point)
  83.  
  84. //动画流畅度
  85. behavior.damping = 1
  86.  
  87. animator.addBehavior(behavior)
  88. }
  89.  
  90. func push(){
  91.  
  92. // continuous:一直推
  93. // instantaneous:推一次
  94. //1.创建推行为
  95. let behavior = UIPushBehavior(items: [box1], mode: UIPushBehavior.Mode.instantaneous)
  96.  
  97. //设置方向
  98. behavior.pushDirection = CGVector(dx: 0, dy: -8)
  99.  
  100. //2. 仿真器添加仿真行为
  101. animator.addBehavior(behavior)
  102. }
  103.  
  104. }
  105.  
  106. extension ViewController:UICollisionBehaviorDelegate{
  107. func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item1: UIDynamicItem, with item2: UIDynamicItem, at p: CGPoint){
  108. print("开始碰撞 元素 - 元素", p)
  109. }
  110.  
  111. func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item1: UIDynamicItem, with item2: UIDynamicItem){
  112. print("结束碰撞 元素 - 元素")
  113. }
  114.  
  115. func collisionBehavior(_ behavior: UICollisionBehavior, beganContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?, at p: CGPoint){
  116. print("开始碰撞 元素 - 边界", p)
  117. }
  118.  
  119. func collisionBehavior(_ behavior: UICollisionBehavior, endedContactFor item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying?){
  120. print("结束碰撞 元素 - 边界")
  121. }
  122. }

  

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. 24_ajax请求_使用axios

    前置说明: 1.React本身只关注页面,并不包含发送ajax请求的代码 2.前端应用需要通过ajax请求与后台进行交互(json数据) 3.React应用中需要集成第三方ajax库(或自己进行封装) ...

  2. 简单步骤Centos7安装Tomcat 8 (yum安装)(ZT)

    原文:https://blog.51cto.com/bestlope/1978114?source=drt 说明: 操作系统:Centos7 系统环境:未安装其他服务 Step 1:更新系统 sudo ...

  3. SQL Server--存在则更新问题

    在博客园看到一篇讨论特别多的文章“探讨SQL Server并发处理存在就更新七种解决方案”,这种业务需求很常见:如果记录存在就更新,不存在就插入. 最常见的做法: BEGIN TRANSACTION ...

  4. 7.mysql-安装和卸载.md

    目录 卸载 停止window的MySQL服务. 卸载MySQL安装程序.找到"控制面板"-> "程序和功能",卸载MySQL程序. 安装 MYSQL的安装 ...

  5. jenkins 自动触发

    在gitlab上配置连接jenkins ,将Jenkins的Secret token 与Build URL 复制到gitlab中 在settings标签下面,找到OutBound Request,勾选 ...

  6. FTP原理和虚拟用户映射登录-2019.2.8

    FTP主动模式和被动模式 FTP(File Transfer Protocol)是文件传输协议的简称.正如其名所示:FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序 ...

  7. 学JS的心路历程 -物件与原型(二)

    昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...

  8. PL/SQL Job

    1. 鼠标右键点击 jobs 弹出 Create Job 对话框,如下图: 2. 在对话框中输入相应的值,如下图: 其中: What                   ——作业执行时将要调用的存储过 ...

  9. jq select 一些操作

    添加option $("#ID option").each(function(){if($(this).val()==111){$(this).remove();}}); 移除op ...

  10. http4e eclipse plugin 插件介绍

    感谢作者的分享: http://blog.csdn.net/wiker_yong/article/details/10066905 以及作者的破解jar.目前看网站留言说已经git了. 官网链接地址: ...