类说明 CAViewAnimation是CrossApp中提供实现动画效果的类,它的对外提供一系列的静态函数供使用者调用,通过对CAViewAnimation的属性设置,及对View属性的改变,来定制你所需要的动画效果。CAViewAnimation的使用方法类似于IOS开发中的Core Animation
CAViewAnimation 方法(点击查看方法介绍)
基本用法
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);
CAViewAnimation::setAnimationDidStopSelector( this , CAViewAnimation0_selector(FirstViewController::callbackStopAnimation0));
CAViewAnimation::commitAnimations();
在回调函数里实现另一个Animation
void FirstViewController::callbackStopAnimation0()
{
CAViewAnimation::beginAnimations( "NextAnimation" , NULL);
|
请发表评论