2012-10-07 2 views
0

MKMapView를 사용하는 응용 프로그램을 작성했습니다. 이 응용 프로그램은 타이머를 사용하여 화면의 일부 정보를 업데이트합니다. 실제로 사용자가지도를 터치하고 드래그를 시작하면 사용자가 터치를 놓을 때까지 타이머가 더 이상 시작되지 않습니다. 나는 새로운 iOS 6에서이 문제가 사라진다는 것을 알아 차렸다. 그러나 iOS 5도 지원해야합니다. 타이머 만 실행되지 않거나 이벤트가 전혀 처리되지 않는 경우를 파악하지 못했습니다. 어떤 생각?iOS 5의 MKMapView는 사용자가 드래그하거나 줌 할 때 타이머를 금지합니다.

답변

0

흠, 타이머와 터치 처리 코드가 동일한 실행 루프에 의해 처리되고 있거나 타이머 완료 코드가 실행을 시도 할 때 터치가 차단되어있을 가능성이 있습니다. 완료 핸들러가있는 비동기 블록을 사용하여 타이머를 실행하십시오. 그 도움이된다면

- (void)startTimerInBackground { 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 

    //Start timer here, set completion method to be called 
    NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 2.0 
                target: self 
               selector:@selector(timerCompletionMethod:) 
               userInfo: nil repeats:NO]; 
    }); 
} 

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

    //Switch back to main thread here for completion code 
    dispatch_async(dispatch_get_main_queue(), ^(void) { 


    }); 
} 

타이머는 신뢰할 수 없습니다하지만주의 할, 참조, 당신은 아마 당신은 대안을 찾아야한다 매우 정확한 타이밍을 필요로하는 경우, 아주 좋은 정보가 여기에 있습니다 :

How do I use NSTimer?

+0

불행히도 작동하지 않습니다. 'timerCompletionMethod'는 전혀 호출되지 않습니다. 나는 또한 당신이 제공하는 링크에 제안 된 다른 모든 방법을 시도했지만 문제는 여전히 발생합니다. 모든 끌기/확대/축소 작업 중에 runloop이 차단 된 것처럼 보입니다! – AGPX