初识DynamicAnimator
来源:互联网 发布:linux自动挂载硬盘 编辑:程序博客网 时间:2024/06/11 13:51
使用步骤
- 创建一个物理仿真器,并设置范围 UIDynamicAnimator
- 创建想要的仿真行为,并添加想要仿真的元素,控件UIXXXBehavior
- 将仿真行为添加进仿真器中 [self.dynamicAnimator addBehavior:collisionBehavior];
UIDynamicItem
- 任何遵守了UIDynamicItem协议的对象
- UIView默认已经遵守了UIDynamicItem协议,因此任何UI控件都能做物理仿真
- UICollectionViewLayoutAttributes类默认也遵守UIDynamicItem协议
UIDynamicBehavior
- UIGravityBehavior:重力行为
- UICollisionBehavior:碰撞行为
- UISnapBehavior:捕捉行为
- UIPushBehavior:推动行为
- UIAttachmentBehavior:附着行为
- UIDynamicItemBehavior:动力元素行为
常用函数
-(void)addBehavior:(UIDynamicBehavior *)behavior;
添加1个物理仿真行为-(void)removeBehavior:(UIDynamicBehavior *)behavior;
移除1个物理仿真行为-(void)removeAllBehaviors;
移除之前添加过的所有物理仿真行为
常用属性
- @property (nonatomic, readonly) UIView* referenceView;
参照视图 - @property (nonatomic, readonly, copy) NSArray* behaviors;
添加到物理仿真器中的所有物理仿真行为 - @property (nonatomic, readonly, getter = isRunning) BOOL running;
是否正在进行物理仿真 - @property (nonatomic, assign) id delegate;
代理对象(能监听物理仿真器的仿真过程,比如开始和结束) - @property (readwrite, nonatomic) CGVector gravityDirection;
重力方向(是一个二维向量) - @property (readwrite, nonatomic) CGFloat angle;
重力方向(是一个角度,以x轴正方向为0°,顺时针正数,逆时针负数) - @property (readwrite, nonatomic) CGFloat magnitude;
量级(用来控制加速度,1.0代表加速度是1000 points /second²) - @property (nonatomic, assign) CGFloat damping;
用于减幅、减震(取值范围是0.0 ~ 1.0,值越大,震动幅度越小)
1. 初始化
-(UIDynamicAnimator *)dynamicAnimator{ if (_dynamicAnimator==nil) { _dynamicAnimator=[[UIDynamicAnimator alloc]initWithReferenceView:self.view]; } return _dynamicAnimator;}
2. 碰撞
/** * 碰撞 **/-(void)collisionBehavior{ UIGravityBehavior * gravityBehavior=[[UIGravityBehavior alloc]initWithItems:@[self.redView]]; [self.dynamicAnimator addBehavior:gravityBehavior]; UICollisionBehavior * collisionBehavior=[[UICollisionBehavior alloc]initWithItems:@[self.redView,self.blueView]]; //1. 直线边界 collisionBehavior.translatesReferenceBoundsIntoBoundary=NO; [collisionBehavior addBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(200, 200) toPoint:CGPointMake(500, 600)]; //2.封闭边界// UIBezierPath *bezierPath=[UIBezierPath bezierPathWithRect:self.view.frame];// [collisionBehavior addBoundaryWithIdentifier:@"bezierPath" forPath:bezierPath]; [self.dynamicAnimator addBehavior:collisionBehavior];}
3. 重力
/** * 重力 **/-(void)gravityBehavior{ UIGravityBehavior * gravityBehavior=[[UIGravityBehavior alloc]initWithItems:@[self.redView]]; gravityBehavior.gravityDirection=CGVectorMake(1.0, 1.0); // 设置重力的角度 // gravityBehavior.angle = M_PI_2; //设置重力的角速度 gravityBehavior.magnitude=100; [self.dynamicAnimator addBehavior:gravityBehavior];}
4. 吸附
/** * 吸附 **/-(void)snapDynamicBehaviorsWithPoint:(CGPoint)point{ UISnapBehavior * snapBehavior=[[UISnapBehavior alloc]initWithItem:self.redView snapToPoint:point]; snapBehavior.damping=0; //如果要进行连续的捕捉行为,需要先把前面的捕捉行为从物理仿真器中移除 [self.dynamicAnimator removeAllBehaviors]; [self.dynamicAnimator addBehavior:snapBehavior];}
5.给一个作用力
/** * 给一个作用力 **/-(void)pushBehavior{ //UIPushBehaviorModeContinuous 连续,UIPushBehaviorModeInstantaneous 瞬时 UIPushBehavior * pushBehavior=[[UIPushBehavior alloc]initWithItems:@[self.redView] mode:UIPushBehaviorModeContinuous]; pushBehavior.action=^(){ NSLog(@"动画进行中"); }; //加速度 pushBehavior.magnitude=0.1; pushBehavior.pushDirection = CGVectorMake(0, 1.0f); [self.dynamicAnimator addBehavior:pushBehavior];}
阅读全文
0 0
- 初识DynamicAnimator
- 初识
- 初识
- 初识
- js初识,博客初识
- TableLayout初识初识
- 初识Blog
- 初识CAA
- 初识JVM
- 初识SmartClient
- 初识HTC
- 初识JSTL
- JMX初识
- 初识Linux
- 初识流媒体
- 初识BREW
- 初识接口
- 初识Log4j
- 进程与线程的一个简单解释
- 从苏宁电器到卡巴斯基(后传)第05篇:聊聊我对WannaCry产生的感慨
- arraylist的方法
- 第一篇博客写给自己
- 俩段神奇简单的代码
- 初识DynamicAnimator
- Web Navigation
- 可数集
- PAT1062 最简分数
- 如何激活xp
- BZOJ4881 [Lydsy2017年5月月赛]线段游戏
- [bzoj] 1242: Zju1015 Fishing Net弦图判定
- Python中的布尔类型的注意点
- linux中线程ID与进程ID