iphoneobjective-ciosnstimer

Implementing a Countdown Timer in Objective-c?


I am new to iOS programming. I am working on words matching game. In this game I need to implement time counter which shows minutes and seconds. I want when my game is started my timer to start with 3 minutes. Now I want to decrease this timer in reverse direction with seconds. my code just work for seconds..here is my code:

  secondsLeft--;

  int seconds = (secondsLeft %3600) % 60;

  Timerlbl.text = [NSString stringWithFormat:@"%02d",seconds];


  if (seconds==0)

{


 UIAlertView *pAlert = [[UIAlertView alloc]initWithTitle:@"Sorry!!"   
 message:@"TimeOver"        delegate:self    cancelButtonTitle:@"OK"   
 otherButtonTitles:@"Cancel",nil];

 [pAlert show];

[pAlert release];

 }

 }

In Viewdidload i call it through timer..

          countDown=[NSTimer scheduledTimerWithTimeInterval:5.0 target:self 
                 selector:@selector(TimeOver) userInfo:nil repeats:YES];

pleas any one guide me how can i do it in both minutes and seconds.


Solution

  • You can do it like this(ARC Enabled):-

    @interface ViewController()
    {
    UILabel *progress;
        NSTimer *timer;
        int currMinute;
        int currSeconds;
    }
    @end
    
    
    @implementation ViewController
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        progress=[[UILabel alloc] initWithFrame:CGRectMake(80, 15, 100, 50)];
        progress.textColor=[UIColor redColor];
        [progress setText:@"Time : 3:00"];
        progress.backgroundColor=[UIColor clearColor];
        [self.view addSubview:progress];
        currMinute=3;
        currSeconds=00;
    
        // Do any additional setup after loading the view, typically from a nib.
    }
    -(void)start
    {
        timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];
    
    }
    -(void)timerFired
    {
    if((currMinute>0 || currSeconds>=0) && currMinute>=0)
    {
        if(currSeconds==0)
        {
            currMinute-=1;
            currSeconds=59;
        }
        else if(currSeconds>0)
        {
            currSeconds-=1;
        }
        if(currMinute>-1)
        [progress setText:[NSString stringWithFormat:@"%@%d%@%02d",@"Time : ",currMinute,@":",currSeconds]];
    }
        else
        {
            [timer invalidate];
        }
    }