【iOS开发-112】UIDynamic物理模拟介绍,如重力行为、碰撞行为、碰撞行为以及其他
(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物理模拟介绍,如重力行为、碰撞行为、碰撞行为以及其他相关推荐
- iOS开发UI篇—简单介绍静态单元格的使用
iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...
- 32款iOS开发插件和工具介绍[效率]
插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络訪问 ...
- IOS开发 - UIWebView(用法全面介绍,含最全的JS交互)
前两天我写了一套关于JS与OC交互的三种方法的文章,但是发现自己对UIWebView理解的还是比较浅,一直认为只能简单的当一个webView来使用,具体很多细节都忽略,如果想看我之前UIWebView ...
- iOS 开发中的MVVM介绍(译)
本文译自 :Introduction to MVVM by Ash Furrow 2011年, 我在500px得到了第一份iOS相关的工作. 之前几年我在大学的时候就做过iOS的项目,但是,这是我第 ...
- iOS开发值多线程简单介绍
2019独角兽企业重金招聘Python工程师标准>>> 今天,我们就来说一下iOS多线程的问题,为什么要使用iOS多线程?因为一个应用程序在一个时间内可能有一个呗或者多任务,我们不可 ...
- iOS开发微信支付的介绍与实现
1.前期准备 1) 到微信开放平台注册账号 需要登录邮箱验证 填写您的商户信息 2) 进入管理中心 --- 移动应用 --- 创建移动应用 --- 根据页面完善应用资料 3) 审核过后,通过应用详情页 ...
- iOS开发框架介绍(一)---iOS开发介绍
介绍 iOS 操作系统是 iPhone. iPod touch 以及 iPad 设备的核心. 构建 iOS 平台的知识与 Mac OS X 系统同出一辙,iOS 平台的许多开发工具和开发技术也源自 M ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课 ...
- 面试造火箭,工作拧螺丝?看下这些大厂原题吧(iOS开发方向)
需求已改活已加,加班通宵看朝霞.终是上线已延期,bug还是改不完. 面试造火箭,工作拧螺丝,虽然我只想拧螺丝,可是我需要用造火箭的技术去寻找拧螺丝的工作,如何能在面试过程中让自己处于不败的地步呢,刷题 ...
最新文章
- Flutter配置好后,在Android Studio中找不到设备,no devices
- Spring Cloud Alibaba基础教程:几种服务消费方式(RestTemplate、WebClient、Feign)
- 基于命令行设置lazy-queue
- 使用 python 操作 redis
- 美国女童子军正在学习电脑黑客技术!
- 快捷键关机电脑_电脑还可以这样关机?炫技术的时候到了!
- SLAM--Pangolin显示相机位姿
- 二维码的纠错码原理及如何纠错(1)
- Photoshop CS6安装教程
- 伪随机生成器具体实现——密码法
- 用Jekyll生成网页部署的若干问题
- Android管理cookie,Android中的cookie管理简介
- 什么是FBO (Frame Buffer Object)
- 不谋全局者不足以谋一域,不谋万世者不足以谋一时
- 十一、BDB ManyToMany
- Windows mobile屏幕旋转解决方案
- xp计算机连接不上网络打印机驱动,解决win10无法连接到XP计算机共享打印机
- 物联网系统中常见的通信协议分析
- jQuery keydown事件
- 解决百度地图内存泄露问题
热门文章
- ccna考试常用命令
- [SHOI2003]吃豆豆(dp+拓扑排序)
- 邮件变成了Winmail.dat
- 百度、Google 的搜索参数
- java怎么打开指定的浏览器_Java之——打开浏览器访问指定页面
- macbook osx10.14版本无法连接easy connect导致无法工作的解决方案
- 如何升级条码阅读器的译码软件?
- Hinton关于RBM的代码注解之(一)rbm.m
- linux 进程 清理,总结linux清理垃圾命令
- c语言编程计算原子态密度,准静态C_V法测量硅表面态密度分布及数据处理.pdf