JSRUN 用代码说话

CAViewAnimation(动画实现)

编辑教程

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并改变其属性,当然我们可以传入其他类型的参数。

组合动画

同时执行

默认情况下,CAView的属性变化写在一对beginAnimations()和commitAnimations()直接,这些所有的变化将是同时执行。

顺序执行

延时

利用延时,在上一个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的动画是否开始执行

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