iOS中的CoreAnimation

核心動(dòng)畫(huà),也是iOS常用的東西。但以前的時(shí)候居然很少用到,唉。在此需好好記錄一下。

Core Animation,核心動(dòng)畫(huà),是一組非常強(qiáng)大的動(dòng)畫(huà)處理API。Core Animation是直接作用在CALayer上的,并不是UIView。

Core Animation依然在QuartzCore.framework中,這個(gè)框架已經(jīng)默認(rèn)加入了工程,因此只需導(dǎo)入頭文件就行了。

先來(lái)看看Core Animation里面的繼承結(jié)構(gòu):


繼承結(jié)構(gòu)

其中CAMediaTiming是協(xié)議。在使用過(guò)程中,一般不會(huì)直接使用CAAnimation類(lèi),而是使用它的子類(lèi)CABasicAnimation等。其中CAPropertyAnimation也是不能直接使用的,它是提供一個(gè)NSString類(lèi)型的keyPath屬性,你可以指定CALayer的某個(gè)屬性名為keyPath,并且對(duì)CALayer的這個(gè)屬性的值進(jìn)行修改,達(dá)到相應(yīng)的動(dòng)畫(huà)效果。比如,指定@"position"為keyPath,就會(huì)修改CALayer的position屬性的值,以達(dá)到平移的動(dòng)畫(huà)效果。因此,初始化好CAPropertyAnimation的子類(lèi)對(duì)象后,必須先設(shè)置keyPath,搞清楚要修改的是CALayer的哪個(gè)屬性,執(zhí)行的是怎樣的動(dòng)畫(huà)。

Core Animation使用步驟如下:

  1. 初始化一個(gè)CAAnimation對(duì)象,并設(shè)置一些動(dòng)畫(huà)相關(guān)屬性;
  2. 通過(guò)調(diào)用CALayer的addAnimation:forKey:方法增加CAAnimation對(duì)象到CALayer中,這樣就能開(kāi)始執(zhí)行動(dòng)畫(huà);
  3. 通過(guò)調(diào)用CALayer的removeAnimationForKey:方法可以停止CALayer中的動(dòng)畫(huà).

CAAnimation的常用屬性有以下幾種:

  1. duration:動(dòng)畫(huà)的持續(xù)時(shí)間;
  2. repeatCount:動(dòng)畫(huà)的重復(fù)次數(shù);
  3. timingFunction:控制動(dòng)畫(huà)運(yùn)行的節(jié)奏;
    timingFunction可選的值有:
    kCAMediaTimingFunctionLinear(線(xiàn)性):勻速,給你一個(gè)相對(duì)靜態(tài)的感覺(jué);
    kCAMediaTimingFunctionEaseIn(漸進(jìn)):動(dòng)畫(huà)緩慢進(jìn)入,然后加速離開(kāi);
    kCAMediaTimingFunctionEaseOut(漸出):動(dòng)畫(huà)全速進(jìn)入,然后減速的到達(dá)目的地;
    kCAMediaTimingFunctionEaseInEaseOut(漸進(jìn)漸出):動(dòng)畫(huà)緩慢的進(jìn)入,中間加速,然后減速的到達(dá)目的地。這個(gè)是默認(rèn)的動(dòng)畫(huà)行為。
  4. delegate:動(dòng)畫(huà)代理,用來(lái)監(jiān)聽(tīng)動(dòng)畫(huà)的執(zhí)行過(guò)程.
    其中代理方法有:

@interface NSObject (CAAnimationDelegate)
// 動(dòng)畫(huà)開(kāi)始執(zhí)行的時(shí)候觸發(fā)這個(gè)方法
-(void)animationDidStart:(CAAnimation *)anim;
// 動(dòng)畫(huà)執(zhí)行完畢的時(shí)候觸發(fā)這個(gè)方法
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

下面舉幾個(gè)例子:
我們?cè)谟脛?dòng)畫(huà)的時(shí)候,一般用CABasicAnimation類(lèi)。

平移動(dòng)畫(huà):

- (void)viewDidLoad {
  [super viewDidLoad];
  
  _subView = [[UIView alloc] init];
  _subView.layer.position = CGPointMake(100, 100);
  _subView.layer.bounds = CGRectMake(0, 0, 100, 100);
  _subView.backgroundColor = [UIColor redColor];
  [self.view addSubview:_subView];

  //平移動(dòng)畫(huà)
  CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];
  anim.duration = 1.5;

  anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 80)];
  
  //也可以通過(guò)transform屬性來(lái)設(shè)置
  //CATransform3D form = CATransform3DMakeTranslation(350, 350, 0);
  //anim.toValue = [NSValue valueWithCATransform3D:form];

  anim.delegate = self;

  //保持動(dòng)畫(huà)執(zhí)行后的狀態(tài)
  anim.removedOnCompletion = NO;
  anim.fillMode = kCAFillModeForwards;

  [_subView.layer addAnimation:anim forKey:@"translate"];

縮放動(dòng)畫(huà):

//縮放動(dòng)畫(huà)
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"bounds"];
anim.duration = 2;

anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 30, 30)];
[_subView.layer addAnimation:anim forKey:nil];

旋轉(zhuǎn)動(dòng)畫(huà):

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
anim.duration = 1.5;

// 繞著(0, 0, 1)這個(gè)向量軸順時(shí)針旋轉(zhuǎn)45°
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)];

[_subView.layer addAnimation:anim forKey:nil];

CABasicAnimation改變視圖的方式就是通過(guò)初始化的時(shí)候的keyPath來(lái)找CALayer中對(duì)應(yīng)的屬性,可以從官方文檔中查詢(xún)所有的Animatable Properties。

對(duì)了,CABasicAnimation只能讓CALayer的屬性從某個(gè)值漸變到另一個(gè)值,僅僅是在2個(gè)值之間漸變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載自:http://www.cocoachina.com/ios/20150105/10812.html 為...
    idiot_lin閱讀 1,377評(píng)論 0 1
  • 在iOS實(shí)際開(kāi)發(fā)中常用的動(dòng)畫(huà)無(wú)非是以下四種:UIView動(dòng)畫(huà),核心動(dòng)畫(huà),幀動(dòng)畫(huà),自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,315評(píng)論 1 23
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺ios動(dòng)畫(huà)全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫(huà)效果,實(shí)現(xiàn)這些動(dòng)畫(huà)的過(guò)程并不復(fù)雜,今天將帶大家一窺iOS動(dòng)畫(huà)全貌。在這里你可以看...
    F麥子閱讀 5,267評(píng)論 5 13
  • Core Animation Core Animation,中文翻譯為核心動(dòng)畫(huà),它是一組非常強(qiáng)大的動(dòng)畫(huà)處理API,...
    45b645c5912e閱讀 3,154評(píng)論 0 21

友情鏈接更多精彩內(nèi)容