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