物理仿真就比较有意思了,之前很火的愤怒的小鸟就是全部用物理仿真完成的,使用物理仿真可以实现弹跳,重力,吸附等效果
import UIKit
class ViewController: UIViewController {
//仿真者(现实动画)
var dynamic: UIDynamicAnimator!
//现实行为
var dynamicitem: UIDynamicItemBehavior!
//重力行为
var gravi: UIGravityBehavior!
//碰撞行为
var colli: UICollisionBehavior!
//吸附行为
var sna: UISnapBehavior!
//吸附行为item
var maiImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
//dynamic1()
dynamic2()
}
//点击屏幕一次,创建一个imageView让其遵循现实,重力,碰撞行为
func dynamic1(){
//创建仿真者
dynamic = UIDynamicAnimator(referenceView: self.view)
//创建现实行为
dynamicitem = UIDynamicItemBehavior(items: [])
//设置弹力值,数值越大弹力越大
dynamicitem.elasticity = 0.6
//重力行为
gravi = UIGravityBehavior(items: [])
//碰撞行为
colli = UICollisionBehavior(items: [])
//开启刚体碰撞
colli.translatesReferenceBoundsIntoBoundary = true
//碰撞模式
//colli.collisionMode = UICollisionBehaviorMode.Everything
//将行为添加到仿真者中
dynamic.addBehavior(dynamicitem)
dynamic.addBehavior(gravi)
dynamic.addBehavior(colli)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* 函数1使用
//横坐标
let x = CGFloat(arc4random() % 300)
let size = CGFloat(arc4random() % 50 + 5)
//图片
let imageArray = ["1","bird1","bluebird1","ice1","pig1","pig_44"]
//创建ImageView
let imageView = UIImageView(frame: CGRectMake(x,50,size,size))
let index = Int(arc4random() % UInt32(imageArray.count))
imageView.image = UIImage(named: imageArray[index])
self.view.addSubview(imageView)
//让imageView遵循各种行为
dynamicitem.addItem(imageView)
gravi.addItem(imageView)
colli.addItem(imageView)
*/
//函数2使用
//先移除仿真者上的所有行为
dynamic.removeAllBehaviors()
//获取手指点击位置
let touch = (touches as NSSet).anyObject()
let point = touch?.locationInView(self.view)
//初始化吸附行为
//参数1:需要吸附行为作用的对象
//参数2:需要移动到的位置
sna = UISnapBehavior(item: maiImageView, snapToPoint: point!)
//设置弹跳幅度
sna.damping = 0.8
//将吸附行为添加到仿真者中
dynamic.addBehavior(sna)
}
func dynamic2(){
maiImageView = UIImageView(frame: CGRectMake(0,0,100,100))
maiImageView.image = UIImage(named: "1")
self.view.addSubview(maiImageView)
//初始化仿真者
dynamic = UIDynamicAnimator(referenceView: self.view)
}
}
网友评论