CAViewAnimation(动画实现)
类说明
CAViewAnimation是CrossApp中提供实现动画效果的类,它的对外提供一系列的静态函数供使用者调用,通过对CAViewAnimation的属性设置,及对View属性的改变,来定制你所需要的动画效果。CAViewAnimation的使用方法类似于IOS开发中的Core Animation
CAViewAnimation 方法(点击查看方法介绍)
方法 | 说明 |
beginAnimations | 表示动画开始 |
commitAnimations | 表示动画结束 |
setAnimationDuration | 动画所用的时间,默认为0.2秒 |
setAnimationDelay | 动画延时多长时间后开始播放,默认为0秒 |
setAnimationCurve | 设置动画的曲线方式 |
setAnimationRepeatCount | 动画的重复次数,默认1次 |
setAnimationRepeatAutoreverses | 画结束后,是否执行反向动作,默认为false |
setAnimationWillStartSelector | 动画开始时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数 |
setAnimationWillStartSelector | 动画开始时,调用SEL_CAViewAnimation2函数,SEL_CAViewAnimation2函数是一个有两个参数的函数,分别是const std::string& animationID和void* context |
setAnimationDidStopSelector | 动画结束时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数 |
setAnimationDidStopSelector | 动画结束时,调用SEL_CAViewAnimation2函数,SEL_CAViewAnimation2函数是一个有两个参数的函数,分别是const std::string& animationID和void* context |
removeAnimations | 根据animationID移除对应的动画 |
removeAnimationsWithView | 移除对应的CAView的动画 |
setAnimationsEnabled | 设置是否禁用动画效果 |
areAnimationsEnabled | 动画是否被禁用 |
areBeginAnimations | 动画是否开始执行 |
areBeginAnimationsWithID | 对应的animationID的动画是否开始执行 |
基本用法
CALabel* label = CALabel::createWithCenter(DRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
label->setTextAlignment(CATextAlignmentCenter);
label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
label->setFontSize(_px(72));
label->setText("Hello World!");
label->setColor(CAColor_white);
this->getView()->insertSubview(label, 1);
/****************下面是ViewAnimation部分************************/
CAViewAnimation::beginAnimations("animation1", NULL);//开始
//CAView属性的改变:缩放、位置、旋转、透明度等等.
label->setScale(5);
CAViewAnimation::commitAnimations();//结束
这是CAViewAnimation最基本的用法,beginAnimations和commitAnimations函数都是成对出现的,上一段代码就能够实现让CAView放大5倍的动画效果,虽然我们没有设置它的时间,但默认时间为0.2秒CAViewAnimation::beginAnimations("animation1", NULL);//开始
CAViewAnimation::setAnimationDuration(0.8);//设置时间
CAViewAnimation::setAnimationDelay(1.0);//设置延时时间
/*
*CAView属性的改变:缩放、位置、旋转、透明度等等.
*例如:label->setScale(5);
*/
CAViewAnimation::setAnimationCurve(CAViewAnimationCurveEaseInOut);//时间曲线
CAViewAnimation::setAnimationRepeatAutoreverses(true);//是否执行反动作
CAViewAnimation::setAnimationRepeatCount(2);//反动作执行次数
CAViewAnimation::commitAnimations();//结束
我们可以根据自己的需求,定制更多的属性来实现我们想要的动画效果。这是CAViewAnimation最基本的用法,beginAnimations和commitAnimations函数都是成对出现的,上一段代码就能够实现让CAView放大5倍的动画效果,虽然我们没有设置它的时间,但默认时间为0.2秒
动画的嵌套
CAViewAnimation::beginAnimations("animation1", NULL);
CAViewAnimation::setAnimationDuration(0.8);//设置animation1时间
//1部分的动画
CAViewAnimation::beginAnimations("animation2", NULL);
CAViewAnimation::setAnimationDuration(0.8);//设置animation2时间
//2部分的动画
CAViewAnimation::commitAnimations();//结束1
CAViewAnimation::commitAnimations();//结束2
多个CAViewAnimation之间可以嵌套使用,可以设置不同的时间、延时、反函数及回调等。当一定要注意View属性改变的位置,要写在对应的嵌套层级。
监听与回调
CAViewAnimation::beginAnimations("animation1", NULL);//开始
//开始回调,在Animation开始时调用
CAViewAnimation::setAnimationWillStartSelector(this, CAViewAnimation0_selector(FirstViewController::callbackStartAnimation0));
/*
*CAView属性的改变:缩放、位置、旋转、透明度等等.
*例如:label->setScale(5);
*/
//结束回调,在Animation结束时调用
CAViewAnimation::setAnimationDidStopSelector(this, CAViewAnimation2_selector(FirstViewController::callbackStopAnimation2));
CAViewAnimation::commitAnimations();//结束
开始回调函数如下void FirstViewController::callbackStartAnimation0()
{
CCLog("callbackStartAnimation0-->");
}
结束回调函数如下
void FirstViewController::callbackStopAnimation2(const std::string& animationID , void* context)
{
//输出animationID
CCLog("animationID:%s",animationID.c_str());
}
注意:回调的第二个参数“void* context”就是CAViewAnimation::beginAnimations("animation1", NULL);传入的第二个参数(我们这里传的是NULL),它本身是一个void指针类型,使用时候需要类型转换。开始回调函数如下
例如:
CALabel* label = CALabel::createWithCenter(DRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
this->getView()->insertSubview(label, 1);
CAViewAnimation::beginAnimations("animation1", lable);
CAViewAnimation::setAnimationDuration(0.8);//设置时间
label->setScale(5);
CAViewAnimation2_selector(FirstViewController::callbackStopAnimation2));//结束回调,在Animation结束时调用
CAViewAnimation::commitAnimations();//结束
回调:
void FirstViewController::callbackStopAnimation2(const std::string& animationID , void* context)
{
CALabel* label = (CALabel*)context;
if (label) {
label->setRotation(180);
}
}
这个样我们就可以获得Label并改变其属性,当然我们可以传入其他类型的参数。
组合动画
1同时执行
默认情况下,CAView的属性变化写在一对beginAnimations()和commitAnimations()直接,这些所有的变化将是同时执行。
2顺序执行
方法一:延时
利用延时,在上一个Animation时间结束后,再执行下一个Animation。
//第一个Animation
CAViewAnimation::beginAnimations("", NULL);
CAViewAnimation::setAnimationDuration(1.8);
label->setRotation(180);
CAViewAnimation::commitAnimations();
//第二个Animation
CAViewAnimation::beginAnimations("", NULL);
CAViewAnimation::setAnimationDuration(2.8);
CAViewAnimation::setAnimationDelay(1.8);//延时1.8秒
label->setScale(5);
CAViewAnimation::commitAnimations();
方法二:回调
利用Animation的介绍回调
CAViewAnimation::beginAnimations(
"animation1"
, NULL);
//开始
/*
*CAView属性的改变:缩放、位置、旋转、透明度等等.
*例如:label->setScale(5);
*/
//结束回调,在Animation结束时调用
CAViewAnimation::setAnimationDidStopSelector(
this
, CAViewAnimation0_selector(FirstViewController::callbackStopAnimation0));
CAViewAnimation::commitAnimations();
//结束
在回调函数里实现另一个Animation
void
FirstViewController::callbackStopAnimation0()
{
CAViewAnimation::beginAnimations(
"NextAnimation"
, NULL);
//开始
/*
*CAView属性的改变:缩放、位置、旋转、透明度等等.
*例如:label->setRotation(180);
*/
CAViewAnimation::commitAnimations();
//结束
}
CAViewAnimation 方法
static void beginAnimations(const std::string& animationID, void* context);
返回值:void
参数:
类型 | 参数名 | 说明 |
const std::string& | animationID | 动画标识符 |
void* | context | 用于回调函数的参数,一般为NULL |
解释:表示动画开始
static void commitAnimations();
返回值:void
参数:
解释:表示动画结束
static void setAnimationDuration(float duration);
返回值:void
参数:
类型 | 参数名 | 说明 |
float | duration | 动画时间 |
解释:动画所用的时间,默认为0.2秒
static void setAnimationDelay(float delay);
返回值:void
参数:
类型 | 参数名 | 说明 |
float | delay | 延迟时间 |
解释:动画延时多长时间后开始播放,默认为0秒
static void setAnimationCurve(const CAViewAnimationCurve& curve);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAViewAnimationCurve& | curve | 曲线 |
解释:设置动画的曲线方式(就是动画的总体变化的时间曲线:开始快最后慢,开始慢最后快,最后慢,均匀线性)
typedef
enum
{
CAViewAnimationCurveLinear = 0,
// 均匀线性
CAViewAnimationCurveEaseOut,
// 结束时缓慢
CAViewAnimationCurveEaseIn,
// 开始时缓慢
CAViewAnimationCurveEaseInOut
// 开始和结束时都慢,中间快
}CAViewAnimationCurve;
static void setAnimationRepeatCount(float repeatCount);
返回值:void
参数:
类型 | 参数名 | 说明 |
float | repeatCount | 重复次数 |
解释:动画的重复次数,默认1次
static void setAnimationRepeatAutoreverses(bool repeatAutoreverses);
返回值:void
参数:
类型 | 参数名 | 说明 |
bool | repeatAutoreverses | 动画结束后,是否执行反向动作 |
解释:动画结束后,是否执行反向动作,默认为false
static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation0 selector);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAObject* | target | 目标 |
SEL_CAViewAnimation0 | selector | 选择器 |
解释:动画开始时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数
static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation2 selector);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAObject* | target | 目标 |
SEL_CAViewAnimation2 | selector | 选择器 |
解释:动画开始时,调用SEL_CAViewAnimation2函数,SEL_CAViewAnimation2函数是一个有两个参数的函数,分别是const std::string& animationID和void* context
static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation0 selector);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAObject* | target | 目标 |
SEL_CAViewAnimation0 | selector | 选择器 |
解释:动画结束时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数
static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation2 selector);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAObject* | target | 目标 |
SEL_CAViewAnimation2 | selector | 选择器 |
解释:动画结束时,调用SEL_CAViewAnimation2函数,SEL_CAViewAnimation2函数是一个有两个参数的函数,分别是const std::string& animationID和void* context
static void removeAnimations(const std::string& animationID);
返回值:void
参数:
类型 | 参数名 | 说明 |
const std::string& | animationID | 动画标识符 |
解释:根据animationID移除对应的动画
static void removeAnimationsWithView(CAView* view);
返回值:void
参数:
类型 | 参数名 | 说明 |
CAView* | view | View动画 |
解释:移除对应的CAView的动画
static void setAnimationsEnabled(bool enabled);
返回值:void
参数:
类型 | 参数名 | 说明 |
bool | enabled | 是否启用 |
解释:设置是否禁用动画效
static bool areAnimationsEnabled();
返回值:void
参数:
解释:动画是否被禁用
static bool areBeginAnimations();
返回值:void
参数:
解释:动画是否开始执行
static bool areBeginAnimationsWithID(const std::string& animationID);
返回值:void
参数:
类型 | 参数名 | 说明 |
const std::string& | animationID | 动画标识符 |
解释:对应的animationID的动画是否开始执行