0

有一个标签在 10 秒内显示从 10,000 到 0 的分数 (lblPoints)

    NSTimer pointstimer=[[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(pointstimermethod) userInfo:nil repeats:YES]retain];

    -(void)pointstimermethod
    {
        points=points-1;
        lblPoints.text=[NSString stringWithFormat:@"%d",points];
    }

谁能告诉我如何在 10 秒内准确地显示 10,000 到 0?

4

4 回答 4

3

显示仅以 60 Hz 的最大值更新,并且 NSTimer 触发精度取决于 UI 运行循环中发生的情况,因此可能会有一到几个显示帧时间(超过 10 毫秒)的错误,当然不是 1 毫秒的分辨率。由于设备在 10 秒内最多只能显示 600 个唯一帧,因此将跳过 10000 到 0 之间的大量数字。

我会尝试使用 CADisplayLink 设置进行 60 Hz 显示更新(这是最大值),使用 mach_time 检查当前时间,从某个开始时间中减去该时间,从 10.0 中减去该时间以进行倒计时,并以秒为单位显示 1000 倍的差异,直到达到 0.0 秒。

于 2012-09-14T06:52:47.577 回答
1

在 viewDidLoad 方法中粘贴下面的代码

NSTimer pointstimer=[[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(pointstimermethod) userInfo:nil repeats:YES]retain];

    -(void)pointstimermethod
    {
        points=points-1;
        if(points >= 0 && points <= 10000){
              lblPoints.text=[NSString stringWithFormat:@"%d",points];
        }
    }

我希望这对你有帮助..

:)

于 2012-09-14T06:33:16.417 回答
1

声明以下 .h 文件。

int points;

在实现文件中,有以下代码。

-(void)showScore:(id)sender {
    points = 10000;
    [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(pointsTimerMethod:) userInfo:nil repeats:YES];
}

-(void)pointsTimerMethod:(NSTimer*)timer
{
    points=points-1;
    lblPoints.text=[NSString stringWithFormat:@"%d",points];

    if(points == 0) {
        [timer invalidate];
        timer = nil;
    }
}

showScore:当您想显示从 10000 到 0 时,只需调用该方法。

于 2012-09-14T06:36:44.553 回答
1
NSTimer pointstimer=[[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(pointstimermethod) userInfo:nil repeats:YES]retain];

-(void)pointstimermethod
{
    if(pointstimer==0)
    {
       [pointstimer invalidate]; 
    }
    else
    {
        points=points-1;
        lblPoints.text=[NSString stringWithFormat:@"%d",points];
    }
}
于 2012-09-14T06:38:59.030 回答