#import "ViewController.h"
@interface ViewController ()
{
UIImageView *_clockView;
CGFloat _clockWidth;
CGFloat _clockHeight;
CALayer *_secondLayer;
CALayer *_minuteLayer;
CALayer *_hourLayer;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//添加_clockView
[self addBlockView];
//添加一个大圆点的layer
[self addPointLayer];
//添加分针_minuteLayer
[self addMinuteLayer];
//添加时针_hourLayer
[self addHourLayer];
//添加秒针_secondLayer
[self addSecondLayer];
//定时器 每个一秒调用一次update方法
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(update) userInfo:nil repeats:YES];
//作用:去除1秒延迟产生的bug
[self update];
}
//添加表盘_clockView
- (void)addBlockView
{
UIImage *image = [UIImage imageNamed:@"clock.png"];
_clockWidth = image.size.width;
_clockHeight = image.size.height;
_clockView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, _clockWidth, _clockHeight)];
[_clockView setBackgroundColor:[UIColor yellowColor]];
_clockView.center = self.view.center;
[_clockView setImage:image];
[self.view addSubview:_clockView];
}
//添加一个大圆点的layer
- (void)addPointLayer
{
CALayer *pointLayer = [[CALayer alloc] init];
pointLayer.bounds = CGRectMake(0, 0, 10, 10);
pointLayer.position = CGPointMake(_clockWidth/2, _clockHeight/2);
pointLayer.cornerRadius = 5;
pointLayer.backgroundColor = [UIColor blackColor].CGColor;
[_clockView.layer addSublayer:pointLayer];
}
//添加秒针_secondLayer
- (void)addSecondLayer
{
//初始化秒针
_secondLayer = [[CALayer alloc] init];
_secondLayer.bounds = CGRectMake(0, 0, 2, 100);
_secondLayer.anchorPoint = CGPointMake(0.5, 0.8);
_secondLayer.position = CGPointMake(_clockWidth/2, _clockHeight/2);
[_secondLayer setBackgroundColor:[UIColor redColor].CGColor];
[_clockView.layer addSublayer:_secondLayer];
}
//添加分针_minuteLayer
- (void)addMinuteLayer
{
//初始化分针
_minuteLayer = [[CALayer alloc] init];
_minuteLayer.bounds = CGRectMake(0, 0, 4, 80);
_minuteLayer.cornerRadius = 2;
_minuteLayer.anchorPoint = CGPointMake(0.5, 1);
_minuteLayer.position = CGPointMake(_clockWidth/2, _clockHeight/2);
[_minuteLayer setBackgroundColor:[UIColor blackColor].CGColor];
[_clockView.layer addSublayer:_minuteLayer];
}
//添加时针_hourLayer
- (void)addHourLayer
{
//初始化时针
_hourLayer = [[CALayer alloc] init];
_hourLayer.bounds = CGRectMake(0, 0, 5, 60);
_hourLayer.cornerRadius = 2.5;
_hourLayer.anchorPoint = CGPointMake(0.5, 1);
_hourLayer.position = CGPointMake(_clockWidth/2, _clockHeight/2);
[_hourLayer setBackgroundColor:[UIColor blackColor].CGColor];
[_clockView.layer addSublayer:_hourLayer];
}
//更新
- (void)update
{
NSLog(@"-----update %@",[NSThread currentThread]);
//每秒钟 秒针走的弧度
CGFloat perSecondAngle = M_PI*2/60;
//每分钟 分针走的弧度
CGFloat perMinuteAngle = M_PI*2/60;
//每秒钟 分针走的弧度
CGFloat perSecondMinuteAngle = perMinuteAngle/60;
//每小时 时针走的弧度
CGFloat perHourAngle = M_PI*2/12;
//每分钟 时针走的弧度
CGFloat perMinuteHourAngle = perHourAngle/60;
//日历
NSCalendar *calendar = [NSCalendar currentCalendar];
//获取日历组件
NSDateComponents *components = [calendar components:NSCalendarUnitSecond|NSCalendarUnitMinute|NSCalendarUnitHour fromDate:[NSDate date]];
//获取当前的秒
CGFloat second = components.second;
//获取当前的分钟
CGFloat minute = components.minute;
//获取当前的小时
CGFloat hour = components.hour;
//当前时间 秒针走过的弧度
CGFloat secondAngle = second * perSecondAngle;
//当前时间 分针走过的弧度 = 当前分钟 * 每分钟分针走的弧度 + 当前秒 * 每秒钟分针走的弧度
CGFloat minuteAngle = minute * perMinuteAngle + second * perSecondMinuteAngle;
//当前时间 时针走过的弧度 = 当前小时 * 每小时时针走的弧度 + 当前分钟 * 每分钟时针走的弧度
CGFloat hourAngle = hour * perHourAngle + minute * perMinuteHourAngle;
//秒针旋转到 当前弧度
_secondLayer.transform = CATransform3DMakeRotation(secondAngle, 0, 0, 1);
//分针旋转到 当前弧度
_minuteLayer.transform = CATransform3DMakeRotation(minuteAngle, 0, 0, 1);
//时针旋转到 当前弧度
_hourLayer.transform = CATransform3DMakeRotation(hourAngle, 0, 0, 1);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end