项目介绍:
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 直接下载: