類(lèi)說(shuō)明
CAViewAnimation是CrossApp中提供實(shí)現(xiàn)動(dòng)畫(huà)效果的類(lèi),它的對(duì)外提供一系列的靜態(tài)函數(shù)供使用者調(diào)用,通過(guò)對(duì)CAViewAnimation的屬性設(shè)置,及對(duì)View屬性的改變,來(lái)定制你所需要的動(dòng)畫(huà)效果。CAViewAnimation的使用方法類(lèi)似于IOS開(kāi)發(fā)中的Core Animation
CAViewAnimation 方法(點(diǎn)擊查看方法介紹)
方法 | 說(shuō)明 |
beginAnimations | 表示動(dòng)畫(huà)開(kāi)始 |
commitAnimations | 表示動(dòng)畫(huà)結(jié)束 |
setAnimationDuration | 動(dòng)畫(huà)所用的時(shí)間,默認(rèn)為0.2秒 |
setAnimationDelay | 動(dòng)畫(huà)延時(shí)多長(zhǎng)時(shí)間后開(kāi)始播放,默認(rèn)為0秒 |
setAnimationCurve | 設(shè)置動(dòng)畫(huà)的曲線(xiàn)方式 |
setAnimationRepeatCount | 動(dòng)畫(huà)的重復(fù)次數(shù),默認(rèn)1次 |
setAnimationRepeatAutoreverses | 畫(huà)結(jié)束后,是否執(zhí)行反向動(dòng)作,默認(rèn)為false |
setAnimationWillStartSelector | 動(dòng)畫(huà)開(kāi)始時(shí),調(diào)用SEL_CAViewAnimation0函數(shù),SEL_CAViewAnimation0函數(shù)是一個(gè)無(wú)參數(shù)的函數(shù) |
setAnimationWillStartSelector | 動(dòng)畫(huà)開(kāi)始時(shí),調(diào)用SEL_CAViewAnimation2函數(shù),SEL_CAViewAnimation2函數(shù)是一個(gè)有兩個(gè)參數(shù)的函數(shù),分別是const std::string& animationID和void* context |
setAnimationDidStopSelector | 動(dòng)畫(huà)結(jié)束時(shí),調(diào)用SEL_CAViewAnimation0函數(shù),SEL_CAViewAnimation0函數(shù)是一個(gè)無(wú)參數(shù)的函數(shù) |
setAnimationDidStopSelector | 動(dòng)畫(huà)結(jié)束時(shí),調(diào)用SEL_CAViewAnimation2函數(shù),SEL_CAViewAnimation2函數(shù)是一個(gè)有兩個(gè)參數(shù)的函數(shù),分別是const std::string& animationID和void* context |
removeAnimations | 根據(jù)animationID移除對(duì)應(yīng)的動(dòng)畫(huà) |
removeAnimationsWithView | 移除對(duì)應(yīng)的CAView的動(dòng)畫(huà) |
setAnimationsEnabled | 設(shè)置是否禁用動(dòng)畫(huà)效果 |
areAnimationsEnabled | 動(dòng)畫(huà)是否被禁用 |
areBeginAnimations | 動(dòng)畫(huà)是否開(kāi)始執(zhí)行 |
areBeginAnimationsWithID | 對(duì)應(yīng)的animationID的動(dòng)畫(huà)是否開(kāi)始執(zhí)行 |
基本用法
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);//開(kāi)始
//CAView屬性的改變:縮放、位置、旋轉(zhuǎn)、透明度等等.
label->setScale(5);
CAViewAnimation::commitAnimations();//結(jié)束
這是CAViewAnimation最基本的用法,beginAnimations和commitAnimations函數(shù)都是成對(duì)出現(xiàn)的,上一段代碼就能夠?qū)崿F(xiàn)讓CAView放大5倍的動(dòng)畫(huà)效果,雖然我們沒(méi)有設(shè)置它的時(shí)間,但默認(rèn)時(shí)間為0.2秒CAViewAnimation::beginAnimations("animation1", NULL);//開(kāi)始
CAViewAnimation::setAnimationDuration(0.8);//設(shè)置時(shí)間
CAViewAnimation::setAnimationDelay(1.0);//設(shè)置延時(shí)時(shí)間
/*
*CAView屬性的改變:縮放、位置、旋轉(zhuǎn)、透明度等等.
*例如:label->setScale(5);
*/
CAViewAnimation::setAnimationCurve(CAViewAnimationCurveEaseInOut);//時(shí)間曲線(xiàn)
CAViewAnimation::setAnimationRepeatAutoreverses(true);//是否執(zhí)行反動(dòng)作
CAViewAnimation::setAnimationRepeatCount(2);//反動(dòng)作執(zhí)行次數(shù)
CAViewAnimation::commitAnimations();//結(jié)束
動(dòng)畫(huà)的嵌套
CAViewAnimation::beginAnimations("animation1", NULL);
CAViewAnimation::setAnimationDuration(0.8);//設(shè)置animation1時(shí)間
//1部分的動(dòng)畫(huà)
CAViewAnimation::beginAnimations("animation2", NULL);
CAViewAnimation::setAnimationDuration(0.8);//設(shè)置animation2時(shí)間
//2部分的動(dòng)畫(huà)
CAViewAnimation::commitAnimations();//結(jié)束1
CAViewAnimation::commitAnimations();//結(jié)束2
監(jiān)聽(tīng)與回調(diào)
CAViewAnimation::beginAnimations("animation1", NULL);//開(kāi)始
//開(kāi)始回調(diào),在A(yíng)nimation開(kāi)始時(shí)調(diào)用
CAViewAnimation::setAnimationWillStartSelector(this, CAViewAnimation0_selector(FirstViewController::callbackStartAnimation0));
/*
*CAView屬性的改變:縮放、位置、旋轉(zhuǎn)、透明度等等.
*例如:label->setScale(5);
*/
//結(jié)束回調(diào),在A(yíng)nimation結(jié)束時(shí)調(diào)用
CAViewAnimation::setAnimationDidStopSelector(this, CAViewAnimation2_selector(FirstViewController::callbackStopAnimation2));
CAViewAnimation::commitAnimations();//結(jié)束
開(kāi)始回調(diào)函數(shù)如下void FirstViewController::callbackStartAnimation0()
{
CCLog("callbackStartAnimation0-->");
}
結(jié)束回調(diào)函數(shù)如下
void FirstViewController::callbackStopAnimation2(const std::string& animationID , void* context)
{
//輸出animationID
CCLog("animationID:%s",animationID.c_str());
}
例如:
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);//設(shè)置時(shí)間
label->setScale(5);
CAViewAnimation2_selector(FirstViewController::callbackStopAnimation2));//結(jié)束回調(diào),在A(yíng)nimation結(jié)束時(shí)調(diào)用
CAViewAnimation::commitAnimations();//結(jié)束
回調(diào):
void FirstViewController::callbackStopAnimation2(const std::string& animationID , void* context)
{
CALabel* label = (CALabel*)context;
if (label) {
label->setRotation(180);
}
}
這個(gè)樣我們就可以獲得Label并改變其屬性,當(dāng)然我們可以傳入其他類(lèi)型的參數(shù)。
組合動(dòng)畫(huà)
1同時(shí)執(zhí)行
默認(rèn)情況下,CAView的屬性變化寫(xiě)在一對(duì)beginAnimations()和commitAnimations()直接,這些所有的變化將是同時(shí)執(zhí)行。
2順序執(zhí)行
方法一:延時(shí)
利用延時(shí),在上一個(gè)Animation時(shí)間結(jié)束后,再執(zhí)行下一個(gè)Animation。
//第一個(gè)Animation
CAViewAnimation::beginAnimations("", NULL);
CAViewAnimation::setAnimationDuration(1.8);
label->setRotation(180);
CAViewAnimation::commitAnimations();
//第二個(gè)Animation
CAViewAnimation::beginAnimations("", NULL);
CAViewAnimation::setAnimationDuration(2.8);
CAViewAnimation::setAnimationDelay(1.8);//延時(shí)1.8秒
label->setScale(5);
CAViewAnimation::commitAnimations();
方法二:回調(diào)
利用Animation的介紹回調(diào)
CAViewAnimation::beginAnimations(
"animation1"
, NULL);
//開(kāi)始
/*
*CAView屬性的改變:縮放、位置、旋轉(zhuǎn)、透明度等等.
*例如:label->setScale(5);
*/
//結(jié)束回調(diào),在A(yíng)nimation結(jié)束時(shí)調(diào)用
CAViewAnimation::setAnimationDidStopSelector(
this
, CAViewAnimation0_selector(FirstViewController::callbackStopAnimation0));
CAViewAnimation::commitAnimations();
//結(jié)束
在回調(diào)函數(shù)里實(shí)現(xiàn)另一個(gè)Animation
void
FirstViewController::callbackStopAnimation0()
{
CAViewAnimation::beginAnimations(
"NextAnimation"
, NULL);
//開(kāi)始
/*
*CAView屬性的改變:縮放、位置、旋轉(zhuǎn)、透明度等等.
*例如:label->setRotation(180);
*/
CAViewAnimation::commitAnimations();
//結(jié)束
}
CAViewAnimation 方法
static void beginAnimations(const std::string& animationID, void* context);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
const std::string& | animationID | 動(dòng)畫(huà)標(biāo)識(shí)符 |
void* | context | 用于回調(diào)函數(shù)的參數(shù),一般為NULL |
解釋?zhuān)罕硎緞?dòng)畫(huà)開(kāi)始
static void commitAnimations();
返回值:void
參數(shù):
解釋?zhuān)罕硎緞?dòng)畫(huà)結(jié)束
static void setAnimationDuration(float duration);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
float | duration | 動(dòng)畫(huà)時(shí)間 |
解釋?zhuān)簞?dòng)畫(huà)所用的時(shí)間,默認(rèn)為0.2秒
static void setAnimationDelay(float delay);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
float | delay | 延遲時(shí)間 |
解釋?zhuān)簞?dòng)畫(huà)延時(shí)多長(zhǎng)時(shí)間后開(kāi)始播放,默認(rèn)為0秒
static void setAnimationCurve(const CAViewAnimationCurve& curve);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAViewAnimationCurve& | curve | 曲線(xiàn) |
解釋?zhuān)涸O(shè)置動(dòng)畫(huà)的曲線(xiàn)方式(就是動(dòng)畫(huà)的總體變化的時(shí)間曲線(xiàn):開(kāi)始快最后慢,開(kāi)始慢最后快,最后慢,均勻線(xiàn)性)
typedef
enum
{
CAViewAnimationCurveLinear = 0,
// 均勻線(xiàn)性
CAViewAnimationCurveEaseOut,
// 結(jié)束時(shí)緩慢
CAViewAnimationCurveEaseIn,
// 開(kāi)始時(shí)緩慢
CAViewAnimationCurveEaseInOut
// 開(kāi)始和結(jié)束時(shí)都慢,中間快
}CAViewAnimationCurve;
static void setAnimationRepeatCount(float repeatCount);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
float | repeatCount | 重復(fù)次數(shù) |
解釋?zhuān)簞?dòng)畫(huà)的重復(fù)次數(shù),默認(rèn)1次
static void setAnimationRepeatAutoreverses(bool repeatAutoreverses);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
bool | repeatAutoreverses | 動(dòng)畫(huà)結(jié)束后,是否執(zhí)行反向動(dòng)作 |
解釋?zhuān)簞?dòng)畫(huà)結(jié)束后,是否執(zhí)行反向動(dòng)作,默認(rèn)為false
static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation0 selector);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAObject* | target | 目標(biāo) |
SEL_CAViewAnimation0 | selector | 選擇器 |
解釋?zhuān)簞?dòng)畫(huà)開(kāi)始時(shí),調(diào)用SEL_CAViewAnimation0函數(shù),SEL_CAViewAnimation0函數(shù)是一個(gè)無(wú)參數(shù)的函數(shù)
static void setAnimationWillStartSelector(CAObject* target, SEL_CAViewAnimation2 selector);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAObject* | target | 目標(biāo) |
SEL_CAViewAnimation2 | selector | 選擇器 |
解釋?zhuān)簞?dòng)畫(huà)開(kāi)始時(shí),調(diào)用SEL_CAViewAnimation2函數(shù),SEL_CAViewAnimation2函數(shù)是一個(gè)有兩個(gè)參數(shù)的函數(shù),分別是const std::string& animationID和void* context
static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation0 selector);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAObject* | target | 目標(biāo) |
SEL_CAViewAnimation0 | selector | 選擇器 |
解釋?zhuān)簞?dòng)畫(huà)結(jié)束時(shí),調(diào)用SEL_CAViewAnimation0函數(shù),SEL_CAViewAnimation0函數(shù)是一個(gè)無(wú)參數(shù)的函數(shù)
static void setAnimationDidStopSelector(CAObject* target, SEL_CAViewAnimation2 selector);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAObject* | target | 目標(biāo) |
SEL_CAViewAnimation2 | selector | 選擇器 |
解釋?zhuān)簞?dòng)畫(huà)結(jié)束時(shí),調(diào)用SEL_CAViewAnimation2函數(shù),SEL_CAViewAnimation2函數(shù)是一個(gè)有兩個(gè)參數(shù)的函數(shù),分別是const std::string& animationID和void* context
static void removeAnimations(const std::string& animationID);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
const std::string& | animationID | 動(dòng)畫(huà)標(biāo)識(shí)符 |
解釋?zhuān)焊鶕?jù)animationID移除對(duì)應(yīng)的動(dòng)畫(huà)
static void removeAnimationsWithView(CAView* view);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
CAView* | view | View動(dòng)畫(huà) |
解釋?zhuān)阂瞥龑?duì)應(yīng)的CAView的動(dòng)畫(huà)
static void setAnimationsEnabled(bool enabled);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
bool | enabled | 是否啟用 |
解釋?zhuān)涸O(shè)置是否禁用動(dòng)畫(huà)效
static bool areAnimationsEnabled();
返回值:void
參數(shù):
解釋?zhuān)簞?dòng)畫(huà)是否被禁用
static bool areBeginAnimations();
返回值:void
參數(shù):
解釋?zhuān)簞?dòng)畫(huà)是否開(kāi)始執(zhí)行
static bool areBeginAnimationsWithID(const std::string& animationID);
返回值:void
參數(shù):
類(lèi)型 | 參數(shù)名 | 說(shuō)明 |
const std::string& | animationID | 動(dòng)畫(huà)標(biāo)識(shí)符 |
解釋?zhuān)簩?duì)應(yīng)的animationID的動(dòng)畫(huà)是否開(kāi)始執(zhí)行
更多建議: