CAViewAnimation(动画实现)

2018-09-08 18:07 更新

类说明
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

    参数:

    类型参数名说明
    floatduration动画时间

    解释:动画所用的时间,默认为0.2秒


    static void setAnimationDelay(float delay);

    返回值:void

    参数:

    类型参数名说明
    floatdelay延迟时间

    解释:动画延时多长时间后开始播放,默认为0秒


    static void setAnimationCurve(const CAViewAnimationCurve& curve);

    返回值:void

    参数:

    类型参数名说明
    CAViewAnimationCurve&curve曲线

    解释:设置动画的曲线方式(就是动画的总体变化的时间曲线:开始快最后慢,开始慢最后快,最后慢,均匀线性)

    typedef enum
    {
        CAViewAnimationCurveLinear = 0,       // 均匀线性
        CAViewAnimationCurveEaseOut,          // 结束时缓慢
        CAViewAnimationCurveEaseIn,           // 开始时缓慢
        CAViewAnimationCurveEaseInOut         // 开始和结束时都慢,中间快
    }CAViewAnimationCurve;


    static void setAnimationRepeatCount(float repeatCount);

    返回值:void

    参数:

    类型参数名说明
    floatrepeatCount重复次数

    解释:动画的重复次数,默认1次


    static void setAnimationRepeatAutoreverses(bool repeatAutoreverses);

    返回值:void

    参数:

    类型参数名说明
    boolrepeatAutoreverses动画结束后,是否执行反向动作

    解释:动画结束后,是否执行反向动作,默认为false


    static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation0 selector);

    返回值:void

    参数:

    类型参数名说明
    CAObject* target目标
    SEL_CAViewAnimation0selector选择器

    解释:动画开始时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数

     

    static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation2 selector);

    返回值:void

    参数:

    类型参数名说明
    CAObject* target目标
    SEL_CAViewAnimation2selector选择器

    解释:动画开始时,调用SEL_CAViewAnimation2函数,SEL_CAViewAnimation2函数是一个有两个参数的函数,分别是const std::string& animationID和void* context

       

    static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation0 selector);

    返回值:void

    参数:

    类型参数名说明
    CAObject*target目标
    SEL_CAViewAnimation0selector选择器

    解释:动画结束时,调用SEL_CAViewAnimation0函数,SEL_CAViewAnimation0函数是一个无参数的函数


    static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation2 selector);

    返回值:void

    参数:

    类型参数名说明
    CAObject*target目标
    SEL_CAViewAnimation2selector选择器

    解释:动画结束时,调用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*viewView动画

    解释:移除对应的CAView的动画


    static void setAnimationsEnabled(bool enabled);

    返回值:void

    参数:

    类型参数名说明
    boolenabled是否启用

    解释:设置是否禁用动画效

       

    static bool areAnimationsEnabled();

    返回值:void

    参数:

    解释:动画是否被禁用


    static bool areBeginAnimations();

    返回值:void

    参数:

    解释:动画是否开始执行


    static bool areBeginAnimationsWithID(const std::string& animationID);

    返回值:void

    参数:

    类型参数名说明
    const std::string&animationID动画标识符

    解释:对应的animationID的动画是否开始执行

    以上内容是否对您有帮助:
    在线笔记
    App下载
    App下载

    扫描二维码

    下载编程狮App

    公众号
    微信公众号

    编程狮公众号