- UIView 的动画
为视图添加动画主要有3种方法:
视图中有一些非常特殊的属性, 比如: frame``transform``alpha
属性.
通过 animateWithDuration: 方法来实现:
+ (void)animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion
但有时候我们用的不是这三个属性, 而是一些其它自定义属性,比如我们控制卡牌的翻转, 用的就是让 faceUp = YES, 它本身并不是一个动画属性, 但我想让视图通过动画, 来实现卡牌的翻转, 我要通过某些动画, 来修改整个视图的状态属性
通过 transitionWithView: 方法来实现:
+ (void)transitionWithView:(UIView *)view
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion
- Dynamic Animation
定义一些物理规则, 然后应用于要添加动画效果的视图(View).
如何进行理解?
相当于有一个大的环境(地球),
环境里面有一些"规则"(重力),
"环境"中的"物体"(石头)都要遵循一定的"规则"(重力).
大致的步骤:
(1)创建一个环境(动力动画者)
(2)创建规则(动力行为),并添加到环境中
(3)创建在环境中的物体(动力项),并设置其要遵循的规则
如何运用它?
1.创建一个"环境" (动力动画者 UIDynamicAnimator *)
新建一个 UIDynamicAnimator 对象, 可以创建一个或者多个, 是为了对这些行为进行进行分组
UIDynamicAnimator *animator = [UIDynamicAnimator initWithReferenceView:aView];
2.创建"规则",并添加到"环境中" (动力行为 UIDynamicBehavior *)
创建规则如: 重力, 碰撞, 推动等等, 并把这些添加到环境中
UIGravityBehavior *gravity = [UIGravityBehavior alloc] init];
[animator addBehavior:gravity]; //把重力行为添加到(UIDynamicAnimator)动力动画者
3.创建物体(动力项),并设置其要遵循的规则 (动力项 UIDynamicItem协议)
//1.创建动力项
id <UIDynamicItem> item1 = ...;
//2.并设置其要遵循重力的规则
[gravity addItem:item1];
通常情况下,动力项都是 UIView (90%都是), 但也可以为非视觉项添加动画, 只要其实现的<UIDynamicItem>协议就可以.
协议如下:
@protocol UIDynamicItem
@property (readonly) CGRect bounds;
@property (readwrite) CGPoint center;
@property (readwrite) CGAffineTransform transform;
@end
其中动力项的 center 和 transform 属性是由animator(动力动画者)进行设置的(动力动画者的作用就是弄清动力项的中心,旋转和缩放比例的值),如果你想和动力动画者同时设置动力项属性, 可以调用 updateItemUsingCurrentState:(id<UIDynamicItem>)item 方法,
动力行为 Behaviors
-
UIGravityBehavior (重力行为)
-
UICollisionBehavior (碰撞行为)
-
UIAttachmentBehavior (吸附行为)
-
UIDynamicItemBehavior (动力项行为)
-
UIFieldBehavior (场行为)
-
UIPushBehavior (推动行为)
-
UISnapBehavior (速甩行为)
-
UIGravityBehavior (重力行为)
@property (nonatomic,assign) CGFloat angle; //角度, 可设置重垂线的角度 @property (nonatomic,assign) CGFloat magnitude; //设置重力的大小 1代表9.8N/m
-
UICollisionBehavior (碰撞行为)
@property (nonatomic,assign) UICollisionBehaviorMode collisionMode; //决定了动力项是相互碰撞弹开,还是只从边界碰撞弹开 @property (nonatomic,assign) BOOL translatesReferenceBoundsIntoBoundary; //将参考视图的边界,设置为有弹性的边界 - (void)addBoundaryWithIdentifier:(NSString *)identifier forPath:(UIBezierPath *)path; //添加一个UIBezierPath的碰撞边界,
-
UIAttachmentBehavior (吸附行为)
通过它,可以将一个动力项吸附到一个固定锚点或另外一个动力项上.并且在初始化时指定吸附对象
-
UIDynamicItemBehavior (动力项行为)
动力项内在的物理属性,设置动力项行为的基础属性(公共属性),比如摩擦力,弹力, 密度等, 它们在各个地方应该是一致的. -
UIFieldBehavior (场行为)
-
UIPushBehavior (推动行为)
推一下对象, 它就开始移动了 -
UISnapBehavior (速甩行为)
速甩行为是将一个动力项甩到一个位置
网友评论