CAAnimation
provides the basic support for the CAMediaTiming and CAAction protocols. You do not create instance of CAAnimation: to animate Core Animation layers or SceneKit objects, create instances of the concrete subclasses CABasicAnimation, CAKeyframeAnimation, CAAnimationGroup, or CATransition.
1.CABasicAnimation
/**
位移動畫
*/
- (void)positinoAnimation{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, HEIGHT/2)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(WIDTH, HEIGHT/2)];
animation.duration = 1.0f;
[self.centerView.layer addAnimation:animation forKey:@"positionAnimation"];
//@"positionAnimation"移除動畫時的標(biāo)識符
}
Super_Yuan.gif
/**
透明度
*/
- (void)opacityAnimation{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue = [NSNumber numberWithFloat:0.1f];
animation.toValue = [NSNumber numberWithFloat:1.0f];
animation.duration = 1.0f;
[self.centerView.layer addAnimation:animation forKey:@"opacityAnimation"];
}
Super_Yuan.gif
/**
縮放
*/
- (void)scalaAnimation{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSNumber numberWithFloat:0.2f];
animation.toValue = [NSNumber numberWithFloat:2.0f];
animation.duration = 1.0f;
[self.centerView.layer addAnimation:animation forKey:@"scalaAnimation"];
}
Super_Yuan.gif
/**
旋轉(zhuǎn)
*/
- (void)rotationAnimation{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.toValue = [NSNumber numberWithFloat:M_PI];
animation.duration = 1.0f;
[self.centerView.layer addAnimation:animation forKey:@"rotationAnimation"];
}
Super_Yuan.gif
/**
背景色
*/
- (void)backgroundColorAnimation{
CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
animation.toValue = (__bridge id _Nullable)([UIColor blackColor].CGColor);
animation.duration = 1.0f;
[self.centerView.layer addAnimation:animation forKey:@"backgroundColorAnimation"];
}
Super_Yuan.gif
一些常用的animationWithKeyPath值的總結(jié)
值 | 說明 | 使用形式 |
---|---|---|
transform.scale | 比例轉(zhuǎn)化 | @(0.8) |
transform.scale.x | 寬的比例 | @(0.8) |
transform.scale.y | 高的比例 | @(0.8) |
transform.rotation.x | 圍繞x軸旋轉(zhuǎn) | @(M_PI) |
transform.rotation.y | 圍繞y軸旋轉(zhuǎn) | @(M_PI) |
transform.rotation.z | 圍繞z軸旋轉(zhuǎn) | @(M_PI) |
cornerRadius | 圓角的設(shè)置 | @(50) |
backgroundColor | 背景顏色的變化 | (id)[UIColor purpleColor].CGColor |
bounds | 大小矫限,中心不變 | [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)]; |
position | 位置(中心點的改變) | [NSValue valueWithCGPoint:CGPointMake(300, 300)]; |
contents | 內(nèi)容雌隅,比如UIImageView的圖片 | imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage; |
opacity | 透明度 | @(0.8) |
contentsRect.size.width | 橫向拉伸縮放 | @(0.4)最好是0~1之間的 |
2.CAKeyframeAnimation
/**
關(guān)鍵幀
*/
- (void)keyFrameAnimation{
CAKeyframeAnimation * animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
NSValue *value0 = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(0, HEIGHT)];
NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(WIDTH, HEIGHT)];
NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(WIDTH, 0)];
NSValue *value4 = [NSValue valueWithCGPoint:CGPointMake(WIDTH/2, 0)];
NSValue *value5 = [NSValue valueWithCGPoint:CGPointMake(WIDTH*2, HEIGHT/2)];
animation.values = @[value0, value1, value2, value3, value4, value5];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//設(shè)置動畫的節(jié)奏
animation.duration = 2.0f;
[self.centerView.layer addAnimation:animation forKey:@"keyFrameAnimation"];
}
Super_Yuan.gif
/**
path動畫
*/
- (void)pathAnimation{
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(WIDTH/2-100, HEIGHT/2-100, 200, 200)];
animation.path = path.CGPath;
animation.duration = 2.0f;
[self.centerView.layer addAnimation:animation forKey:@"pathAnimation"];
}
Super_Yuan.gif
/**
抖動動畫
*/
- (void)shakeAnimation{
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation"];//在這里@"transform.rotation"==@"transform.rotation.z"
NSValue *value1 = [NSNumber numberWithFloat:-M_PI/180*4];
NSValue *value2 = [NSNumber numberWithFloat:M_PI/180*4];
NSValue *value3 = [NSNumber numberWithFloat:-M_PI/180*4];
animation.values = @[value1,value2,value3];
//重復(fù)次數(shù)
animation.repeatCount = MAXFLOAT;
[self.centerView.layer addAnimation:animation forKey:@"shakeAnimation"];
}
Super_Yuan.gif
3.CAAnimationGroup
/**
同時執(zhí)行的動畫組
*/
- (void)groupAnimation1{
//位移
CABasicAnimation * animation1 = [CABasicAnimation animationWithKeyPath:@"position"];
animation1.fromValue = [NSValue valueWithCGPoint:self.view.center];
animation1.toValue = [NSValue valueWithCGPoint:CGPointMake(40, self.view.center.y)];
//縮放
CABasicAnimation * animation2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation2.fromValue = [NSNumber numberWithFloat:0.3f];
animation2.toValue = [NSNumber numberWithFloat:1.0f];
CAAnimationGroup * groupAnimation = [CAAnimationGroup animation];
groupAnimation.animations = @[animation1, animation2];
groupAnimation.duration = 2.0f;
[self.centerView.layer addAnimation:groupAnimation forKey:@"groupAnimation1"];
}
Super_Yuan.gif
/**
* 順序執(zhí)行的組動畫
*/
-(void)groupAnimation2{
CFTimeInterval currentTime = CACurrentMediaTime();
//位移動畫
CABasicAnimation *anima1 = [CABasicAnimation animationWithKeyPath:@"position"];
anima1.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, HEIGHT/2-75)];
anima1.toValue = [NSValue valueWithCGPoint:CGPointMake(WIDTH/2, HEIGHT/2-75)];
anima1.beginTime = currentTime;
anima1.duration = 1.0f;
anima1.fillMode = kCAFillModeForwards;
anima1.removedOnCompletion = NO;
[self.centerView.layer addAnimation:anima1 forKey:@"aa"];
//縮放動畫
CABasicAnimation *anima2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
anima2.fromValue = [NSNumber numberWithFloat:0.8f];
anima2.toValue = [NSNumber numberWithFloat:2.0f];
anima2.beginTime = currentTime+1.0f;
anima2.duration = 1.0f;
anima2.fillMode = kCAFillModeForwards;
anima2.removedOnCompletion = NO;
[self.centerView.layer addAnimation:anima2 forKey:@"bb"];
//旋轉(zhuǎn)動畫
CABasicAnimation *anima3 = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
anima3.toValue = [NSNumber numberWithFloat:M_PI*4];
anima3.beginTime = currentTime+2.0f;
anima3.duration = 1.0f;
anima3.fillMode = kCAFillModeForwards;
anima3.removedOnCompletion = NO;
[self.centerView.layer addAnimation:anima3 forKey:@"cc"];
}
Super_Yuan.gif