@property (weak, nonatomic) IBOutlet UIView *subV;
@property (weak, nonatomic) IBOutlet UIImageView *iV;
@property (nonatomic,strong) NSTimer *timer;
// 标记第几张图片
@property (nonatomic,assign) NSInteger index;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置圆角
self.subV.layer.cornerRadius = 25;
// 将超出部分的子视图截掉 (如果设置成yes,对阴影不起作用)
// self.subV.layer.masksToBounds = YES;
// 设置阴影
[self.subV.layer setShadowColor:[UIColor grayColor].CGColor];
// 设置阴影的偏移量
[self.subV.layer setShadowOffset:CGSizeMake(-20, 20)];
// 透明度
[self.subV.layer setShadowOpacity:1.0];
// 模糊程度
[self.subV.layer setShadowRadius:8];
// 创建layer
[self creatLayer];
}
- (void)creatLayer {
// 初始化layer
CALayer *layer = [[CALayer alloc] init];
// 设置大小
layer.bounds = CGRectMake(0, 0, 100, 100);
// 设置背景
// layer.backgroundColor = [UIColor redColor].CGColor;
// 锚点
layer.anchorPoint = CGPointMake(0, 0);
// 定位点
layer.position = CGPointMake(50, 50);
// 添加到父layer
[self.view.layer addSublayer:layer];
}
// basic 动画
- (IBAction)CABasicAnimationAction:(UIButton *)sender {
// 初始化basic对象
CABasicAnimation *basic = [CABasicAnimation animation];
// 设置要实现动画的属性
// 平移动画
basic.keyPath = @"position";
// 设置从一个点移动到另外一个点
basic.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
basic.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)];
// 如果想保存动画后的位置,必须设置下面两个设置
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards;
// 设置动画时间
basic.duration = 2.0f;
[self.iV.layer addAnimation:basic forKey:@"basic"];
CABasicAnimation *basic1 = [CABasicAnimation animation];
// 设置旋转动画
basic1.keyPath = @"transform";
// 度数转弧度公式 度数 * π / 180
basic1.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(90 * M_PI / 180, 1, 1, 1)];
basic1.duration = 2.0f;
[self.iV.layer addAnimation:basic1 forKey:@"basic1"];
// 删除key对应的动画
[self.iV.layer removeAnimationForKey:@"basic1"];
}
// 帧动画
- (IBAction)CAKeyFrameAnimationActon:(UIButton *)sender {
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animation];
// 设置要实现的动画属性
keyFrame.keyPath = @"transform.rotation";
keyFrame.values = @[@(-4 * M_PI / 180),@(4 * M_PI / 180),@(-4 * M_PI / 180)];
// 设置动画时间
keyFrame.duration = 1.0f;
// 重复次数
keyFrame.repeatCount = 5;
[self.iV.layer addAnimation:keyFrame forKey:@"keyFrame"];
}
// 转场动画
- (IBAction)CATranstionAnimation:(UIButton *)sender {
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0F target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
}
- (void)timerAction {
self.index ++;
if (self.index == 19) {
self.index = 0;
}
self.iV.image = [UIImage imageNamed:[NSString stringWithFormat:@"image%ld.jpg",self.index]];
// 初始化转场动画
CATransition *transition = [CATransition animation];
// 设置转场动画类型
// transition.type = kCATransitionMoveIn;
transition.type = @"cube";
// 设置转场动画方向
transition.subtype = kCATransitionFromRight;
// 动画开始位置
transition.startProgress = 0;
// 动画结束位置
transition.endProgress = 1;
transition.duration = 1;
[self.iV.layer addAnimation:transition forKey:@"transition"];
}
// 组动画
- (IBAction)CATranstionGroupActon:(UIButton *)sender {
// 平移
CABasicAnimation *basic1 = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
basic1.toValue = @(100);
// 缩放
CABasicAnimation *basic2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
basic2.toValue = @(0.5);
// 旋转
CABasicAnimation *basic3 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];
basic3.toValue = @(M_PI);
// 初始化组动画
CAAnimationGroup *group = [CAAnimationGroup animation];
// 设置动画组里面的元素
group.animations = @[basic1,basic2,basic3];
// 设置动画时间
group.duration = 2.0f;
// 保存位置
// group.removedOnCompletion = NO;
// group.fillMode = kCAFillModeForwards;
[self.iV.layer addAnimation:group forKey:@"group"];
}
@property (weak, nonatomic) IBOutlet UIImageView *iV;
@property (nonatomic,strong) NSTimer *timer;
// 标记第几张图片
@property (nonatomic,assign) NSInteger index;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 设置圆角
self.subV.layer.cornerRadius = 25;
// 将超出部分的子视图截掉 (如果设置成yes,对阴影不起作用)
// self.subV.layer.masksToBounds = YES;
// 设置阴影
[self.subV.layer setShadowColor:[UIColor grayColor].CGColor];
// 设置阴影的偏移量
[self.subV.layer setShadowOffset:CGSizeMake(-20, 20)];
// 透明度
[self.subV.layer setShadowOpacity:1.0];
// 模糊程度
[self.subV.layer setShadowRadius:8];
// 创建layer
[self creatLayer];
}
- (void)creatLayer {
// 初始化layer
CALayer *layer = [[CALayer alloc] init];
// 设置大小
layer.bounds = CGRectMake(0, 0, 100, 100);
// 设置背景
// layer.backgroundColor = [UIColor redColor].CGColor;
// 锚点
layer.anchorPoint = CGPointMake(0, 0);
// 定位点
layer.position = CGPointMake(50, 50);
// 添加到父layer
[self.view.layer addSublayer:layer];
}
// basic 动画
- (IBAction)CABasicAnimationAction:(UIButton *)sender {
// 初始化basic对象
CABasicAnimation *basic = [CABasicAnimation animation];
// 设置要实现动画的属性
// 平移动画
basic.keyPath = @"position";
// 设置从一个点移动到另外一个点
basic.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
basic.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 300)];
// 如果想保存动画后的位置,必须设置下面两个设置
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards;
// 设置动画时间
basic.duration = 2.0f;
[self.iV.layer addAnimation:basic forKey:@"basic"];
CABasicAnimation *basic1 = [CABasicAnimation animation];
// 设置旋转动画
basic1.keyPath = @"transform";
// 度数转弧度公式 度数 * π / 180
basic1.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(90 * M_PI / 180, 1, 1, 1)];
basic1.duration = 2.0f;
[self.iV.layer addAnimation:basic1 forKey:@"basic1"];
// 删除key对应的动画
[self.iV.layer removeAnimationForKey:@"basic1"];
}
// 帧动画
- (IBAction)CAKeyFrameAnimationActon:(UIButton *)sender {
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animation];
// 设置要实现的动画属性
keyFrame.keyPath = @"transform.rotation";
keyFrame.values = @[@(-4 * M_PI / 180),@(4 * M_PI / 180),@(-4 * M_PI / 180)];
// 设置动画时间
keyFrame.duration = 1.0f;
// 重复次数
keyFrame.repeatCount = 5;
[self.iV.layer addAnimation:keyFrame forKey:@"keyFrame"];
}
// 转场动画
- (IBAction)CATranstionAnimation:(UIButton *)sender {
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0F target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
}
- (void)timerAction {
self.index ++;
if (self.index == 19) {
self.index = 0;
}
self.iV.image = [UIImage imageNamed:[NSString stringWithFormat:@"image%ld.jpg",self.index]];
// 初始化转场动画
CATransition *transition = [CATransition animation];
// 设置转场动画类型
// transition.type = kCATransitionMoveIn;
transition.type = @"cube";
// 设置转场动画方向
transition.subtype = kCATransitionFromRight;
// 动画开始位置
transition.startProgress = 0;
// 动画结束位置
transition.endProgress = 1;
transition.duration = 1;
[self.iV.layer addAnimation:transition forKey:@"transition"];
}
// 组动画
- (IBAction)CATranstionGroupActon:(UIButton *)sender {
// 平移
CABasicAnimation *basic1 = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
basic1.toValue = @(100);
// 缩放
CABasicAnimation *basic2 = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
basic2.toValue = @(0.5);
// 旋转
CABasicAnimation *basic3 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];
basic3.toValue = @(M_PI);
// 初始化组动画
CAAnimationGroup *group = [CAAnimationGroup animation];
// 设置动画组里面的元素
group.animations = @[basic1,basic2,basic3];
// 设置动画时间
group.duration = 2.0f;
// 保存位置
// group.removedOnCompletion = NO;
// group.fillMode = kCAFillModeForwards;
[self.iV.layer addAnimation:group forKey:@"group"];
}