• 物理仿真


    //UIDynamicAnimator :动态仿真

    #import "ViewController.h"

     

    @interface ViewController ()

    @property (weak, nonatomic) IBOutlet UIView *rectGreen;

    @property (weak, nonatomic) IBOutlet UIView *rectBlue;

    //创建仿真类

    @property(nonatomic,strong)UIDynamicAnimator *animator;

     

    @end

     

    @implementation ViewController

    //懒加载创建物理仿真类

    -(UIDynamicAnimator*)animator

    {

        //1.创建仿真器指定仿真范围

        if (!_animator) {

            _animator=[[UIDynamicAnimator alloc]initWithReferenceView:self.view];

        }

        return _animator;

    }

     

     

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        //2创建仿真行为(重力),指定仿真元素

        UIGravityBehavior *gravity=[[UIGravityBehavior alloc]initWithItems:@[self.rectGreen]];

        //量级

        gravity.magnitude=2;

        //3添加仿真行为到仿真器

        [self.animator addBehavior:gravity];

        //4创建碰撞行为

        UICollisionBehavior *collision=[[UICollisionBehavior alloc]initWithItems:@[self.rectGreen,self.rectBlue] ];

        //设置碰撞边界

        collision.translatesReferenceBoundsIntoBoundary=YES;

        //开始仿真

        [self.animator addBehavior:collision];

        

    //    UIGravityBehavior *blue=[[UIGravityBehavior alloc]initWithItems:@[self.rectBlue]];

    //    //量级

    //    blue.magnitude=0.1;

    //    //3添加仿真行为到仿真器

    //    [self.animator addBehavior:blue];

     

        

    }

    //扑捉行为

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

        //可以移除之前的所有行为

        //[self.animator removeAllBehaviors];

        //获得点击的坐标

        UITouch *touch=[touches anyObject];

        CGPoint point=[touch locationInView:touch.view];

        //创建捕捉行为

        UISnapBehavior *snap=[[UISnapBehavior alloc]initWithItem:self.rectBlue snapToPoint:point];

        //设置减震属性

        snap.damping=arc4random_uniform(100)/100.0;

        

        //添加开始仿真

        [self.animator addBehavior:snap];

        

    }

     

     

    @end

  • 相关阅读:
    mybatis 调用mysql存储过程 带输出输入参数
    MyBatis 通过包含的jdbcType类型和java中对应的数据类型
    大型网站架构之分布式消息队列
    加密解密(2)*客户端,服务器,CA(Certificate Authority),公钥,私钥,证书,签名,验证
    AlertDialog与DialogFragment
    从日期对象中获取(年份、月份、日期、时间等数字)
    LayoutInflater的获取方式
    php——会话控制
    什么是虚假唤醒 spurious wakeup
    Linux互斥锁、条件变量和信号量
  • 原文地址:https://www.cnblogs.com/tangranyang/p/4659528.html
Copyright © 2020-2023  润新知