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 ...
随机推荐
- 24_ajax请求_使用axios
前置说明: 1.React本身只关注页面,并不包含发送ajax请求的代码 2.前端应用需要通过ajax请求与后台进行交互(json数据) 3.React应用中需要集成第三方ajax库(或自己进行封装) ...
- 简单步骤Centos7安装Tomcat 8 (yum安装)(ZT)
原文:https://blog.51cto.com/bestlope/1978114?source=drt 说明: 操作系统:Centos7 系统环境:未安装其他服务 Step 1:更新系统 sudo ...
- SQL Server--存在则更新问题
在博客园看到一篇讨论特别多的文章“探讨SQL Server并发处理存在就更新七种解决方案”,这种业务需求很常见:如果记录存在就更新,不存在就插入. 最常见的做法: BEGIN TRANSACTION ...
- 7.mysql-安装和卸载.md
目录 卸载 停止window的MySQL服务. 卸载MySQL安装程序.找到"控制面板"-> "程序和功能",卸载MySQL程序. 安装 MYSQL的安装 ...
- jenkins 自动触发
在gitlab上配置连接jenkins ,将Jenkins的Secret token 与Build URL 复制到gitlab中 在settings标签下面,找到OutBound Request,勾选 ...
- FTP原理和虚拟用户映射登录-2019.2.8
FTP主动模式和被动模式 FTP(File Transfer Protocol)是文件传输协议的简称.正如其名所示:FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序 ...
- 学JS的心路历程 -物件与原型(二)
昨天有提到说Object.setPrototypeOf可以指定一个物件为另一个物件的原型,但有想过到底这个原型,也就是[[Prototype]]最终会到何处吗? 答案是Object.prototype ...
- PL/SQL Job
1. 鼠标右键点击 jobs 弹出 Create Job 对话框,如下图: 2. 在对话框中输入相应的值,如下图: 其中: What ——作业执行时将要调用的存储过 ...
- jq select 一些操作
添加option $("#ID option").each(function(){if($(this).val()==111){$(this).remove();}}); 移除op ...
- http4e eclipse plugin 插件介绍
感谢作者的分享: http://blog.csdn.net/wiker_yong/article/details/10066905 以及作者的破解jar.目前看网站留言说已经git了. 官网链接地址: ...