2012-06-03 1 views
4

내 응용 프로그램에는 약 20 개의 하위 뷰가있는 scrollView가 있습니다. 내가 스크롤 할 때drawRect는 호출되지 않아도 느린 스크롤링을 발생시킵니다.

파단이 추가
- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"drawRect called"); 
} 

,의 drawRect이 호출은, 그러나 그것의 drawRect가 다시 호출되지 않은 경우에도 매우 느립니다 :이 파단의 각 순간에이 같이 보입니다의 drawRect 방법이있다.

drawRect에 대한 구현을 제거하면 스크롤이 완전히 정상적으로 처리됩니다. 느린 스크롤을 제거 할 수 없어도 drawRect 대신 사용할 수있는 대안이 있습니까?

+0

스크롤하는 동안 하위보기가 추가되고 있습니까? 스크롤하는 동안 NSLog를 호출하면 느리게 스크롤됩니다. 또한 일반적으로 성능 튜닝을하는 동안 스크롤하는 동안 물건을 할당하는 것을 피하십시오. – nielsbot

+0

@nielsbot 그러나 그는 코드에 아무 것도 할당하지 않습니다. 그는 단지 텍스트를 로깅합니다. – pasawaya

+0

서브 뷰를 불투명하게 설정 했습니까? –

답변

1

drawRect가 호출 된 경우에만 호출하는 이유는 무엇입니까? 그것이 당신을위한 유일한 목적이라면, 그냥 부르지 마십시오. 실제로, 나는 당신이 처음에 drawRect 메소드를 가지고있는 UIView로부터 상속받은 클래스를 생성 할 때 그것을 주석 처리하고 주석 처리 된 drawRect 메소드보다 위에 선언 할 때 "이 메소드를 호출하지 마십시오. 상당한 양의 메모리를 차지하므로 화면에 그리기를하지 않습니다. " 기본적으로 귀하의 경우에는 전화하지 마십시오.

희망이 도움이됩니다.

+0

+1. 정확한 경고 텍스트는 "사용자 정의 도면을 수행하는 경우 drawRect 만 재정의합니다. 빈 구현은 애니메이션 중 성능에 나쁜 영향을줍니다." – kevboh

+0

예. drawRect를 사용하지 않음으로써 해결 했습니까? – pasawaya

+1

느린 원인이되는 drawRect 메서드 내에서 내가 잘못하고있는 것이 아닌지 확인하고 싶었 기 때문에 drawRect의 구현이 비어있게되었습니다. 그게 내가 전화를 걸고있는 유일한 이유야. 질문이 불분명하면 죄송합니다. –

0

미리보기가 표시되기 전에 미리 그린 CGImages를 각 사용자 정의보기의 CALayer 내용에 할당 해보십시오. drawRect를 사용하여보기의 모양을 사용자 정의하는 것보다 빠를 수 있습니다.

관련 문제