ThinkVerb 基于 CoreAnimation 的动画库开源项目

我要开发同款
匿名用户2019年01月31日
129阅读
开发技术Object-c
所属分类Objective-C、iOS/iPhone/iPad开发包、手机/移动开发
授权协议MIT

作品详情

EnglishIntroduction

ThinkVerb

ThinkVerb是一组基于CoreAnimation的API,相比与直接使用CoreAnimation,ThinkVerb通过链式语法进行编程,并且自管理CAAnimation,你无需自己手动创建任何CAAnimation并将其添加到视图上。

得益于此,ThinkVerb可以用非常少的代码快速生成基础动画,不单单如此,你说写的代码还相当可读而易于维护。

目前ThinkVerb的功能几乎涵盖了所有的基础动画,你可以轻松多个基础动画的组合来生成一个复杂的动画。如果用原生代码,你可能需要大量代码来完成此工作,但是用ThinkVerb,你则可以在短短几行代码里完成相同的工作量。

Usage

ThinkVerb很简单,它只有一个入口,那就是ThinkVerb扩展UIView的一个属性:TVAnimation。

TVAnimation管理所有的动画单元,我们称动画单元为Sprite,你需要做的只有:通过TVAnimation创建sprite,配置sprite,最后activatesprite。这样,动画就被激活,UIView将自动开始动画。

例如,如果你想永不停息地旋转你的UIView,你只需要下面这一句代码:NSString *rotation = view.TVAnimation.rotate.z.endAngle(M_PI * 2).repeat(-1).activate();

或者,如果你想为你创建的sprite定义你自己想要的名字,你可以这么写:

view.TVAnimation.rotate.z.endAngle(M_PI * 2).repeat(-1).activateAs(@"rotation");

这行代码会绕着z轴旋转你的UIView,其旋转角度是从UIView当前的角度旋转到M_PI*2,假设当前角度是0,那就是转一圈。repeat(-1) 能够让sprite无限重复。最后,调用 activate() 就等于激活了该动画。

通常情况下,如果你没有让sprite永远重复下去,或者没有让sprite在动画结束时停留,sprite会自动被移除并释放,而如上面的例子,你需要手动移除该动画:view.TVAnimation.clear();上面一行代码移除view的所有动画,通常情况下,你调用这一行代码就够了,如果你不想对view的其他动画造成影响,你可以只移除相应的动画:view.TVAnimation.existSprite(rotation).stop();

如果你自己定义了名字,你可以这么做:

view.TVAnimation.existSprite(@"rotation").stop();

这样,旋转会停止,sprite会被移除并释放,否则,就算view释放掉了,sprite也不会被释放,从而造成内存泄漏。

你可以通过ThinkVerbDemo看到更多的例子。

ThinkVerb做复杂动画也是相当轻松的,你甚至可以写出一把手枪来:

view.TVAnimation.appearance.duration(3).timing(TVTiming.extremeEaseOut).end();view.TVAnimation.contents.drawRange(nil,[UIImage imageNamed:@"1"]).didStop(^{    view.TVAnimation.contents.drawRange([UIImage imageNamed:@"1"],[UIImage imageNamed:@"2"]).didStop(^{        view.TVAnimation.contents.drawRange([UIImage imageNamed:@"2"],[UIImage imageNamed:@"3"]).didStop(^{            view.TVAnimation.contents.drawRange([UIImage imageNamed:@"3"],[UIImage imageNamed:@"2"]).activate();        }).activate();    }).activate();}).activate();InstallationUsingcocoapodspod 'ThinkVerb'Copyfiles

拷贝子ThinkVerb文件夹下的所有源码到你的工程

IndexesBasic

move 从某个点移动view到另一个点

scale 将view缩放到某个倍数

rotate 围绕x/y/z轴旋转view

shadow 对shadow的offset/opacity/radius/color做动画,

bounds 对view的bounds做动画,注意该动画效果取决于anchorPoint

anchor 对view的anchorPoint做动画,单独进行不会有任何效果,需要和相关的动画组合才会有效果

translate 通过偏移来移动动画,基于Transform3D,所以你可以将它应用到sublayer上

fade 淡入淡出

contents 对cotnents属性做动画,如rect属性会对位图的渲染返回做动画,范围在[0011]内

backgroundColor 背景变换

cornerRadius 圆角动画

border 对view的边框的宽度和颜色做动画

path 对view做关键帧动画,可通过贝塞尔控制点生成曲线动画

Appearance

appearancesprite可以用来对某个view配置默认参数,如果你想让某个view的所有sprite默认在动画结束时停留而不移除,你可以在生成sprite之前写:

view.TVAnimation.appearance.keepAlive(YES).end();License

ThinkVerbisreleasedundertheMITlicense.See LICENSE fordetails.

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论