要使用CABasicAnimation实现对UIView的平移、旋转、缩放,有以下步骤:
1,创建动画对象
2,设置动画对象
3,拿到UIView的图层layer,把动画对象添加到layer(layer.addAnimation...)
这里解释一下设置动画对象:
首先我们创建动画对象:
CABasicAnimation *anim = [CABasicAnimation animation];
然后对动画对象进行设置,动画对象的fromValue、toValue、byValue、duration、removedOnCompletion、fillMode属性如何设置在代码中均有详细注释,
这里来详细说明一下动画对象的keyPath该如何设置:
①假设我们要对UIView实现平移动画,可以设置keyPath = @"position";这里的@"postion"指的是CALayer的postion属性,然后设置toValue的值,toValue中存储的值就是CALayer对象的position属性要改变的值;
当然我们还可以设置keyPath = @"transform";来实现对UIView的平移动画
②假设我们要对UIView实现缩放动画,CALayer有一个属性bounds是控制宽高的,所以可以设置keyPath = @"bounds";
当然还可以设施keyPath = @"transform";来实现对UIView的缩放动画
下面是我自己写的一个demo,演示了UIView的平移、旋转、缩放,代码中有详细的注释。
首先附上源码下载地址:http://download.youkuaiyun.com/detail/liu537192/8558029
效果图:
核心代码:
//
// JLViewController.m
// 06-核心动画
//
// Created by XinYou on 15-4-2.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLViewController.h"
@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
- (IBAction)rotate;
- (IBAction)translate;
- (IBAction)scale;
- (IBAction)back;
@end
@implementation JLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
/**
* 旋转
*/
- (IBAction)rotate {
// 创建动画对象
CABasicAnimation *anim = [CABasicAnimation animation];
// 设置动画对象。keyPath的取值决定了执行怎样的动画
anim.keyPath = @"transform";
// anim.fromValue:fromValue表示从什么值开始改变,默认从原状态开始改变
// anim.byValue:变化范围从fromValue到(fromValue + byValue)
// anim.toValue:变化范围从fromValue到toValue
// CATransform3DMakeRotation(angle,x,y,z):以原点O(0,0,0)为起点,A(x,y,z)为结束点
// 连接OA形成一条直线,以OA所在的直线为旋转轴进行旋转,旋转角度为angle
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];
anim.duration = 1.0;
// 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards;
// 添加动画
[self.iconView.layer addAnimation:anim forKey:@"rotate"];
}
/**
* 平移
*/
- (IBAction)translate {
// 创建动画对象
CABasicAnimation *anim = [CABasicAnimation animation];
// 修改CALayer的position属性的值可以实现平移效果
anim.keyPath = @"position";
anim.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
anim.duration = 1.0;
// 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards;
// 添加动画
[self.iconView.layer addAnimation:anim forKey:@"translate"];
}
/**
* 缩放
*/
- (IBAction)scale {
// 创建动画对象
CABasicAnimation *anim = [CABasicAnimation animation];
// 修改CALayer的bounds属性的值也可以实现缩放效果
// anim.keyPath = @"bounds";
// anim.toValue = [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
anim.keyPath = @"transform";
// CATransform3DMakeScale(x,y,z):x,y,z表示xyz三个方向的缩放比例
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 2, 1)];
// 动画时间
anim.duration = 1.0;
// 下面两句代码的作用:保持动画执行完毕后的状态(如果不这样设置,动画执行完毕后会回到原状态)
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards;
// 添加动画
[self.iconView.layer addAnimation:anim forKey:@"scale"];
}
/**
* 还原
*/
- (IBAction)back {
// [self.iconView.layer removeAnimationForKey:@"translate"];
// [self.iconView.layer removeAnimationForKey:@"scale"];
// [self.iconView.layer removeAnimationForKey:@"rotate"];
// 上面3句可以简写为1句
[self.iconView.layer removeAllAnimations];
}
@end