2

我可以使用代码在我的 iPad 应用程序上显示当前时间,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
[dateFormatter setTimeStyle: NSDateFormatterShortStyle];


NSString *currentTime = [dateFormatter stringFromDate: [NSDate date]];
timeLabel.text = currentTime;

但这仅在加载应用程序时给出时间。我怎样才能有时间继续跑步?就像一个数字时钟。

4

3 回答 3

9

用这个:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
[dateFormatter setTimeStyle: NSDateFormatterShortStyle];

[NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:YES]

选择器方法是这样的:

-(void)targetMethod:(id)sender
{
  NSString *currentTime = [dateFormatter stringFromDate: [NSDate date]];
  timeLabel.text = currentTime;
}
于 2012-06-13T16:05:40.310 回答
6

实现一个 NSTimer

如何使用 NSTimer?

[NSTimer scheduledTimerWithTimeInterval:1.0     
                                 target:self
                               selector:@selector(targetMethod:)     
                               userInfo:nil     
                                repeats:YES];

然后执行 targetMethod 来检查和更新你的时间!!!

如果是我,我可能会得到初始时间,并且只使用 1 秒计时器更新我的内部时间。

您可以通过实现更快的计时器(可以说快 4 到 8 倍)来获得更高的时序分辨率,这样您可能不会经常不同步,但如果您这样做了,那么您将能够重新同步到[NSData 日期] 返回的时间。换句话说,您的后台任务运行得越快,您就越容易与返回的真实时间重新同步。这也意味着您只会在目标方法中每隔几次检查一次同步。

猜猜我说的是要记住奈奎斯特。奈奎斯特的理论(本质上)指出,您的采样速度至少应该是您最终尝试使用从采样中获得的数据集重现的分辨率的两倍。在这种情况下,如果您尝试向用户显示每秒一次的更新,那么您确实应该以不低于 1/2 秒的速度进行采样,以尝试捕捉从一秒状态到下一个状态的转换。

于 2012-06-13T16:02:11.080 回答
0

注意:- 在 .h 文件中声明

@property(nonatomic , weak) NSTimer *timer;
@property (weak, nonatomic) IBOutlet UIImageView *imgViewClock; //Image of Wall Clock
@property (weak, nonatomic) IBOutlet UIImageView *hourHandImgView; //Image of Hour hand
@property (weak, nonatomic) IBOutlet UIImageView *minuteHandImgView; //Image of Minute hand
@property (weak, nonatomic) IBOutlet UIImageView *secondHandImgView; //Image of Second hand

注意:- 在 .m 文件中声明

- (void)viewDidLoad {
[super viewDidLoad];
//Clock
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[self tick];
}

//这里的assign(tick)方法

-(void)tick {

NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSUInteger units = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
NSDateComponents *Components = [calendar components:units fromDate:[NSDate date]];
CGFloat hours = (Components.hour / 12.0) * M_PI * 2.0;
CGFloat mins = (Components.minute / 60.0) * M_PI * 2.0;
CGFloat seconds = (Components.second / 60.0) * M_PI * 2.0;

self.hourHandImgView.transform = CGAffineTransformMakeRotation(hours);
self.minuteHandImgView.transform = CGAffineTransformMakeRotation(mins);
self.secondHandImgView.transform = CGAffineTransformMakeRotation(seconds);

}
于 2016-07-06T05:25:47.760 回答