2013-08-13 14 views
5

Zamanlayıcı kullanan bir oyunum var. Kullanıcının bir düğme seçebilmesi için bu zamanlayıcıyı duraklattığını ve bu zamanlayıcıyı duraklattığını ve bu düğmeyi tekrar tıkladıklarında, o zamanlayıcıyı durduracaktır. Zaten zamanlayıcıya kodum var, sadece zamanlayıcıyı ve ikili-eylem düğmesini duraklatmak için biraz yardıma ihtiyacım var. zamanlayıcıNSTimer nasıl duraklatılır?

Kodu:

-(void)timerDelay { 

    mainInt = 36; 

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
             target:self 
             selector:@selector(countDownDuration) 
             userInfo:nil 
             repeats:YES]; 
} 

-(void)countDownDuration { 

    MainInt -= 1; 

    seconds.text = [NSString stringWithFormat:@"%i", MainInt]; 
    if (MainInt <= 0) { 
     [timer invalidate]; 
     [self delay]; 
    } 

} 
+0

TBlue'nın yanıtının doğru olması, size yardımcı olması durumunda doğruydu. Bu kodu sorgunuza düzenlemek veya başlığa [ÇÖZ] eklemeniz gerekmez. StackOverflow'da doğru şekilde gönderme yolları hakkında daha fazla bilgi edinmek için [yardım] 'ı okumanızı tavsiye ederim. – madth3

cevap

16

Bu çok kolaydır.

// Declare the following variables 
BOOL ispaused; 
NSTimer *timer; 
int MainInt; 

-(void)countUp { 
    if (ispaused == NO) { 
     MainInt +=1; 
     secondField.stringValue = [NSString stringWithFormat:@"%i",MainInt]; 
    } 
} 

- (IBAction)start1Clicked:(id)sender { 
    MainInt=0; 
    timer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countUp) userInfo:Nil repeats:YES]; 
} 

- (IBAction)pause1Clicked:(id)sender { 
    ispaused = YES; 
} 

- (IBAction)resume1Clicked:(id)sender { 
    ispaused = NO; 
} 
5

Hiçbir duraklama ve NSTimer işlevselliği devam ettirir. Bunu kodun altındaki gibi uygulayabilirsiniz.

- (void)startTimer 
{ 
    m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES]; 
} 

- (void)fireTimer:(NSTimer *)inTimer 
{ 
    // Timer is fired. 
} 

- (void)resumeTimer 
{ 
    if(m_pTimerObject) 
    { 
     [m_pTimerObject invalidate]; 
     m_pTimerObject = nil;   
    } 
    m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES]; 
} 

- (void)pauseTimer 
{ 
    [m_pTimerObject invalidate]; 
    m_pTimerObject = nil; 
} 
+5

Bu duraklamaz, sadece durur ve yeniden başlatılır. –

+0

@CarlVeazey Cevapdan da anlaşılacağı gibi, "NSTimer" de "duraklama" işlevi yoktur, dolayısıyla herhangi bir cevap (kabul edilen dahil) bu gerçek etrafında çalışmalıdır. Bu cevap kabul edilmiş olandan daha iyidir çünkü değerli bir çalışma yapan bir zamanlayıcı bulundurmaz. +1 –

+0

Nonanda yinelenen cevapların, yine de duraklatma işlevselliği sunarken, bu gerçeğin etrafında çalıştığını unutmayın. Bunun mantıksız olduğunu düşünmüyorum. –

İlgili konular