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 ...
随机推荐
- es6 初级之---const 和 默认参数
1. const 的定义: 1.1 常量定义的时候要赋值,不赋值是会报错的: <!DOCTYPE html> <html lang="en"> <he ...
- SIGCHLD信号
SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 也就是说:子进程的运行状态发生变化就会发送SIGCHILD信号:这里的意思 ...
- 深入jUI(DWZ)
-----------------------------------------------------------------------------主页面index.html <html& ...
- 25. IO流.md
目录 IO分类: 1.FIle类 1.1目录分隔符 1.2常用方法 2.FileInputStream类 2.1读取文件 3.FileOutputStream类 拷贝文件 4.缓冲流 4.1 Buff ...
- Logo tools
http://www.cilogo.com/LOGO/
- winform 凹进去的button
如果是工具栏按钮的话,可以设置CheckState属性为CheckState.Checked,这样就是按下状态了如果是普通按钮的话,有两种方法一种是系统提供的,在工具箱上右键,[选择项],然后在[CO ...
- ROS:ROS操作类MK.cs
class MK { Stream connection; TcpClient con; public MK(string ip,int port) { con = new TcpClient(); ...
- SQL Server 事件探查器和数据库引擎优化顾问
简介 说到Sql的[性能工具]真是强大,SQL Server Profiler的中文意思是SQL Server事件探查,这个到底是做什么用的呢?我们都知道探查的意思大多是和监视有关,其实这个SQL S ...
- Lucene 全文检索引擎
Apache Lucene PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程, 仅供各位程序猿们参考,这 ...
- maven <scope>provided</scope>
今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖 <dependency> <groupId>javax.servlet</group ...