2011-05-16 8 views
1

내부에 (사용자 정의) UIView가있는 UIScrollView가 있습니다. 내 scrollViewDidScroll-방법에서drawRect를 사용하면 스크롤이 UIScrollView에서 느려집니다.

나는이 만드는

[myCustomView setNeedsDisplay]; 

를 호출하는거야 난의 drawRect 구현하고있어 경우, 눈에 띄게 느린 스크롤 : 내 사용자 지정 UIView의에 방법을 - 완전히 비어있는 경우에도.

drawRect : 메소드를 삭제하면 다시 부드럽게 나타납니다.

저는 전혀 모릅니다. 왜 ... 누구?

답변

3

나는의 drawRect 너무 싫어

"이 때문에 하드웨어 accellerated 애니메이션 코코아에서 작동하는 방식입니다. 사용자 정의의 drawRect 방법이없는 경우

, 시스템은 귀하의보기의 픽셀을 캐시 비디오 메모리를 사용하여 화면을 다시 그릴 필요가있을 때 픽셀을 화면에 블리트합니다.

사용자 정의 drawRect 메서드가있는 경우 시스템은 drawRect 메서드를 호출하여 픽셀을 주 메모리에 렌더링 한 다음 복사해야합니다 그 픽셀을 비디오 메모리에 넣은 다음, 모든 프레임마다 화면에 픽셀을 그립니다. 가능한 경우 drawRect void.

메인 메모리와 비디오 메모리는 대부분의/모든 iOS 장치에서 공유되지만 시스템은보기를 위해 drawRect 메서드를 구현할 때 훨씬 더 많은 작업이 필요하다고 생각합니다.

당신은 아마 더는 OpenGL 층을 사용 및 OpenGL 디스플레이 하드웨어와 직접 통신하기 때문에 OpenGL은이 호출과 그에 렌더링 제공 될 것 "

링크가 인용 :. http://www.iphonedevsdk.com/forum/iphone-sdk-development/80637-drawrect-makes-scrolling-slow-uiscrollview.html

+0

어쨌든, 나는 생각한다 'drawRect :'는'UITableViewCell'과 같은 컨트롤에서 사용할 수있는 완벽한 방법입니다. 어떻게 생각하세요? –

+1

예, 확실히! UITableViewCell의 contentView에서 그릴 때 UIScrollView에서와 같이 뷰 자체가 새로 고쳐지지 않습니다. – Riskov