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 }
浙公网安备 33010602011771号