關(guān)于 Core Animation
Core Animation是一組非常強(qiáng)大的動(dòng)畫(huà)處理API,使用它能做出很多優(yōu)雅的動(dòng)畫(huà)效果预柒。能用的動(dòng)畫(huà)類(lèi)有4個(gè)子類(lèi):CABasicAnimation蟆融、CAKeyframeAnimation洒疚、CATransition朱巨、CAAnimationGroup
開(kāi)發(fā)步驟:
**
- 初始化一個(gè)動(dòng)畫(huà)對(duì)象(CAAnimation)并設(shè)置一些動(dòng)畫(huà)相關(guān)屬性.
- 添加動(dòng)畫(huà)對(duì)象到層(CALayer)中,開(kāi)始執(zhí)行動(dòng)畫(huà).
CALayer中很多屬性都可以通過(guò)CAAnimation實(shí)現(xiàn)動(dòng)畫(huà)效果, 包括opacity, position, transform, bounds, contents等呀潭,具體可以在API文檔中查找
通過(guò)調(diào)用CALayer的addAnimation:forKey:增加動(dòng)畫(huà)到層(CALayer)中,這樣就能觸發(fā)動(dòng)畫(huà)了.通過(guò)調(diào)用removeAnimationForKey:可以停止層中的動(dòng)畫(huà).
注:Core Animation的動(dòng)畫(huà)執(zhí)行過(guò)程都是在后臺(tái)操作的,不會(huì)阻塞主線程.
巧妙的運(yùn)用這些可以屬性實(shí)現(xiàn)很棒的動(dòng)畫(huà)效果械蹋,比如下面:用CABasicAnimation實(shí)現(xiàn)的動(dòng)畫(huà)
CABasicAnimation動(dòng)畫(huà)
簡(jiǎn)單的呼吸和搖擺動(dòng)畫(huà)
簡(jiǎn)單的代碼
1.呼吸動(dòng)畫(huà)
CABasicAnimation *animation =[CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue = [NSNumber numberWithFloat:1.0f];
animation.toValue = [NSNumber numberWithFloat:0.0f];
animation.autoreverses = YES; //回退動(dòng)畫(huà)(動(dòng)畫(huà)可逆,即循環(huán))
animation.duration = 1.0f;
animation.repeatCount = MAXFLOAT;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;//removedOnCompletion,fillMode配合使用保持動(dòng)畫(huà)完成效果
animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[self.alphaTagButton.layer addAnimation:animation forKey:@"aAlpha"];
2.搖擺動(dòng)畫(huà)
//設(shè)置旋轉(zhuǎn)原點(diǎn)
self.sharkTagButton.layer.anchorPoint = CGPointMake(0.5, 0);
CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//角度轉(zhuǎn)弧度(這里用1绸硕,-1簡(jiǎn)單處理一下)
rotationAnimation.toValue = [NSNumber numberWithFloat:1];
rotationAnimation.fromValue = [NSNumber numberWithFloat:-1];
rotationAnimation.duration = 1.0f;
rotationAnimation.repeatCount = MAXFLOAT;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.autoreverses = YES;
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.fillMode = kCAFillModeForwards;
[self.sharkTagButton.layer addAnimation:rotationAnimation forKey:@"revItUpAnimation"];
CATransition之簡(jiǎn)單的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
CAAnimation的子類(lèi)堂竟,用于做轉(zhuǎn)場(chǎng)動(dòng)畫(huà)魂毁,能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭?dòng)畫(huà)效果。
常用動(dòng)畫(huà)類(lèi)型:
注:私有API只能通過(guò)字符串使用
過(guò)渡方向參數(shù):
簡(jiǎn)單的CATransition動(dòng)畫(huà)
-(void)animationWithType:(NSString*)type
{
//- 創(chuàng)建一個(gè)轉(zhuǎn)場(chǎng)動(dòng)畫(huà):
CATransition *transition = [CATransition animation];
transition.repeatCount = 5;
// - 確定動(dòng)畫(huà)類(lèi)型:
transition.type = type;
// - 確定子類(lèi)型(方向等)
transition.subtype = kCATransitionFromLeft;
// - 確定動(dòng)畫(huà)時(shí)間
transition.duration = 1;
// - 添加動(dòng)畫(huà)
[self.imageView.layer addAnimation:transition forKey:nil];
}
使用時(shí)只用傳你的想要的動(dòng)畫(huà)類(lèi)型就好跃捣,私有API只能通過(guò)字符串使用哈漱牵。
[self animationWithType:self.dataArray[indexPath.row]];