(1)UIDynammic使用分三步:

——创建仿真器(顺便定义仿真范围)(可利用懒加载定义)

——创建仿真行为(顺便添加仿真元素)

——把仿真行为 添加到 仿真器 中

(2)下面是结合重力行为和碰撞行为的例子

#import "ViewController.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *rectView;
@property(nonatomic,strong) UIDynamicAnimator *ani;
@property (weak, nonatomic) IBOutlet UIView *blueView;
@end@implementation ViewController-(UIDynamicAnimator *)ani{if (!_ani) {//创建仿真器(顺便定义仿真范围)_ani=[[UIDynamicAnimator alloc]initWithReferenceView:self.view];}return _ani;
}- (void)viewDidLoad {[super viewDidLoad];
}//blueView只参与碰撞仿真,不参与重力下落的仿真
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{//创建仿真器(顺便定义仿真范围),在懒加载中//UIDynamicAnimator *ani=[[UIDynamicAnimator alloc]initWithReferenceView:self.view];//创建仿真行为(顺便添加仿真元素)UIGravityBehavior *behave=[[UIGravityBehavior alloc]initWithItems:@[self.rectView]];//按照向量来定义方向behave.gravityDirection=CGVectorMake(1, 1);//按照角度定义方向
//    behave.angle=-M_PI_4;//定义重力加速度behave.magnitude=1;//碰撞检测,把仿真范围设为边界UICollisionBehavior *collisionBehave=[[UICollisionBehavior alloc]initWithItems:@[self.rectView,self.blueView]];collisionBehave.translatesReferenceBoundsIntoBoundary=YES;//仿真行为 添加到 仿真器 中[self.ani addBehavior:behave];[self.ani addBehavior:collisionBehave];
}
@end

——重力行为的3个重要属性,两个方向属性 gravityDirection和 angle,一个加速度属性 magnitude。

——碰撞比较重要的属性是有几种定义边界的方法。

如上面的translatesReferenceBoundsIntoBoundary属性。还有其他两种主要的:

    //碰撞检测,把仿真范围设为边界UICollisionBehavior *collisionBehave=[[UICollisionBehavior alloc]initWithItems:@[self.rectView,self.blueView]];collisionBehave.translatesReferenceBoundsIntoBoundary=YES;//添加一条左右倾斜的直线作为碰撞边界[collisionBehave addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 300) toPoint:CGPointMake(320, 400)];//添加一个圆做边界UIBezierPath *path=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 320, 320)];[collisionBehave addBoundaryWithIdentifier:@"circle" forPath:path];

(3)捕捉行为,主要属性是减震属性damping。

#import "ViewController.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *pinkView;
@property(nonatomic,strong) UIDynamicAnimator *ani;
@end@implementation ViewController
-(UIDynamicAnimator *)ani{if (_ani==nil) {_ani=[[UIDynamicAnimator alloc]initWithReferenceView:self.view];}return _ani;
}- (void)viewDidLoad {[super viewDidLoad];
}-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{UITouch *touch=[touches anyObject];CGPoint point=[touch locationInView:touch.view];//创建捕捉行为UISnapBehavior *snap=[[UISnapBehavior alloc]initWithItem:self.pinkView snapToPoint:point];//设置捕捉属性//减震设置,0~1,值越大,减震越好,震动幅度就小。snap.damping=0.5;//删除所有行为(以保证每次点击都有效,否则第二次以后点击,没反应)[self.ani removeAllBehaviors];//添加行为[self.ani addBehavior:snap];
}

(4)除以上3种行为之外,还有其他行为:

——UIPushBehavior:推动行为

——UIAttachmentBehavior:附着行为

——UIDynamicItemBehavior:动力元素行为

【iOS开发-112】UIDynamic物理模拟介绍,如重力行为、碰撞行为、碰撞行为以及其他相关推荐

  1. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  2. 32款iOS开发插件和工具介绍[效率]

    插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络訪问 ...

  3. IOS开发 - UIWebView(用法全面介绍,含最全的JS交互)

    前两天我写了一套关于JS与OC交互的三种方法的文章,但是发现自己对UIWebView理解的还是比较浅,一直认为只能简单的当一个webView来使用,具体很多细节都忽略,如果想看我之前UIWebView ...

  4. iOS 开发中的MVVM介绍(译)

    本文译自 :Introduction to MVVM  by Ash Furrow 2011年, 我在500px得到了第一份iOS相关的工作. 之前几年我在大学的时候就做过iOS的项目,但是,这是我第 ...

  5. iOS开发值多线程简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们就来说一下iOS多线程的问题,为什么要使用iOS多线程?因为一个应用程序在一个时间内可能有一个呗或者多任务,我们不可 ...

  6. iOS开发微信支付的介绍与实现

    1.前期准备 1) 到微信开放平台注册账号 需要登录邮箱验证 填写您的商户信息 2) 进入管理中心 --- 移动应用 --- 创建移动应用 --- 根据页面完善应用资料 3) 审核过后,通过应用详情页 ...

  7. iOS开发框架介绍(一)---iOS开发介绍

    介绍 iOS 操作系统是 iPhone. iPod touch 以及 iPad 设备的核心. 构建 iOS 平台的知识与 Mac OS X 系统同出一辙,iOS 平台的许多开发工具和开发技术也源自 M ...

  8. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课 ...

  9. 面试造火箭,工作拧螺丝?看下这些大厂原题吧(iOS开发方向)

    需求已改活已加,加班通宵看朝霞.终是上线已延期,bug还是改不完. 面试造火箭,工作拧螺丝,虽然我只想拧螺丝,可是我需要用造火箭的技术去寻找拧螺丝的工作,如何能在面试过程中让自己处于不败的地步呢,刷题 ...

最新文章

  1. Flutter配置好后,在Android Studio中找不到设备,no devices
  2. Spring Cloud Alibaba基础教程:几种服务消费方式(RestTemplate、WebClient、Feign)
  3. 基于命令行设置lazy-queue
  4. 使用 python 操作 redis
  5. 美国女童子军正在学习电脑黑客技术!
  6. 快捷键关机电脑_电脑还可以这样关机?炫技术的时候到了!
  7. SLAM--Pangolin显示相机位姿
  8. 二维码的纠错码原理及如何纠错(1)
  9. Photoshop CS6安装教程
  10. 伪随机生成器具体实现——密码法
  11. 用Jekyll生成网页部署的若干问题
  12. Android管理cookie,Android中的cookie管理简介
  13. 什么是FBO (Frame Buffer Object)
  14. 不谋全局者不足以谋一域,不谋万世者不足以谋一时
  15. 十一、BDB ManyToMany
  16. Windows mobile屏幕旋转解决方案
  17. xp计算机连接不上网络打印机驱动,解决win10无法连接到XP计算机共享打印机
  18. 物联网系统中常见的通信协议分析
  19. jQuery keydown事件
  20. 解决百度地图内存泄露问题

热门文章

  1. ccna考试常用命令
  2. [SHOI2003]吃豆豆(dp+拓扑排序)
  3. 邮件变成了Winmail.dat
  4. 百度、Google 的搜索参数
  5. java怎么打开指定的浏览器_Java之——打开浏览器访问指定页面
  6. macbook osx10.14版本无法连接easy connect导致无法工作的解决方案
  7. 如何升级条码阅读器的译码软件?
  8. Hinton关于RBM的代码注解之(一)rbm.m
  9. linux 进程 清理,总结linux清理垃圾命令
  10. c语言编程计算原子态密度,准静态C_V法测量硅表面态密度分布及数据处理.pdf