我使用更新标签的 NSTimer 编写了一个计时器。问题是,在同一个视图控制器中,我有一个 uitableview,当我向下滚动它时,计时器不会更新其值,因此用户可以“作弊”来停止计时器。
我认为使用带有 CGD 的串行队列可以很容易地解决这个问题,但我不知道如何做到这一点。
提前致谢,
Juan
首先请记住,您不能在主线程以外的任何其他线程中执行 UI 更改。话虽如此,你需要NSTimer
在主队列中触发,否则程序在更改时会崩溃UILabel
。看看这个链接http://bynomial.com/blog/?p=67和这个http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html
据我所知,如果您将计时器安排在NSRunLoopCommonModes
它将忽略事件更新并按照您想要的方式触发时间:
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0
target:self
selector:@selector(timerDidTick:)
userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
-(void) timerDidTick:(NSTimer*) theTimer{
[[self myLabel] setText:@"Timer ticked!"];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)