物理仿真

物理仿真就比较有意思了,之前很火的愤怒的小鸟就是全部用物理仿真完成的,使用物理仿真可以实现弹跳,重力,吸附等效果

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, 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)
    }
}

你可能感兴趣的:(物理仿真)