DahuangPhoneiOSSwift → Swift写UIDynamic


  共有8086人关注过本帖树形打印复制链接

主题:Swift写UIDynamic

帅哥哟,离线,有人找我吗?
dahuangphone
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:407 积分:4533 威望:0 精华:0 注册:2012/9/29 7:54:10
Swift写UIDynamic  发帖心情 Post By:2014/10/15 17:11:24 [只看该作者]

 http://www.starming.com/index.php?v=index&view=46#2321327-tsina-1-89736-4a0daff92d30bb96be3f1c292fb368b5

import UIKit


class ViewController: UIViewController,UICollisionBehaviorDelegate{

    var animator = UIDynamicAnimator()

    var gravity = UIGravityBehavior()

    var collision = UICollisionBehavior()

    var firstContact = false


    override func viewDidLoad() {

        super.viewDidLoad()

        

        //创建物理体

        let square = UIView(frame: CGRectMake(100, 100, 100, 100))

        square.backgroundColor = UIColor.grayColor()

        view.addSubview(square)


        //创建物理世界

        animator = UIDynamicAnimator(referenceView: view)

        //创建加速度

        gravity = UIGravityBehavior(items: [square])  //item为有效的物理体


        //加速度增加到物理世界中

        animator.addBehavior(gravity)

 

        //创建障碍物

        let barrier = UIView(frame: CGRectMake(0, 300, 130, 20))

        barrier.backgroundColor = UIColor.redColor()

        view.addSubview(barrier)


        //创建碰撞规则

        collision = UICollisionBehavior(items: [square])  //items为可碰撞物理体

        collision.translatesReferenceBoundsIntoBoundary = true

        //加入碰撞规则到物理世界

        animator.addBehavior(collision)


        //添加一个碰撞体

        let rightEdge = CGPointMake(barrier.frame.origin.x + barrier.frame.size.width, barrier.frame.origin.y)


        //碰撞体的位置,是一条线,为障碍物的上表面

        collision.addBoundaryWithIdentifier("barrier", fromPoint: barrier.frame.origin, toPoint: rightEdge)


        //碰撞后发生的行为

        collision.action = {

            println("(NSStringFromCGAffineTransform(square.transform)),(NSStringFromCGPoint(square.center))") //只要动就会触发,可以获得动的物体的位置

        }


        //创建委派

        collision.collisionDelegate = self


        //定义物理体的自身碰撞属性

        let itemBehaviour = UIDynamicItemBehavior(items: [square])

        itemBehaviour.elasticity = 0.6 //更改弹性

        animator.addBehavior(itemBehaviour)

    }




    //协议方法,委派使用,碰撞时触发

    func collisionBehavior(behavior: UICollisionBehavior, beganContactForItem item: UIDynamicItem, withBoundaryIdentifier identifier: NSCopying, atPoint p: CGPoint) {

        println("began contact") //碰撞时触发

        //每次碰撞都会变黄一下,然后又转成灰色

        let view = item as UIView

        view.backgroundColor = UIColor.yellowColor()

        UIView.animateWithDuration(0.3, animations: {

            view.backgroundColor = UIColor.grayColor()

        })


        //检测第一次碰撞,动态添加behaviors

        if !firstContact {

            firstContact = true

            //处理第一次碰撞的地方

        }


    }


  

}


[此贴子已经被作者于2014/10/15 17:36:14编辑过]

 回到顶部