动力效果之动力元素特效
来源:互联网 发布:银行对接软件 编辑:程序博客网 时间:2024/04/29 06:40
#import "ViewController.h"@interface ViewController ()<UIDynamicAnimatorDelegate,UICollisionBehaviorDelegate>{ UIDynamicAnimator *animator; UIView *view; UIView *view2;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad];// UIDynamicAnimator /* UIDynamic是从ios7开始引入的一种新技术 属于UIKit框架 可以模拟现实生活中的物理现象 如碰撞 抖动 摆动 等 动力效果:如动吉他,电吉他有效果器 可以添加各种电子效果 动力效果也有一个效果器,叫做动力效果器,里面可以添加动力效果 电吉他可以叠加多个效果 动力效果也是一样 动力效果的使用步骤: 1、创建动力效果器(UIDynamicAnimator) 2、创建动力效果(Behavior)添加到对应的视图上 3、将动力效果添加到动力效果器中开始动力效果 再是用动力效果的时候必须遵守UIDynamicItem这个协议才可以使用动力效果 UIView默认遵守了UIDynamicItem协议 UIDynamic提供的动力效果 UIGravityBehavior:重力效果 UICollisionBehavior:碰撞效果 UIDynamicItemBehavior:动力元素效果 UIPushBehavior:推动效果 UISnapBehavior:迅速移动效果 UIAttachmentBehavior:附着效果 都继承自UIDynamicBehavior 动力效果器:UIDynamicAnimator 可以把UIDynamicAnimator看做动力效果的容器 它制定了动力效果的有效范围 在初始化的时候可以指定他的有效范围 - (instancetype)initWithReferenceView:(UIView*)view; 作用在哪一个view上 哪一个view就是他产生动力效果的有效范围 既然是容器 他还可以添加移除 动力效果 - (void)addBehavior:(UIDynamicBehavior *)behavior; 添加动力效果 - (void)removeBehavior:(UIDynamicBehavior *)behavior; 移除动力效果 - (void)removeAllBehaviors; 移除之前添加过的所有动力效果 动力效果器常用的属性 @property (nonatomic, readonly) UIView* referenceView;作用的区域 @property (nonatomic, readonly, copy) NSArray* behaviors;添加到效果器中的所有效果 @property (nonatomic, readonly, getter = isRunning) BOOL running;是否正在进行 @property (nonatomic, assign) id <UIDynamicAnimatorDelegate> delegate;可以检测开始暂停 - (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator; - (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator; */ animator = [[UIDynamicAnimator alloc]initWithReferenceView:self.view];// self.view是产生动力效果的区域 animator.delegate = self; view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; view.layer.cornerRadius = 50; view.backgroundColor = [UIColor colorWithRed:0.345 green:1.000 blue:0.391 alpha:1.000]; [self.view addSubview:view]; view2 = [[UIView alloc]initWithFrame:CGRectMake(50, 200, 100, 100)]; view2.layer.cornerRadius = 50; view2.backgroundColor = [UIColor colorWithRed:1.000 green:0.282 blue:0.298 alpha:1.000]; [self.view addSubview:view2];/* UIDynamicItemBehavior 动力元素效果 可以设置 动力效果的默认值 是一个辅助的效果 设置运动学元素参与物理效果过程中的参数 如:弹性系数、摩擦系数、密度、阻力、角阻力以及是否允许旋转等 常用属性 @property (readwrite, nonatomic) CGFloat elasticity; // Usually between 0 (inelastic) and 1 (collide elastically) 属性设置碰撞弹性系数 范围(0.0-1.0)决定了碰撞的弹性程度,比如碰撞时物体的弹性 @property (readwrite, nonatomic) CGFloat friction; // 0 being no friction between objects slide along each other设置摩擦系数 决定了沿接触面滑动时的摩擦力大小 @property (readwrite, nonatomic) CGFloat density; // 1 by default 密度 跟size相关 计算物体的总质量 质量越大 物体加速或减速就越困难 @property (readwrite, nonatomic) CGFloat resistance; // 0: no velocity damping (阻力):决定线性移动的阻力大小 与摩擦系数不同 摩擦系数只作用于滑动运动 @property (readwrite, nonatomic) CGFloat angularResistance; // 0: no angular velocity damping 设置角度阻力系数。(0--CGFLOAT_MAX)决定旋转运动时的阻力大小 @property (readwrite, nonatomic) BOOL allowsRotation; // force an item to never rotate 设置行为中的dynamic item是否可以旋转 设置这个属性为 NO 物体就完全不会转动,而无论施加多大的转动力 */}#pragma mark 动力效果器的代理方法//启动- (void)dynamicAnimatorWillResume:(UIDynamicAnimator*)animator{}//暂停- (void)dynamicAnimatorDidPause:(UIDynamicAnimator*)animator{}#pragma mark 手指触摸屏幕添加动力效果- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.view]; view.center = touchPoint;}- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{#pragma mark 重力效果// 把之前添加过的重力效果移除 [animator removeAllBehaviors];// 初始化重力效果 UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc]initWithItems:@[view]];// 设置掉落方向 gravityBehavior.gravityDirection = CGVectorMake(0, 1);// 设置加速度 数值越大 碰撞效果越大 gravityBehavior.magnitude = 1;// 添加到效果器里面 [animator addBehavior:gravityBehavior];#pragma mark 两个视图之间的碰撞 UICollisionBehavior *coll = [[UICollisionBehavior alloc]initWithItems:@[view,view2]]; coll.translatesReferenceBoundsIntoBoundary = YES;// 如果是两个元素之间相互碰撞 设置边界 也不起作用 coll.collisionMode = UICollisionBehaviorModeEverything; coll.collisionDelegate = self; [animator addBehavior:coll];#pragma mark 动力元素效果// 可以与其他的 动力效果配合使用 UIDynamicItemBehavior *dynamicItem = [[UIDynamicItemBehavior alloc]initWithItems:@[view,view2]];// 设置元素的弹跳系数 dynamicItem.elasticity = 1; dynamicItem.allowsRotation = YES; [animator addBehavior:dynamicItem];}
0 0
- 动力效果之动力元素特效
- 动力效果之重力特效
- 动力效果之碰撞特效
- iOS 开发之动力效果
- 动力
- 动力
- 动力
- 动力
- 动力
- 动力
- 动力
- iOS开发之 UIDynamic (动力效果)
- iOS动力效果
- UIDynamic-动力效果
- 动力效果概念
- iOS动力效果
- iOS 动力效果
- UIKit Dynamic 动力特效----吸附
- iOS开发之 UIDynamic (动力效果)
- 动力效果之碰撞特效
- 《构建之法》第十六章 IT行业的创新
- 黑马程序员-----java面向对象
- 从架构师的角度看服务器端架构点滴
- 动力效果之动力元素特效
- public private 和protected 继承
- 程序员能力矩阵 Programmer Competency Matri
- iOS动力效果
- 动画特效之动画组
- 关于c#代码Convert.ToChar(null);出现异常,而object obj = null; Convert.ToChar(obj);//返回'\0'空字符问题详解
- 安卓(android)开发框架的说明2:基于Android Studio的安卓工程开发目录介绍
- 屏蔽优酷客户端广告
- 习题6-6 修改天平 UVa 12166 二叉树 *