UIKit 框架中Dynamics (动力:重力,推力,撞击)
来源:互联网 发布:淘宝神笔模板克隆 编辑:程序博客网 时间:2024/04/30 23:40
1.UIGravityBehavior (重力效果)
因为效果需要保持一段时间,所以将动力动画类 以及 效果类 设置成全局属性,来保持其不被释放。
@property (weak, nonatomic) IBOutletUIImageView *box;
@property (strong,nonatomic) UIDynamicAnimator *animator;
@property (strong,nonatomic) UIGravityBehavior *gravityBehavior;
@property (strong,nonatomic)UICollisionBehavior *collision;
@property (strong,nonatomic)UIAttachmentBehavior*attachment;
@property (strong,nonatomic) UISnapBehavior *snapBehavior;
@property (strong,nonatomic)UIPushBehavior *pushBehavior;
先创建 UIDynamicAnimator 动力动画类,来添加莫个效果。
//初始化动力动画类 并指定所作用的视图。
self.animator = [[UIDynamicAnimatoralloc]initWithReferenceView:self.view];
// 初始化重力效果类 并指定作用再哪个 物体上(视图)self.gravityBehavior = [[UIGravityBehavioralloc]initWithItems:@[self.box]];
self.gravity.magnitude=3;// 指定物体的大小
self.gravity.angle=0;//指定施加重力的方向
//添加效果
[self.animatoraddBehavior:self.gravity];
//删除重力效果[self.animatorremoveBehavior:self.gravityBehavior];
2.碰撞效果
self.collision=[[UICollisionBehavioralloc]initWithItems:@[self.box]];//指定哪个物体具有该效果
self.collision.translatesReferenceBoundsIntoBoundary=YES;//设置物体所碰撞的边界,问是否将动力动画所存在的视图的边界作为碰撞边界
//指定碰撞边界,可以创建UIBezierPath 这个类来绘画边界
UIBezierPath*path=[UIBezierPathbezierPath];
//添加边界 identifier 可以随意[self.collision addBoundaryWithIdentifier:@"id" forPath:path];
//添加效果
[self.animatoraddBehavior:self.collision];
3.attachment 附着效果
//创建手势来改变附着效果
- (IBAction)pan:(UIPanGestureRecognizer *)sender {
if (sender.state==UIGestureRecognizerStateBegan) {
//初始化 attachment 并指定添加效果的物体 以及附着的锚点, 改变其锚点的位置来实现附着的效果
self.attachment=[[UIAttachmentBehavioralloc]initWithItem:self.boxattachedToAnchor:CGPointMake(self.box.center.x,self.box.center.y)];
self.attachment.damping=0.2;//阻尼 阻尼越大回复性越差
self.attachment.frequency=1;//来回震动的频率
[self.animatoraddBehavior:self.gravity];
[self.animatoraddBehavior:self.attachment];
[selfdrawLineForPath];//可以划一根线连接手机点击屏幕的点和物体中心的连线来更好的观察效果, 这根线实际相当于一根弹簧
}elseif(sender.state==UIGestureRecognizerStateChanged ){
CGPoint current=[sender locationInView:self.myview];//改变锚点
self.attachment.anchorPoint=current;
}elseif(sender.state==UIGestureRecognizerStateEnded){
[self.animatorremoveBehavior:self.gravity];//删除动画
[self.animatorremoveBehavior:self.attachment];
self.myview.path=nil;
}
}
4.UISnapBehavior 闪的效果 ,某个物体闪现某个位置,并震动
//通过点击手势来拿到手指所点的位置
- (IBAction)tap:(UITapGestureRecognizer *)sender
{
CGPoint point = [sender locationInView:self.view];
[self.animatorremoveBehavior:self.snapBehavior];//删除上一个遗留下来的效果,来达到重置效果的目的,否则效果会小来越弱
self.snapBehavior = [[UISnapBehavioralloc]initWithItem:self.boxsnapToPoint:point];//初始化snap 并指定物体 和闪向的某个点
self.snapBehavior.damping=20; 来设定阻尼
[self.animatoraddBehavior:self.snapBehavior]; 添加效果
}
5.UIPushBehavior(推) 可以对物体的某个方向施加一个推力,来达到推动的物体的效果self.pushBehavior = [[UIPushBehavioralloc]initWithItems:@[self.box]mode:UIPushBehaviorModeInstantaneous];
//UIPushBehaviorModeInstantaneous 表示推一下 UIPushBehaviorModeContinuous //持续的推
self.pushBehavior.magnitude = distance / 100; 推力的大小
self.pushBehavior.angle = angle; 推力的角度
self.pushBehavior.active = YES; 是否激活推效果
[self.animatoraddBehavior:self.pushBehavior];
- UIKit 框架中Dynamics (动力:重力,推力,撞击)
- UIKit Dynamics动力系统入门
- UIKit Dynamics框架
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- iOS7新特征汇总[05]初窥UIKit动力(UIKit Dynamics)
- ios7新特征,UIKit Dynamics(UIKit动力模型)
- UIKit Dynamics
- UIKit Dynamics
- UIKit动力学(UIKit Dynamics)
- iOS7中UIKit支持的动力行为之UIAttachmentBehavior
- 如何在iOS7中使用UIKit动力之UICollisionBehavior
- iOS7中UIKit支持的动力行为之UIAttachmentBehavior
- iOS7中UIKit支持的动力行为之UIAttachmentBehavior
- IOS7开发~UIKit Dynamics
- SQL Server 2008 允许远程连接的解决方法
- 编程之路
- 自定义Annotation类型
- RMYSQL安装
- NC抓包上传
- UIKit 框架中Dynamics (动力:重力,推力,撞击)
- 关于Ajax 中response出现302的一点见解
- taintdroid源码分析之四 组件(进程)通信间污点传播
- div模块垂直水平居中
- 10月15号20点———学习笔记
- js的this指针
- VS 2010点击调试,自动重启问题
- 使用XPath读取XML文件以及使用Transformer改变XML节点值
- 在控件处弹出层