源码下载地址:http://download.youkuaiyun.com/detail/liu537192/8558523
效果图:
核心代码:
//
// JLViewController.m
// 10-核心动画
//
// Created by XinYou on 15-4-2.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLViewController.h"
// 定义一个宏,实现角度转成弧度
#define AngleTowRadian(angle) ((angle / 180.0) * M_PI)
@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
- (IBAction)shake;
- (IBAction)stop;
@end
@implementation JLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (IBAction)shake {
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
// anim.keyPath = @"transform";
//
// // CATransform3DMakeRotation(angle,x,y,z):以原点O(0,0,0)为起点,A(x,y,z)为结束点
// // 连接OA形成一条直线,以OA所在的直线为旋转轴进行旋转,旋转角度为angle
// // M_PI / 36 表示旋转角度为5度
// NSValue *v1 = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(-M_PI / 36, 0, 0, 1)];
// NSValue *v2 = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI / 36, 0, 0, 1)];
// NSValue *v3 = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(-M_PI / 36, 0, 0, 1)];
//
// anim.values = @[v1, v2, v3];
// 这两行代码的实现效果跟上面被注释的代码的实现效果一样。
anim.keyPath = @"transform.rotation";
anim.values = @[@(AngleTowRadian(-5)), @(AngleTowRadian(5)), @(AngleTowRadian(-5))];
// 动画持续时间
anim.duration = 0.1;
// 动画的重复执行次数
anim.repeatCount = MAXFLOAT;
// 保持动画执行完毕后的状态
anim.removedOnCompletion = NO;
anim.fillMode = kCAFillModeForwards;
// 添加动画
[self.iconView.layer addAnimation:anim forKey:nil];
}
- (IBAction)stop {
// 移除动画
[self.iconView.layer removeAllAnimations];
}
@end