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 ...
随机推荐
- TypeScript语言学习笔记(1)
基本类型 // 布尔型(Boolean) let isDone: boolean = false; // 数值型(Number) let decimal: number = 6; let hex: n ...
- rhel7磁盘管理
一.MBR主引导记录 MBR有512个字节,分为三个部分:第一部分446个字节,存储了引导分区:第二部分64字节为分区表:第三部分2个字节结束符:每个分区需16个字节,所以MBR的模式 ...
- 28.注解2.md
目录 1. 特点 2.优点 3. 源注解-部分 4.自定义注解 5.使用注解获 1. 特点 注释:给程序员阅读使用 注解:给编译器阅读使用 2.优点 简化配置文件 灵活方便 3. 源注解-部分 //修 ...
- ArcGIS模型构建器案例教程-批量复制工作空间所有要素类
ArcGIS模型构建器案例教程-批量复制工作空间所有要素类 目的:批量复制工作空间所有要素类 工具名称:WorkspaceCopyFeatureClasses 使用方法:输入工作空间,指定输出工作空间 ...
- js 遍历行和列
]; //遍历列 ; i < table.rows[].cells.length; i++) { console.log(table.rows[].cells[i].innerText); ]. ...
- PageRank算法和谷歌搜索讲解
PageRank算法和谷歌搜索讲解 吴裕雄 PageRank算法实际上就是Google使用它来计算每个网页价值的算法. Google每次的搜索结果都有成百上千万甚至上亿个相关的查询网页链接.如果将所有 ...
- 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)
https://blog.csdn.net/qq_32690999/article/details/77434381 因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Co ...
- js基础-类型转换
显示类型转换 Number() 将任意类型转换数值类型 true 1 false 0 Number(null) => 0 Number(undefined) => NAN Number(' ...
- SAP 使用
SAP 提供多种方法查找系统内的事务代码 1. 使用SE11查看存储事物代码的表:TSTC 或者TSTCT TSTC: 存有事务代码,程序名称,屏幕号码等字段 TSTCT: 存有语言代码,事务代码,事 ...
- /src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC ...