iOS 力学动画生成器UIKit Dynamics 之碰撞效果讲解
UIKit Dynamic是iOS7 新增的一组类和方法,可赋予UIView逼真的行为和特征,不需要写动画效果那些繁琐的代码,让开发人员能够轻松地改善应用的用户体验。一共有6个可用于定制UIDynamicAnimator的类,这里先只简单介绍下碰撞的动画效果,即UICollisionBehavior。需要签订一个代理协议:UICollisionBehaviorDelegate。其他效果,后续更新,敬请期待。
注意:dragonImageView和frogImageView记得要初始化还有: UIDynamicAnimator、UIGravityBehavior、 UICollisionBehavior一定要声明成属性或者全局变量,否则不会产生动画效果!
#import "ICFCollisionViewController.h"
@interface ICFCollisionViewController ()
{
UIImageView *dragonImageView;
UIImageView*frogImageView;
}
@end
@implementation ICFCollisionViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad
{
[superviewDidLoad];
// 初始化力学动画生成器
UIDynamicAnimator *animator = [[UIDynamicAnimatoralloc]initWithReferenceView:self.view];
// 创建重力下落效果的对象
UIGravityBehavior *gravityBehavior = [[UIGravityBehavioralloc]initWithItems:@[frogImageView,dragonImageView]];
//设置重力加速度,水平和竖直方向
[gravityBehavior setGravityDirection:CGVectorMake(0.0f, 0.3f)];
// 创建碰撞效果的对象
UICollisionBehavior* collisionBehavior = [[UICollisionBehavioralloc]initWithItems:@[frogImageView,dragonImageView]];
// 物体的碰撞模式共有三种:UICollisionBehaviorModeItems(物体相互碰撞)
UICollisionBehaviorModeBoundaries(物体不相互碰撞,只与边界碰撞)
UICollisionBehaviorModeEverything(既与物体碰撞又与边界碰撞)
[collisionBehavior setCollisionMode:UICollisionBehaviorModeEverything];
//此代码的作用是将self.view的边框作为碰撞边界,必须设置为YES,否则不会生成碰撞效果
collisionBehavior.translatesReferenceBoundsIntoBoundary =YES;
[animatoraddBehavior:gravityBehavior];
[animatoraddBehavior:collisionBehavior];
collisionBehavior.collisionDelegate =self;
}
-(void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p
{
NSLog(@"开始碰撞时触发的方法");
}
-(void)collisionBehavior:(UICollisionBehavior *)behavior endedContactForItem:(id<UIDynamicItem>)item withBoundaryIdentifier:(id<NSCopying>)identifier
{
NSLog(@"结束碰撞时触发的方法");
}
@end
最新文章
- 详解https是如何确保安全的?
- 看完《Thinking in Java》后,我觉得自己就是一个不懂编程的小孩子,如何快速摆脱这种自卑感
- iOS多线程学习及总结
- 2015 Selenium大会
- paip.信用卡账单处理系统功能vO22
- scala之method和function的区别
- Nginx作为简单代理服务器(Windows环境)
- C语言中进制知识总结
- 转 : React Native 开发之 IDE 选型和配置
- linux入门教程(七) linux系统用户以及用户组管理
- 我用的比较少的CSS选择器
- ASP.NET Web API下的HttpController激活:程序集的解析
- ORACLE JOB创建
- MYSQL数据库中中文乱码问题
- .net core Kestrel宿主服务器自定义监听端口配置
- jupyter notebook远程服务器终端连接
- C# 函数式编程及Monads.net库
- 如何将xml转为python中的字典
- mybatis+oracle如何批量执行多条update
- Webpack笔记(二)——搭建React开发环境
热门文章
- 8、泛型程序设计与c++标准模板库1、泛型程序设计的概念和术语
- 【转】如何在eclipse下配置Heritrix
- C#在Linux上的开发指南(续)
- vue入门(二)----模板与计算属性
- Git fatal:$&#39;GIT_DIR&#39; too big
- java排序算法(持续更新)
- 【转】Asp.Net页面生命周期
- c/c++/c# 快速计算 Cumulative Normal Distribution 正态累积函数CDF
- kuangbin专题16A(kmp模板)
- cf835(预处理 + 记忆化dp)