Core Animation详解(三)-UIDynamic Animation

原创Blog,转载请注明出处

blog.csdn.net/hello_hwc

前言:本文主要包括以下几部分

  • UIDynamic Animation是什么
  • 如何创建UIDynamic Animation
  • 每一种UIDynamic Animation讲解然后举例
  • 附上Demo链接

    由于都是动画,我就把这部分放在了Core Animation中了,严格意义上来说,它是Core Animation上层的封装。



一 什么是UIDynamic Animation

UIDynamic Animation是IOS 7引入的一个动态库,用来模拟现实世界的物理模型。隶属于UIKit,这里我仍然把它归到Core Animation的讲解之一。

主要模拟以下几种物理行为:

  1. UIGravityBehavior
  2. UIAttachmentBehavior
  3. UISnapBehavior
  4. UIPushBehavior
  5. UICollisionBehavior
  6. UIDynamicItemBehavior


二 如何创建一个UIDynamic Animation

(1)创建一个UIDynamicAnimator,大部分情况下只需要一个Animator

(2)创建一个或者多个UIDynamic Behavior,并添加到Animator

(3)为Dynamic Behavior添加Dynamic Item。

这里简单介绍下,什么是Dynamic Item。Dynamic Item是遵循UIDynamicItem Protocol的对象。UIView和UICollectionViewLayoutAttributes在IOS 7.0以后遵循了这个协议。所以可以直接使用。



三 UIGravityBehavior -重力

几个要配置的属性

magnitude - 重力加速度值 默认情况下1000points/second^2
angle - 重力的方向(由弧度指定)
gravityDirection - 重力的方向(由vector指定,默认(0.0,1.0))

举例

 UIAttachmentBehavior * attachBeahavior =  [[UIAttachmentBehavior alloc] initWithItem:self.imageview attachedToAnchor:CGPointMake(CGRectGetMidX(self.view.frame), 114)];
    UIGravityBehavior * gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.imageview]];
    [self.animator addBehavior:attachBeahavior];
    [self.animator addBehavior:gravityBehavior];


四 UIDynamicItemBehavior

配置一些公用的属性,与其他的Dynamic Behavior共同配合

addAngularVelocity:forItem: - 添加角速度
addLinearVelocity:forItem: - 添加线速度
allowsRotation - 是否允许旋转
angularResistance - 角速度方向的阻力
density- 相对密度
elasticity - 碰撞的弹性
friction - 摩擦
resistance-线性阻力 


五 UICollisionBehavior - 碰撞

为Item与边界以及Item之间添加碰撞效果。

addBoundaryWithIdentifier:forPath: - 添加Path边界
addBoundaryWithIdentifier:fromPoint:toPoint: - 添加线边界
collisionMode - 碰撞模式(三种:只有Item之间;只有边界;边界以及Item之间都存在碰撞效果)
translatesReferenceBoundsIntoBoundary - 把参考View的bounds转换为边界

举例

 UIGravityBehavior * gravityBehavior = [[UIGravityBehavior alloc] init];
//    gravityBehavior.angle = M_PI/2;
    gravityBehavior.gravityDirection = CGVectorMake(0,1);
    gravityBehavior.magnitude = 0.5;
    [gravityBehavior addItem:self.imageview];
    [self.animator addBehavior:gravityBehavior];


六 UISnapBehavior 这个不好翻译,附上文档描述

A snap behavior defines a dynamic item’s movement to a specified point; the movement proceeds with a spring-like effect, ending with an oscillation whose amount you can set.

配置属性:

damping - 动画结束的时候的震荡值 0.0-1.0;其中0.0最小,1.0最大。默认0.5

举例

UISnapBehavior * snapbehavior = [[UISnapBehavior alloc] initWithItem:self.imageview snapToPoint:self.view.center];
    snapbehavior.damping = 0.65;
    [self.animator addBehavior:snapbehavior];


七 UIAttachmentBehavior - 吸附

为Items之间或者Item和锚点来创建吸附行为,如果是Item,默认吸附Item的中心,当然可以配置。

initWithItem:attachedToAnchor: - 初始化吸附到锚点

initWithItem:attachedToItem: - 初始化吸附到item

anchorPoint - 锚点

damping - 阻尼(阻力大小)

frequency - 震荡频率

length - 吸附的两个点之间的距离(锚点和Item或者Item之间)

