【发布时间】:2015-02-06 14:07:51
【问题描述】:
为了一点乐趣和练习,我正在尝试制作一个简单的模拟时钟 iOS 应用程序。无论如何,我对 CGAffineTransformMakeRotation 有疑问,它只是不起作用。首先,我正在旋转秒针。但它只是让手保持在同一个地方。
那我该怎么做呢?
一个圆圈有 360 度,所以每秒有 (60/360) 0.16666666666 度。
然后我将其转换为弧度,然后按当前秒数对其进行计时。但它并没有真正起作用:(
这是我的代码:
-(void)update_the_timer {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss a"];
time_label.text = [formatter stringFromDate:[NSDate date]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm:ss"];
NSString *test = [dateFormatter stringFromDate:[NSDate date]];
NSDate *time = [dateFormatter dateFromString:test];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate: time];
NSInteger seconds = [components second];
// Convert degrees to radians: x * M_PI/180.0
float number = ((0.16666666666 * (M_PI/180.0)) * seconds);
NSLog(@"%f", number);
[UIView animateWithDuration:1.0 animations:^{
second_handle.transform = CGAffineTransformMakeRotation(number);
}];
}
我做错了什么??
感谢您的宝贵时间,丹 :)
【问题讨论】:
-
仅供参考 - 与您的问题无关,但您不应一遍又一遍地重新创建日期格式化程序。创建一次并将它们保存在实例变量中,以便您可以一遍又一遍地重复使用它们。它们的创建成本很高。另外,不要拨打
[NSDate date]两次。调用一次并将其存储在变量中。它更高效,而且每次都在同一日期工作。 -
@rmaddy 感谢您的建议。我一定会这样做的。再次感谢。
-
这有一些例子:raywenderlich.com/5478/…
-
感谢发布这个问题,对我也很有用。
标签: ios cocoa-touch uiimageview rotation cgaffinetransform