使用NSTimer更新标签以在10秒内显示10000到0

时间:2012-09-14 06:21:42

标签: iphone ios uilabel nstimer

有一个标签在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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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];
        }
    }

我希望这可以帮助你交配..

:)

答案 2 :(得分: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;
    }
}

如果要将其显示在10000到0之间,请调用showScore:方法。

答案 3 :(得分: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];
    }
}