zoukankan      html  css  js  c++  java
  • UIDynamic(物理仿真)

    UIDynamic是从IOS7开始引入的一种新技术,隶属于UIKit框架,我们可以认为是一种物理引擎能模拟和仿真现实生活中的物理现象,比如重力,弹性碰撞等。

    可以让开发人员远离物理公式的情况下,实现一些物理仿真效果。

    这里简单介绍一下重力,碰撞,捕捉的用法。

    先介绍一下使用的大致步骤

    • 创建物理仿真器
    • 创建相应的物理仿真行为
    • 将物理仿真行为添加到物理仿真器

    一,重力与碰撞

    提前在StoryBoard准备两个UIView,一个红色,一个蓝色。蓝色在红色的下方,保证红色下落能碰到蓝色的view。

     1     //创建物理仿真器
     2     UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
     3     self.animator = animator;  //强引用animator,否则代码块执行完成后,将被释放
     4     
     5     //创建重力行为
     6     UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.redView]];
     7     
     8     //设置一些属性(可以不设置,不设则都为默认)
     9     gravityBehavior.gravityDirection = CGVectorMake(0, 1);  //重力方向
    10     gravityBehavior.angle = M_PI*0.5;  //重力方向
    11     gravityBehavior.magnitude = 0.5; //重力加速度,1代表加速度是(每秒100个点)
    12     
    13     //把重力行为行为添加到仿真器
    14     [animator addBehavior:gravityBehavior];
    15     
    16     
    17     //创建碰撞行为
    18     UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.redView,self.blueView]];
    19     
    20     //设置碰撞边界,不设置就会飞出屏幕,设置就会在屏幕边框处产生碰撞效果
    21     collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
    22     
    23     //将碰撞行为加入物理仿真器
    24     [animator addBehavior:collisionBehavior];

    代码执行后,就能看到红色的view下落,并撞击蓝色的View了。

    二,捕捉行为

     1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
     2 {
     3     //获取触摸点
     4     UITouch *touch = [touches anyObject];
     5     CGPoint point = [touch locationInView:touch.view];
     6     
     7     //创建仿真仿真器
     8     UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
     9     self.animator = animator;  //仿真器
    10     
    11     //创建捕捉行为
    12     UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:self.redView snapToPoint:point];
    13     
    14     //设置反弹系数(反弹幅度越大,值越大,反弹幅度越小)
    15     snapBehavior.damping = 0.5;
    16     
    17     //将行为添加到仿真器
    18     [animator addBehavior:snapBehavior];
    19     
    20 }

     运行一下,点击屏幕,可以发现,红色的view就很调皮的跟着你的手指移动啦

  • 相关阅读:
    有用数据结构---图的操作和算法
    Jackson 框架,轻易转换JSON
    移动Web开发实践
    Spring官方文档翻译——15.1 介绍Spring Web MVC框架
    面向对象五大原则_1.单一职责原则&2.里氏替换原则
    ZOJ 3792 Romantic Value 最小割(最小费用下最小边数)
    Yii学习笔记之二(使用gii生成一个简单的样例)
    一个令人蛋疼的NDK链接错误
    Android 阅读器架构图,网上收集,留做存货
    Xcode 6 打包ipa文件
  • 原文地址:https://www.cnblogs.com/MyBlogZH/p/5560329.html
Copyright © 2011-2022 走看看