2011-12-12 10 views
0

일부 앱을 쓰고 있습니다. 거기에 사용자 정의보기와 클래스가 있습니다. 뷰에는 "setNeedsDisplayInRect"메서드를 호출하는 타이머가 있습니다. 애니메이션의 목적을 위해 매우 불쾌감을주는 타이머가 필요합니다 (매우 복잡한 애니메이션은 없습니다). 나는 타이머의 값을 0.0001로 설정했다. 그 가치가 너무 크지 않은가? 앱이 올바르게 작동하고 있습니다.NSTimer 객체의 최적 값은 무엇입니까?

+0

초당 프레임 수 천 개를 렌더링 한 애니메이션을 본 적이 있습니까? 그게 당신이 현재하고있는 일이기 때문에 ... 다행히도, runloop도 그리기 시스템도 그렇게 할 수 없으므로, 여러분은 여러분이 시도하고있는 처리 사이클의 일부분 **을 태우고 있습니다. 그 외에 도둑이나 랜달의 답변을보고 스크루 드라이버가 적절한 곳에서 망치를 사용하지 마십시오. – danyowdee

+0

맞아요)) 그것에 대해 생각, 1.0/60.0으로 변경 – Nikita

답변

5

NSTimer을 사용하지 마십시오. CADisplayLink을 사용하십시오. 장치의 최적 속도로 실행됩니다. 이 같은

설정 그것을 : 당신은 코어 애니메이션 또는 UIView의 애니메이션을 시도하면 애니메이션을하고 있다면

- (void)setNeedsDisplayForMyView 
{ 
    [self.view setNeedsDisplayInRect:self.dirtyRect]; 
} 
+0

아주 좋은,이 클래스 –

0

:

self.displayLink = [self.view.window.screen displayLinkWithTarget:self selector:@selector(setNeedsDisplayForMyView)]; 
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

및 방법 setNeedsDisplayForMyView를 정의? 이렇게하면 타이머를 사용하여 직접 애니메이션을 만드는 것보다 모든 것을 쉽게 할 수 있습니다.