举例

  UIAttachmentBehavior * attachBeahavior =  [[UIAttachmentBehavior alloc] initWithItem:self.imageview attachedToAnchor:CGPointMake(CGRectGetMidX(self.view.frame), 114)];
    UIGravityBehavior * gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[self.imageview]];
    [self.animator addBehavior:attachBeahavior];
    [self.animator addBehavior:gravityBehavior];


八 UIPushBehavior - 推动

给一个Item持续或者瞬间的推力

initWithItems:mode: - 初始化并且指明是瞬间还是持续的推力

angle - 力的角度

magnitude - 推力大小

pushDirection - 推力方向

举例

 UIPushBehavior * push = [[UIPushBehavior alloc] initWithItems:@[self.imageview] mode:UIPushBehaviorModeInstantaneous];
    push.pushDirection = CGVectorMake(45, 0);
    push.magnitude = 1.0;
    UIDynamicItemBehavior * itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[self.imageview]];
    itemBehavior.resistance = 0.8;
    [self.animator addBehavior:itemBehavior];
    [self.animator addBehavior:push];

附上Demo 工程完整代码下载

http://download.csdn.net/detail/hello_hwc/8430701

BTY:对CSDN 的这个新的文本编辑器点赞

时间: 2024-11-05 01:02:06

Core Animation详解(三)-UIDynamic Animation的相关文章

iOS Animation详解

iOS Animation详解 本篇只要讲解iOS中动画的使用. Animtion主要分为两类:UIView动画和CoreAnimation动画. UIView动画有UIView属性动画,UIViewBlock动画,UIViewTransition动画. 而CoreAnimation动画主要通过CAAnimation和CALayer,常用的有CABasicAnimation,CAKeyframeAnimation,CATransition,CAAnimationGroup. UIView动画 U

【Android 动画】View Animation详解(一)

安卓平台目前提供了两大类动画,在Android 3.0之前,一大类是View Animation,包括Tween animation(补间动画),Frame animation(帧动画),在android3.0中又引入了一个新的动画系统:property animation,即属性动画.本篇文章主要介绍View Animation的基本使用方法与技巧,属性动画将在下一篇博文中介绍. Tween动画可以执行一系列简单变换(位置,大小,旋转,缩放和透明度).所以,如果你有一个TextView对象,您

Android中Animation详解

Animation从总体来说可以分为两类: Tweened Animations:该类提供了旋转,移动,伸展,淡入淡出等效果 Frame-By-Frame Animations:该类可以创建一个Drawable序列,这些Drawable可以按照指定的事件间隔一个一个显示,和动画片差不多 一.Tweened Animations Tweened Animations也有四种类型: Alpha:淡入淡出效果Scale:缩放效果Rotate:旋转效果Translate:移动效果 设置动画效果可以在XM

Android Animation详解一

讲解anroid.view.animation. android.view.animation Provides classes that handle tweened animations. Android provides two mechanisms that you can use to create simple animations: tweened animation, in which you tell Android to perform a series of simple

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

【转】段错误调试神器 - Core Dump详解

from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联网 作者:Alex 时间:2013-07-08 Tag:Linux   点击: 11670 一.前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件某一行, 而是没有任何信息, 使得我们的调试变得困难起来

logback -- 配置详解 -- 三 -- &lt;encoder&gt;

附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appender> logback -- 配置详解 -- 三 -- <encoder> logback -- 配置详解 -- 四 -- <filter> -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

php学习之道:WSDL详解(三)

通过声明方式定义绑定(binding)属性 如果你在服务中采用SOAP binding,你可以使用JAX-WS来指定一定数量的属性binding.这些属性指定对应你在WSDL中指定的属性.某些设置,比如参数类型,可以约束你实现的方法,这些设置也影响声明的效用. @SOAPBinding声明,定义在javax.jws.soap.SOAPBinding接口中.它提供发布时的SOAP Binding细节.如果@SOAPBinding没有被指定,则用缺省的doc/literal SOAPBinding.

UINavigationController详解三(转)ToolBar

原文出自:http://blog.csdn.net/totogo2010/article/details/7682641,特别感谢. 1.显示Toolbar  在RootViewController.m的- (void)viewDidLoad方法中添加代码,这样Toobar就显示出来了. [cpp] view plaincopy [self.navigationController  setToolbarHidden:NO animated:YES]; 2.在ToolBar上添加UIBarBut