2012-06-19 3 views
0

현재 카운트 다운 타이머로 약간의 게임을하고 있습니다. 나는 NSTimer를 사용하며, 추가 시간이나 더 적은 시간을 얻을 수 있으며, 당신의 행동에 달려 있습니다. 타이머를 추가하거나 제거 할 때 시간 레이블에 문제가 있습니다. 문제는 나 때문이다. 시간을 추가하거나 제거 할 때 레이블에 새 시간을 설정 한 다음 NSTimer가 메서드를 호출하는 동안 timerAction 메서드를 호출한다. timerAction을 호출하지 않으면 NSTimer를 사용하여 레이블을 새로 고치려면 1 초를 기다려야합니다.목표 c - NSTimer, CADisplayLink, Thread

그래서 문제를 해결하려면 어떻게해야합니까?

도움 주셔서 감사합니다.

답변

0

첫째, 귀하의 코드에 대해 질문하고 싶습니다.

게다가,이 경우에는이 패턴처럼 할 것입니다.

@property (nonatomic) NSInteger remainingTime; 
@property (nonatomic) NSTimer *timer; 

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

- (void)timerAction { 
    if (!countingFinish) { 
     remainingTime --; 
     //backend regular action 
     [self frontEndUpdate]; 
    }else { 
     [timer invalidate]; 
    } 
} 

- (bool)countingFinish { 
    return (reamainingTime <= 0); 
} 

- (void)frontEndUpdate { 
    //update time label, or other front end update action 
} 

- (void)addCountingRemaining:(NSInteger) _sec { 
    remainingTime += _sec; 
    [self frontEndUpdate]; 
} 

btw 이것은 주스 초안 코드입니다. 도움이되기를 바랍니다.

+0

감사합니다. 코드 도움. 사실 나는 timerAction func에서 나쁜 일을하고있었습니다. 나는 여기에 내 레이블을 설정하고 "초 -"그래서 나는 나의 레이블을 설정하기 위해 timerAction을 호출 할 때 초를 설정했다. 그리고 타이머 호출 timerAction 역시 1 초 대신 2 초를 소비한다. 다시 감사합니다;) – user1451884

+0

당신은 환영합니다 :) – TedCheng