时钟的简单实现



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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值