_viewAnimation = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
_viewAnimation.backgroundColor = [UIColor redColor];
[self.view addSubview:_viewAnimation];
CABasicAnimation *positionAnima = [CABasicAnimation animationWithKeyPath:@"position.y"];
positionAnima.duration = 0.8;
positionAnima.fromValue = @(self.viewAnimation.center.y);
positionAnima.toValue = @(self.viewAnimation.center.y+100);
positionAnima.removedOnCompletion = NO;
positionAnima.fillMode = kCAFillModeForwards;
[self.viewAnimation.layer addAnimation:positionAnima forKey:@"AnimationMoveY"];
一個(gè)簡(jiǎn)單的移動(dòng)動(dòng)畫。

QQ20170303-140540@2x.png

QQ20170303-140342@2x.png
需要注意以下兩個(gè)參數(shù)
-
fillMode
官方解釋
大意:fillMode的作用就是決定當(dāng)前對(duì)象過了非active時(shí)間段的行為. 比如動(dòng)畫開始之前,動(dòng)畫結(jié)束之后
kCAFillModeRemoved 這個(gè)是默認(rèn)值,也就是說當(dāng)動(dòng)畫開始前和動(dòng)畫結(jié)束后,動(dòng)畫對(duì)layer都沒有影響,動(dòng)畫結(jié)束后,layer會(huì)恢復(fù)到之前的狀態(tài)
kCAFillModeForwards 當(dāng)動(dòng)畫結(jié)束后,layer會(huì)一直保持著動(dòng)畫最后的狀態(tài)
kCAFillModeBackwards 這個(gè)和kCAFillModeForwards是相對(duì)的,就是在動(dòng)畫開始前,你只要將動(dòng)畫加入了一個(gè)layer,layer便立即進(jìn)入動(dòng)畫的初始狀態(tài)并等待動(dòng)畫開始.你可以這樣設(shè)定測(cè)試代碼,將一個(gè)動(dòng)畫加入一個(gè)layer的時(shí)候延遲5秒執(zhí)行.然后就會(huì)發(fā)現(xiàn)在動(dòng)畫沒有開始的時(shí)候,只要?jiǎng)赢嫳患尤肓薼ayer,layer便處于動(dòng)畫初始狀態(tài)
kCAFillModeBoth 理解了上面兩個(gè),這個(gè)就很好理解了,這個(gè)其實(shí)就是上面兩個(gè)的合成.動(dòng)畫加入后開始之前,layer便處于動(dòng)畫初始狀態(tài),動(dòng)畫結(jié)束后layer保持動(dòng)畫最后的狀態(tài).
- removedOnCompletion

QQ20170303-135848@2x.png
大意:當(dāng)動(dòng)畫完成后自動(dòng)變回原樣
有了這兩個(gè)參數(shù)之后,動(dòng)畫結(jié)束后view便保持結(jié)束狀態(tài),但是它的frame值并沒有發(fā)生改變
開始的frame:(origin = (x = 100, y = 100), size = (width = 100, height = 100))
結(jié)束的frame:(origin = (x = 100, y = 100), size = (width = 100, height = 100))
