2010-06-14 4 views
24

좋아, 나는 온라인으로 검색했고 심지어 NSTimer에 대한 사과 설명서를 이해할 수 없기 때문에 몇 권의 책을 보았습니다. 나는 각각 3 개의 버튼 (START-STOP-RESET)을 가지고있는 동일한 뷰에서 2 개의 타이머를 구현하려고한다.기본 아이폰 타이머 예제

첫 번째 타이머는 2 분에서 카운트 다운 한 다음 경고음을냅니다.

두 번째 타이머는 무기한으로 00:00에서부터 카운트 업됩니다.

나는 모든 코드가 3 개의 다른 버튼 뒤에있는 메소드로 작성 될 것이라고 가정하지만, 사과 문서를 읽으려고하면 완전히 없어졌습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

참조 http://stackoverflow.com/questions/3519562/how-do-i-write-a-timer-in-objective-c –

답변

35

기본적으로 원하는 것은 1 초마다 발생하는 이벤트 또는 1/10 초 간격으로 발생하는 이벤트입니다. 그러면 타이머가 작동 할 때 UI가 업데이트됩니다.

다음은 타이머를 생성하고 실행 루프에 추가합니다. 필요할 때 타이머를 죽일 수 있도록 어딘가에 타이머를 저장하십시오.


- (NSTimer*)createTimer { 

    // create timer on run loop 
    return [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES]; 
} 

이제 타이머 틱에 대한 처리기를 작성 : 사용자가 버튼을 명중

 
- (void)timerTicked:(NSTimer*)timer { 

    // decrement timer 1 … this is your UI, tick down and redraw 
    [myStopwatch tickDown]; 
    [myStopwatch.view setNeedsDisplay]; 

    // increment timer 2 … bump time and redraw in UI 
    … 
} 

경우 카운트를 재설정하거나 시작하거나 똑딱을 중지 할 수 있습니다. 타이머를 끝내려면 다음과 같이 무효 메시지를 보내주십시오.


- (void)actionStop:(id)sender { 

    // stop the timer 
    [myTimer invalidate]; 
} 

희망이 있으면 도움이됩니다.

+0

먼저 도움을 주셔서 감사합니다.하지만 저는 아직 조금 있습니다. 혼란스러워. UILabel과 IBAction에 무엇을 사용합니까? 코드에는 거기에 있어야하는 코드가없는 것 같습니다. 그렇지 않아도됩니까? – startuprob

+0

I * 높게 * Aaron Hillegass의 책인 Cocoa (R) Programming for Mac (R) OS X (3 판)을 선택하는 것이 좋습니다. 이것을 읽고 예제를 통해 작업한다면 Interface Builder를 포함하여 Objective-C와 Cocoa에 대한 확실한 이해를 얻을 수 있습니다. 솔직히 30 달러에 얼마 동안 할 수있는 최선의 투자 일 것입니다. 달려야합니다. 먹이를주세요! –

+0

예, 귀하의 의견에 대한 답변에서 귀하의 UI 구현을 건너 뛰었습니다. 맞습니다. UIWindow가 필요합니다. 사용자가 터치 할 때 이벤트를 생성하는 일부 컨트롤이 포함 된 UIView가 필요합니다. 이벤트는 뷰 컨트롤러의 IBAction 태그가 지정된 메소드로 라우팅되어야합니다. 그리고 당신이 말했듯이, 스톱워치를 들고있는 UILabel 또는 두 명이 읽습니다. –

11

UI를 업데이트하기위한 참고 사항으로 NSDate를 사용해야한다는 점을 제외하고는 Jonathan의 방법을 따릅니다. NSTimer를 기반으로 틱을 업데이트하는 대신 NSTimer가 실행될 때 NSDate와 현재 날짜의 차이를 가져옵니다.

NSTimer는 해상도가 50-100ms이므로 기기 속도를 늦추는데 많은 시간이 걸리면 타이머가 꽤 부정확해질 수 있습니다. NSDate를 참조 점으로 사용하면 실제 시간과 표시된 시간 간의 유일한 차이가 해당 차이 계산 및 디스플레이 렌더링에 있는지 확인할 수 있습니다.

+1

나는 이것이 오래되었다는 것을 압니다. 그러나 누구도 찾아 오지 못합니다. NSTimer는 실제로 화재 사이의 해상도를 유지합니다. 즉, 50-100 ms의 해상도로 항상 정확하고, 결코 극한의 경우는 아니지만 극단적 인 경우는 절대 없습니다. [NSTimer 문서] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/)의 Timer Tolerance를 참조하십시오. – nickRise

+0

@robotpsyche가 맞다. 나는 두 장치 (아이폰과 ipad)에서'NSTimer'를 사용했다. 20 분 동안 타이머의 차이가 12 초라는 것을 짐작해라. 이것은 전혀 받아 들일 수 없다. NSDate'. –