【发布时间】:2012-12-31 05:52:34
【问题描述】:
我有一个秒表,它本身就可以正常工作,但是当我从标签栏从另一个视图切换回来时,秒表会做一些奇怪的事情(点击导航视图上的后退按钮可以正常工作)。
当用户从另一个选项卡切换回来时,秒表标签会被隐藏,即使在显示视图时它应该是可见的。
如果当用户点击另一个选项卡并再次点击秒表选项卡时秒表正在运行,秒表将转到 -31:-23.-64,并且停止按钮(应该重置计时器并显示开始按钮)点击时不会执行任何操作。
如果用户点击另一个选项卡并再次点击秒表选项卡时秒表未运行,则秒表将正常启动,但用户点击开始按钮时停止按钮不显示。
这是我的代码:
.h:
@interface ViewController : UIViewController {
IBOutlet UIButton *btnStart;
IBOutlet UIButton *btnStop;
IBOutlet UILabel *lblTimer;
NSTimer *stopWatchTimer;
NSDate *stopDate;
NSDate *startDate;
}
@property (strong, nonatomic) IBOutlet UILabel *lblTimer;
- (IBAction)btnStart:(id)sender;
- (IBAction)btnStop:(id)sender;
.m:
- (void)updateTimer
{
NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm:ss.SS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];
lblTimer.text = timeString;
}
- (IBAction)buttonStart:(id)sender {
startDate = [NSDate date];
// Create the stop watch timer that fires every 1ms
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0
target:self
selector:@selector(updateTimer)
userInfo:nil
repeats:YES];
btnStop.hidden = NO;
btnStart.hidden = YES;
}
- (IBAction)buttonStop:(id)sender {
[self updateTimer];
btnStop.hidden = YES;
btnStart.hidden = NO;
[stopWatchTimer invalidate];
stopWatchTimer = nil;
}
请让我知道我可以做些什么来解决这个问题,或者是否需要其他任何东西。
【问题讨论】:
-
你在秒表的 viewController 的 viewwillAppear 方法中做了什么吗?
-
不,
viewDidAppear中也没有,应该有吗? -
不,我的意思是您的问题可能是由于 viewwillappear 中的某些属性更改。因为这个函数总是在你改变你的标签时被调用
-
您应该发布更多代码。图片不够清晰。顺便说一句,您每秒创建 100 个
NSDateFormatters,无论如何您都在尝试,这太可怕了!即使是性能非常出色的游戏也只能以大约 60fps 的速度重绘,为什么你还需要 100fps?但无论如何,更多代码将帮助我们找到您的实际问题。
标签: objective-c uitabbarcontroller nsdate nstimer uitabbar