在特定时间后更改UILabel

时间:2014-03-09 11:36:40

标签: ios objective-c uilabel

我有点困惑,需要一些想法。

我想创建一个应用程序,它从0到12计数,然后另一个UILabel变为1.第一个标签从0-12再次开始,然后标签变为2.所以...

我尝试了一些方法来添加NSTimer scheduledTimer并使一些选择器在一定程度上起作用但不符合我的喜好。

我不需要任何代码示例(虽然会很好),但只是一些想法会很好,谢谢。 :)

3 个答案:

答案 0 :(得分:2)

您想根据时间或按按钮更改标签吗?

所以你想通过计时器改变标签,所以这就是。

拳头

#define TimeIntervelInSec 1.0
#define countMaxLimitForLower 12

在你的.h文件中制作2个int

int countLower;
int countHigher;

IBOutlet UILabel *lblLowerCount;
IBOutlet UILabel *lblHigherCount;

并且在这里是在.m

- (void)viewDidLoad
{
    [super viewDidLoad];

   countLower = 0;
   countHigher = 0;

    [NSTimer scheduledTimerWithTimeInterval:TimeIntervelInSec
                                     target:self
                                   selector:@selector(timerChanged)
                                   userInfo:nil
                                    repeats:YES ];
}

-(void)timerChanged
{
    if (countLower >= countMaxLimitForLower)
    {
        countHigher++;
        countLower = 0;
    }
    else
    {
        countLower ++;
    }
    lblLowerCount.text = [NSString stringWithFormat:@"%d",countLower];
    lblHigherCount.text = [NSString stringWithFormat:@"%d",countHigher];

}

答案 1 :(得分:1)

@YashpalJavia走在正确的轨道上,但建议的代码有几个问题:

  • 方法名称应以小写字母
  • 开头
  • 计时器代码不会执行OP要求的内容
  • 计时器方法应将计时器作为参数

从该代码开始:

创建一个实例变量count,它将计算自计时器启动以来的总秒数。

- (void) startTimer;
{
    count = 0;

    [NSTimer scheduledTimerWithTimeInterval:TimeIntervelInSec
                                     target:self
                                   selector:@selector(timerChanged:)
                                   userInfo:nil
                                    repeats:YES ];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self startTimer];
}

-(void)timerChanged: (NSTimer *) timer;
{
    const int units = 12;
    count++;
    int countLower;
    int countHigher;
    countLower = count % units; //Use the modulo operator to get a value from 0 - 11
    countUpper = countLower / units;
    countLowerLabel.text = [NSString stringWithFormat: @"%d", countLower);
    countUpperLabel.text = [NSString stringWithFormat: @"%d", countUpper);
}

上面的代码将使较低的值从0变为11,然后递增较高的值并将较低的值重置为0.如果您确实希望较低的值从0到12(13个可能的值),那么更改单位到13,但我敢打赌,这不是你想要的。

答案 2 :(得分:0)

如果你反击每秒增加,你可以尝试这样的事情。

int count;
count=0;
[self performSelector:@selector(updateMyLabel:) withObject:nil afterDelay:12.0];

-(void)updateMyLabel:(id)sender
 {
    count++;
    NSString *counterString = [NSString stringWithFormat:@"%d", count];
    secondLabel.text=counterString;
 }

我希望它对你有用