欢迎光临
我们一直在努力

根据当前的系统时间来实时更新的时钟

建站超值云服务器,限时71元/月

根据当前的系统时间来实时更新的时钟

项目介绍:

Moving-around-the-clock

[Objective-C] 查看源文件 复制代码

#pragma mark - 每一秒调用60次
- (void)updateTime{
    // 获取当前的日期
    NSCalendar *calendar = [NSCalendar currentCalendar];
    // 获取日历中的组件:秒,分,时,天
    // NSCalendarUnit:获取哪个时间
    NSDateComponents *cmp = [calendar components:NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour | NSCalendarUnitNanosecond fromDate:[NSDate date]];
    
    // 小时
    self.hours = cmp.hour;
    self.Hous.text = [NSString stringWithFormat:@"%02.0lf :",self.hours];

    // 分钟
    self.min = cmp.minute;
    self.minu.text = [NSString stringWithFormat:@" %02.0lf :",self.min];

    // 秒数
    self.sec = cmp.second;
    self.secon.text = [NSString stringWithFormat:@"%02.0lf",self.sec];
   
    // 纳秒(每秒等于 1000,000,000纳秒)
//    CGFloat nanosecond = cmp.nanosecond;
    
    // 计算秒针旋转的角度 = 当前的秒数 * 每秒秒针转多少度(6) + 当前的纳秒 * 每纳秒秒针转多少度(0.000000001)
    CGFloat secondAngle = RADIAN(self.sec * SECOND_ANGLE);
#warning 以下两行代码可以设置秒针按纳秒的速度去计算转动的度数
//    CGFloat se = ANGLE_2_RADIAN(nanosecond * PER_SECOND_NANOSECOND_ANGLE);
//    secondAngle += se;
    
    // 计算分针旋转的角度 = 当前的分针 * 每分钟分针转多少度(6) + 当前的秒钟 * 每秒分针转多少度(0.1);
    CGFloat minuteAngle = RADIAN(self.min * MINUTE_ANGLE);
    // 每秒钟分针旋转的角度 = 当前的秒钟 * 每秒分针转多少度(0.1)
    CGFloat secondAndMinuteAngel = RADIAN(self.sec * MINUTE_AND_SECOND_ANGLE);
    minuteAngle += secondAndMinuteAngel;
    
    // 计算时针旋转的角度 = 当前的小时 * 每小时时针转多少度(30) + 当前的分钟 * 每分钟时针转多少度(0.5) + 当前的秒钟 * 每秒钟时针转多少度(0.5 / 60)
    CGFloat hourAngle = RADIAN(self.hours * HOUR_ANGLE);
    // 每隔一分钟,时针也需要转一定的角度
    CGFloat minuteAndHourAngle = RADIAN(self.min * HOUR_MINUTE_ANGLE);
    hourAngle += minuteAndHourAngle;
    // 每秒移动的时钟度数 = 当前的秒钟 * 每秒钟时针转多少度(0.5 / 60)
    CGFloat secondAndHourAngle = RADIAN(self.sec * HOUR_SECOND_ANGLE);
    hourAngle += secondAndHourAngle;
    
    
    // 旋转时针
    self.hour.transform = CATransform3DMakeRotation(hourAngle, 0, 0, 1);
    // 旋转分针
    self.minutes.transform = CATransform3DMakeRotation(minuteAngle, 0, 0, 1);
    // 旋转秒针
    self.second.transform = CATransform3DMakeRotation(secondAngle, 0, 0, 1);
}

#pragma mark - 添加时针
- (void)addHour{
    _hour = [self setupLayerWithBackGroundColor:[UIColor brownColor] anchorPoint:CGPointMake(0.5, 0.75) layerBounds:CGRectMake(0, 0, 6, 100)];
}
#pragma mark - 添加分针
- (void)addMinutes{
    _minutes = [self setupLayerWithBackGroundColor:[UIColor blueColor] anchorPoint:CGPointMake(0.5, 0.8) layerBounds:CGRectMake(0, 0, 5, 120)];
}
#pragma mark - 添加秒针
- (void)addSecond{
    _second = [self setupLayerWithBackGroundColor:[UIColor redColor] anchorPoint:CGPointMake(0.5, 0.85) layerBounds:CGRectMake(0, 0, 4, 140)];
}

DEMO 直接下载:

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 根据当前的系统时间来实时更新的时钟
分享到: 更多 (0)