补作业 - Dynamic Animator

2017-06-16  本文已影响39人  那像猫的狗

UIDynamicAnimator :为我们提供了一些基于物理学的动画,让我们更容易的做出一些与现实世界(物理行为)相符的逼真的二维动画。

iOS 7 之后,Apple 给我们提供了一个与物理学相关(physics-related)的 API,与之相关的有两个类和一个协议:

一张图更好的理解:


UIDynamicAnimator

Demo

它像一个驱动类,它关联了遵守UIDynamicItem协议的可动画对象Item和行为Behavior,给动画的执行提供了上下文,之后动画的执行由它驱动。它有类似于集合的一些方法:- addBehavior:,- removeBehavior:,- removeAllBehaviors.

其中,需要注意的有几点:

APIs

UIDynamicAnimatorAPI只有几个,如下:

UIDynamicAnimator

UIDynamicBehavior

提供动画行为的类。使用中我们更多的是直接使用他的子类。子类具体如图1所示。它的子类实现了各种物理学行为。具体可以查看每个子类的头文件。他们有几个通用的属性:

UIAttachmentBehavior

Discussion

UIAttachmentBehavior可以把两个view或者viewanchorPoint 关联起来。

APIs

它有一些自己的属性,其中比较重要的是:

demo

基于苹果爸爸强大的封装,我们可以很容易的实现下面的效果:

Attachment

完整的代码为:

UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:self.animationView attachedToItem:self.relyView];
attachment.damping = 0.5;
attachment.frequency = 1.f;
attachment.length = 80;
//    attachment.frictionTorque = 1.f;
attachment.action = ^{
   NSLog(@"%@",NSStringFromCGRect(self.animationView.frame));
};
[self.animator addBehavior:attachment];

你可以自己调整下参数,看看之后的效果。

UIGravityBehavior

Discussion

UIGravityBehavior模拟的是现实生活中的重力特性。

Gravity

APIs

能让我们自定义的API只有几个,其中:

UICollisionBehavior

Discussion

UICollisionBehavior模拟的是现实生活中的碰撞特性。在碰撞中,我们需要指定碰撞的边界,碰撞的边界可以是另一个view,可以是一个边界。如果我们没有指定边界的话, 并且也没有将参考视图作为边界,那么碰撞行为就不会发生。

Collision

APIs

UIPushBehavior

Discussion

UIPushBehavior可以对一个物体施加一个连续的或者瞬时的力,并改变物体的位置。

Push

APIs

SnapViewController

Discussion

UISnapBehavior模拟的是物体吸附的行为,并且伴有弹簧动画。

Snap

APIs

UIDynamicItemBehavior

如果你不满足于上面的属性,那么UIDynamicItemBehavior给你提供了更多的选择。我们可以使用UIDynamicItemBehavior,来设置Item的更多属性。包括:

小结

这是 Apple 在 iOS 7推出的功能,在iOS 9之后增加了一些新的API。算是一个老功能,现在才研究起来算是补作业了。基本都是根据官方文档摸索着写的一个小Demo,实现了一些基本的小效果。更加炫酷的就需要靠强大的 idea 了。

上一篇 下一篇

猜你喜欢

热点阅读