【问题标题】:CGAffineTransformMakeRotation not working - UIImageView - iOSCGAffineTransformMakeRotation 不工作 - UIImageView - iOS
【发布时间】: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


【解决方案1】:

我认为你只需要在转换为弧度之前将秒转换为度数即可,每秒有 6 度:

float number = (M_PI/180.0) * seconds * 6;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多