1 #define kClockW _clockView.bounds.size.width
  2 #define angle2radion(a) ((a) / 180.0 * M_PI)
  3 
  4 // 一秒钟秒针转6°
  5 #define perSecondA 6
  6 
  7 // 一分钟分针转6°
  8 #define perMinuteA 6
  9 
 10 
 11 // 一小时时针转30°
 12 #define perHourA 30
 13 
 14 // 每分钟时针转多少度
 15 #define perMinuteHourA 0.5
 16 
 17 
 18 @interface XXClockController ()
 19 @property (weak, nonatomic) IBOutlet UIImageView *clockView;
 20 
 21 @property (nonatomic, weak) CALayer *secondLayer;
 22 
 23 @property (nonatomic, weak) CALayer *minuteLayer;
 24 
 25 @property (nonatomic, weak) CALayer *hourLayer;
 26 
 27 @end
 28 
 29 @implementation XXClockController
 30 
 31 - (void)viewDidLoad {
 32     [super viewDidLoad];
 33     //添加时针
 34     [self setUpHourLayer];
 35     //添加分针
 36     [self setUpMinuteLayer];
 37     //添加秒针
 38     [self setUpSecondLayer];
 39     //添加定时器
 40     [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
 41     [self timeChange];
 42 }
 43 
 44 -(void)timeChange{
 45     //获取当前的系统的时间
 46     
 47     //获取当前日历对象
 48     NSCalendar *calendar = [NSCalendar currentCalendar];
 49     //获取日期的组件:年月日小时分秒
 50     //components:需要获取的日期组件
 51     //fromDate:获取哪个日期的组件
 52     //经验:以后枚举中有移位运算符,通常一般可以使用并运算(|)
 53     NSDateComponents *cmp = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:[NSDate date] ];
 54     //获取秒
 55     NSInteger second = cmp.second;
 56     //获取分
 57     NSInteger minute = cmp.minute;
 58     //获取小时
 59     NSInteger hour = cmp.hour;
 60     //计算秒针转多少度
 61     CGFloat secondA = second * perSecondA;
 62     //计算分针转多少度
 63     CGFloat minuteA = minute * perMinuteA;
 64     //计算时针转多少度
 65     CGFloat hourA = hour * perHourA + minute * perMinuteHourA;
 66     
 67     //旋转秒针
 68     _secondLayer.transform = CATransform3DMakeRotation(angle2radion(secondA), 0, 0, 1);
 69     //旋转分针
 70     _minuteLayer.transform = CATransform3DMakeRotation(angle2radion(minuteA), 0, 0, 1);
 71     //旋转秒针
 72     _hourLayer.transform = CATransform3DMakeRotation(angle2radion(hourA), 0, 0, 1);
 73 
 74 }
 75 
 76 -(void)setUpSecondLayer{
 77     CALayer *secondL = [CALayer layer];
 78     secondL.backgroundColor = [UIColor redColor].CGColor;
 79     //设置锚点
 80     secondL.anchorPoint = CGPointMake(0.5, 1);
 81     secondL.position = CGPointMake(kClockW * 0.5, kClockW * 0.5);
 82     secondL.bounds = CGRectMake(0, 0, 1, kClockW * 0.5 - 20);
 83     
 84     [_clockView.layer addSublayer:secondL];
 85     _secondLayer = secondL;
 86 }
 87 
 88 -(void)setUpMinuteLayer{
 89     CALayer *minuteL = [CALayer layer];
 90     minuteL.backgroundColor = [UIColor blackColor].CGColor;
 91     minuteL.anchorPoint = CGPointMake(0.5, 1);
 92     minuteL.position = CGPointMake(kClockW * 0.5, kClockW * 0.5);
 93     minuteL.bounds = CGRectMake(0, 0, 4, kClockW * 0.5 - 30);
 94     minuteL.cornerRadius = 4;
 95     [_clockView.layer addSublayer:minuteL];
 96     _minuteLayer = minuteL;
 97 }
 98 
 99 -(void)setUpHourLayer{
100     CALayer *hourL = [CALayer layer];
101     hourL.backgroundColor = [UIColor blackColor].CGColor;
102     hourL.anchorPoint = CGPointMake(0.5, 1);
103     hourL.position = CGPointMake(kClockW * 0.5, kClockW * 0.5);
104     hourL.bounds = CGRectMake(0, 0, 4, kClockW * 0.5 - 40);
105     hourL.cornerRadius = 4;
106     [_clockView.layer addSublayer:hourL];
107     _hourLayer = hourL;
108 }