n:(UIButton *)sender {
2 //创建一个缩放动画
3 CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
4 basic.fromValue = @1;
5 basic.toValue = @0.75;
6 //创建一个关键帧动画,从一个位置到另一个位置
7 CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
8 CGPoint point1 = CGPointMake(100, 100);
9 CGPoint point2 = CGPointMake(300, 300);
10 NSValue *value1 = [NSValue valueWithCGPoint:point1];
11 NSValue *value2 = [NSValue valueWithCGPoint:point2];
12 keyFrameAnimation.values = @[value1, value2];
13 //创建一个动画组
14 CAAnimationGroup *group = [CAAnimationGroup animation];
15 group.duration = 4;
16 group.repeatCount = 3;
17 //将上面的两种动画添加到动画组中,动画将同步执行
18 [group setAnimations:@[basic,keyFrameAnimation]];
19 //下面的代码会最终改变对象的位置,否则对象在动画完成后会回到初始位置
20 self.redView.layer.position = CGPointMake(300, 300);
21 //添加动画组
22 [self.redView.layer addAnimation:group forKey:nil];
23 }
1.5 CASpringAnimation,弹簧动画,继承于CABasicAnimation。都不难,上代码吧:
- (IBAction)springAnimation:(UIButton *)sender {
CASpringAnimation *spring = [CASpringAnimation animationWithKeyPath:@"transform.rotation"];
//质量越大,惯性越大
spring.mass = 1;
//阻尼系数,越大停止的越快
spring.damping = 0.2;
spring.fromValue = @0.2;//transform.rotation的初始值
spring.toValue = @0.75;//transform.rotation的结束值
spring.repeatCount = 1;
spring.autoreverses = YES;//自动回弹
//初始速度
spring.initialVelocity = 5;
spring.duration = spring.settlingDuration;
[self.redView.layer addAnimation:spring forKey:@"spring"];
}
下面我总结了一下keypath值,大家可以参考:
transform.scale = 比例轉換
transform.scale.x = 闊的比例轉換
transform.scale.y = 高的比例轉換
transform.rotation.z = 平面圖的旋轉
opacity = 透明度
margin
zPosition
backgroundColor 背景颜色
cornerRadius 圆角
borderWidth
bounds
contents
contentsRect
cornerRadius
frame
hidden
mask
masksToBounds
opacity
position
shadowColor
shadowOffset
shadowOpacity
shadowRadius
上面就是核心动画的全部内容了,基本就是以代码来讲解,这些东西原理上没什么可说的,主要是知道怎么用。下面说说UIView动画。
2、UIView动画。UIKit直接将动画集成到UIView类中,当内部的一些属性发生变化时,UIView将为这些改变提供动画支持。执行动画的工作由UIView类自动完成,但仍希望在执行动画时通知视图,因此需要将改变属性的代码放在 [UIView beginAnimations:nil context:nil] 和 [UIView commitAnimations] 之间。
一般来说,能够影响控件外形的属性都可以使用动画,而UIView动画的实现由两种方式,我们先看第一种方式,下面看代码,一个改变控件Frame的动画:
1 - (IBAction)changeFrame:(UIButton *)sender {
2 //第一个参数,动画标示
3 [UIView beginAnimations:@"changeFrame" context:nil];
4 //设置动画次数
5 [UIView setAnimationRepeatCount:100];
6 //设置动画时长
7 [UIView setAnimationDuration:1];
8 //设置动画速率
9 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
10 CGRect frame = self.showView.frame;
11 frame.origin.y = 200;
12 //改变frame,y值
13 self.showView.frame = frame;
14 //开始动画
15 [UIView commitAnimations];
16 }
大家看注释应该能明白这段代码的意思。
再上一段代码,缩放动画:
1 //缩放动画
2 - (IBAction)scaleButtonAction:(UIButton *)sender {
3
4 [UIView beginAnimations:@"UIView" context:nil];
5 self.showView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 1.5);
6 }
旋转动画:
1 // 旋转
2 - (IBAction)rotateButtonAction:(UIButton *)sender {
3 [UIView beginAnimations:nil context:nil];
4 // 第一个参数: 以谁为基准进行旋转
5 // 第二个参数: 旋转的弧度
6 // CGA