2010-12-05 4 views
0

나는 손가락 스케치 유형의 앱을 쓰고 있는데,이 앱이 iOS 3.0에서 훌륭하게 작동하도록했습니다. 그러나 iOS 4.0 이상에서 앱을 실행하면 문제가 발생합니다. 특히, 새로운 OS에서 이전 버전보다 터치 이벤트가 약 5 배 느려졌습니다. 이것은 분명히 사이에 그릴 5x 적은 데이터 포인트를 캡처하기 때문에 내 애플 리케이션이 잘 그리지 발생합니다.iOS 4.0에서 터치 이벤트 빈도가 느린 이유는 무엇입니까?

iOS4에서 터치 이벤트 빈도를 높이는 방법에 대한 아이디어가 있으십니까?

답변

2

일부 그래픽 작업에는 3.x보다 iOS4.x가 더 길다 (2X에서 10X 사이의 느린 속도). 더 긴 그래픽 실행 시간은 주 UI 스레드를 차단하고 주 스레드 실행 루프가 사용자 (터치) 이벤트를 처리하기에 충분한 시간을 남기지 않을 수 있습니다.

drawRect 코드를 프로파일 링하여 현재 새로 고침 빈도 시간이 오래 걸리는 지 확인하십시오. 그렇다면 그래픽 렌더러의 속도를 높이거나 높이거나 낮은 프레임 속도로 시도해보고 도움이되는지 확인하십시오.

+0

저는 드로잉 코드에서 상당히 새로운 편이어서 여기에 일반적인 전략이 있습니다. 나는 UIView 하위 클래스입니다. touches moved 메서드에서 뷰에 그려야하는 점을 저장하는 배열이 있습니다. 또한 발동 될 때 setNeedsDisplay를 호출하는 간격 0.03의 타이머를 만들었습니다. 나는 타이머를 viewDidLoad에서 다음과 같이 선언했다. \t timer = [NSTimer scheduledTimerWithTimeInterval : 0.03 target : 셀렉터 : @selector (timerFired :) userInfo : nil repeats : YES]; – aloo

+0

올바른 방법입니까? 또는 스레드가 여기에서 실행되는 방식으로 뭔가가 누락되었습니다. 별도의 스레드에서 그리면 주 스레드가 차단되지 않으므로 (더 많은 터치 이벤트를 수신 할 수 있습니까?) – aloo

+1

타이머 값이 올바른지 여부를 결정하기 전에 drawRect 코드에 걸리는 시간을 알아야합니다. 특정 유형의 CG 드로잉은 스레드 안전성이 있지만 일반적으로 UI 드로잉 코드는 아닙니다. – hotpaw2

-1

메인 스레드를 줄입니다.

1

병목 현상이 어디 있는지 보려면 상어와 함께 코드를 프로파일 링해야합니다. 아마도 주 스레드에서 실행되는 코드 (대부분 터치에 반응하는 항목)가 예상보다 오래 걸려 앱이 터치 이벤트를받지 못하게됩니다.

+0

메인 루프에서 drawRect가 실행됩니까? – aloo

+1

예, 'drawRect'가 메인 스레드에서 실행됩니다 –

관련 문제