美文网首页
iOS-时钟

iOS-时钟

作者: CoderCurtis | 来源:发表于2017-05-25 17:07 被阅读31次
时钟动画.gif

需要理解CALayer的anchorPoint属性的意义,可参考CALayer 的 position和anchorPoint属性或其他资料。

以秒针为例:

  1. 计算每秒的弧度
  2. 获取当前为多少秒,即可得到当前秒针应该为多少弧度
  3. 绘制CGAffineTransformMakeRotation()

由于显示器刷新频率的问题,有可能感觉秒针走动与系统时钟的秒针走动不一致。因此,当显示器刷新时就刷新一次UI

//与显示器刷新频率相关联的类 每次显示器刷新都会执行这个方法
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick)];
    //加到主消息循环中
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

代码:

//计算每秒的弧度
    CGFloat radian = M_PI * 2 / 60;
    
    //获取当前系统的时分秒
    NSDate *date = [NSDate date];
    
    NSCalendar *calendar = [NSCalendar currentCalendar];
    
//    //获取秒
//    NSInteger second = [calendar component:NSCalendarUnitSecond fromDate:date];

    NSDateComponents *comp = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:date];
    
    NSInteger hour = comp.hour;
    NSInteger minute = comp.minute;
    NSInteger second = comp.second;
    
    //计算本次秒针应该旋转的弧度
    radian = radian * second;
    
    //让当前秒针与原来的弧度增加一个radian
    self.secondView.transform = CGAffineTransformMakeRotation(radian);
    
    /*******************************************************************/
    
    //计算每小时弧度
    CGFloat hourRadian = (M_PI * 2) / 12.0;
    
    //本次时针应该旋转的弧度
    hourRadian = hourRadian * hour;
    self.hourView.transform = CGAffineTransformMakeRotation(hourRadian);
    
    /*******************************************************************/
    
    //计算每分钟弧度
    CGFloat minuteRadian = M_PI * 2 / 60;
    
    //计算本次分针应该旋转的弧度
    minuteRadian = minuteRadian * minute;
    
    self.minuteView.transform = CGAffineTransformMakeRotation(minuteRadian);

代码

传智播客iOS教程

相关文章

网友评论

      本文标题:iOS-时钟

      本文链接:https://www.haomeiwen.com/subject/nqszxxtx.html