1.>使用Masory添加约束
2.>通过锚点定位指针
3.>使用transform实现旋转
@interface ViewController ()
/** 分针 */
@property (weak,nonatomic) UIView * blueView;
/** 时针 */
@property (weak,nonatomic) UIView * greenView;
/** 秒针 */
@property (weak,nonatomic) UIView * redView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpUI];
self.view.backgroundColor = KColor;
// 添加定时器(1s 刷新60次)
CADisplayLink * link = [CADisplayLink displayLinkWithTarget:self selector:@selector(run)];
link.frameInterval = 60 ;
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
// NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(run) userInfo:nil repeats:YES]; // 也可通过NSTimer实现但不准确
//
// [timer fire];
}
- (void)setUpUI{
UIImageView * imgView = [[UIImageView alloc] init];
imgView.image = [UIImage imageNamed:@"06-clock"];
NSLog(@"%@",NSStringFromCGSize(imgView.image.size));
imgView.backgroundColor = [UIColor blackColor];
[self.view addSubview:imgView];
// 约束
[imgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.offset(0);
make.centerX.offset(0);
make.width.mas_equalTo(200);
make.height.mas_equalTo(200);
}];
// 时针
UIView * greenView = [[UIView alloc] init];
greenView.backgroundColor = [UIColor greenColor];
greenView.layer.anchorPoint = CGPointMake(0, 0.75);
self.greenView = greenView;
[imgView addSubview:greenView];
// 约束
[greenView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(2);
make.height.mas_equalTo(50);
make.centerX.equalTo(imgView).offset(0);
make.centerY.equalTo(imgView).offset(0);
}];
// 分针
UIView * blueView = [[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
blueView.layer.anchorPoint = CGPointMake(0, 0.75);
self.blueView = blueView;
[imgView addSubview:blueView];
// 约束
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(2);
make.height.mas_equalTo(60);
make.centerX.equalTo(imgView).offset(0);
make.centerY.equalTo(imgView).offset(0);
}];
// 秒针
UIView * redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
redView.layer.anchorPoint = CGPointMake(0, 0.75);
_redView = redView;
[imgView addSubview:redView];
// 约束
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(2);
make.height.mas_equalTo(75);
make.centerX.equalTo(imgView).offset(0);
make.centerY.equalTo(imgView).offset(0);
}];
}
- (void)run
{
NSCalendar * calender = [NSCalendar currentCalendar];
// 获取系统当前的时/分/秒
NSInteger second = [calender component:NSCalendarUnitSecond fromDate:[NSDate date]];
NSInteger minute = [calender component:NSCalendarUnitMinute fromDate:[NSDate date]];
NSInteger hour = [calender component:NSCalendarUnitHour fromDate:[NSDate date]];
// 秒针
CGFloat secAngle = M_PI * 2 / 60 ;// (1s 6°)
CGFloat totalSec = secAngle * second;
self.redView.transform = CGAffineTransformMakeRotation(totalSec);
// 时针
CGFloat hourAngle = M_PI * 2 / 12;
CGFloat totalHour = hour * hourAngle;
self.greenView.transform = CGAffineTransformMakeRotation(totalHour);
// 分针
CGFloat minuteAngle = M_PI * 2 / 60 ;
CGFloat totalMinute = minute * minuteAngle;
self.blueView.transform = CGAffineTransformMakeRotation(totalMinute);
}
@end