이 질문의 목적을 명확히하기 위해 : 하위 뷰와 drawRect를 사용하여 복잡한 뷰를 만드는 방법을 알고 있습니다. 나는 언제, 왜 다른 하나를 사용 해야하는지 완전히 이해하려고합니다.
또한 미리 최적화하는 것이 합리적이지 않으며 프로파일 링을 수행하기 전에 더 어려운 방법을 수행한다는 것이 이해됩니다. 나는 두 가지 방법 모두에 익숙하며 이제는 더 깊이 이해하고 싶다고 생각하십시오.
테이블 뷰 스크롤 성능을 정말 부드럽고 빠르게 만드는 방법을 배우는 데 많은 혼란이 생깁니다. 물론이 방법의 원래 출처는 트위터 트위터 의 저자 (이전의 tweetie)에서 얻은 것입니다. 기본적으로 테이블 스크롤을 부드럽게 만들려면 비밀은 하위보기를 사용하지 않고 대신 하나의 사용자 정의 uiview에서 모든 도면을 수행하는 것입니다. 본질적으로 많은 서브 뷰를 사용하면 오버 헤드가 많고 부모 뷰에 대해 끊임없이 재구성되어 렌더링 속도가 느려집니다.
공평하게 말하면, 이것은 3GS가 아주 새로운 브랜드 일 때 작성되었으며 iDevices는 그 이후로 훨씬 빨라졌습니다. 또 이 방법은 되어 정기적으로 제안 온 인터 웹 및 다른 곳에서 고성능 테이블. 실제로 이것은 Apple의 Table Sample Code 에서 제안 된 방법이며 여러 WWDC 비디오 ( iOS 개발자를위한 실용 그림 ) 및 많은 iOS 프로그래밍 서적 에서 제안되었습니다 .
그래픽을 디자인하고이를위한 핵심 그래픽 코드를 생성하는 멋진 도구 도 있습니다.
그래서 처음에는 "핵심 그래픽이 존재하는 이유가 있습니다. 빠릅니다!"라고 믿게됩니다.
그러나 "가능한 경우 가장 좋아하는 핵심 그래픽"이라는 아이디어를 얻 자마자 drawRect가 종종 응용 프로그램의 응답 성이 좋지 않고 메모리 비용이 매우 비싸고 실제로 CPU에 부담이 있음을 알기 시작합니다. 기본적으로 " drawRect 재정의 방지 "(WWDC 2012 iOS 앱 성능 : 그래픽 및 애니메이션 )
모든 것처럼 복잡합니다. 어쩌면 drawRect를 사용하는시기와 이유를 이해하도록 도울 수 있습니까?
코어 그래픽을 사용하는 몇 가지 명백한 상황이 있습니다.
- 동적 데이터가 있습니다 (Apple의 주식 차트 예)
- 간단한 크기 조정 가능한 이미지로는 실행할 수없는 유연한 UI 요소가 있습니다
- 한 번 렌더링 된 여러 위치에서 사용되는 동적 그래픽을 작성 중입니다.
핵심 그래픽을 피해야 할 상황이 있습니다.
- 뷰의 속성을 별도로 애니메이션해야합니다
- 뷰 계층 구조가 상대적으로 작으므로 CG를 사용한 추가 노력은 가치가 없습니다.
- 전체를 다시 그리지 않고 뷰 조각을 업데이트하려고합니다.
- 상위 뷰 크기가 변경되면 하위 뷰의 레이아웃을 업데이트해야합니다.
그래서 당신의 지식을 부여하십시오. 어떤 상황에서 drawRect / Core Graphics에 도달합니까 (하위 뷰로도 수행 할 수 있습니까)? 그 결정을 내리는 데 어떤 요인이 있습니까? 버터처럼 부드러운 테이블 셀 스크롤에 권장되는 하나의 사용자 정의보기로 그리기 / 어떻게 / 왜 Apple은 일반적인 성능상의 이유로 drawRect를 권장합니까? 간단한 배경 이미지는 무엇입니까 (CG로 크기를 조정하거나 크기를 조정할 수있는 PNG 이미지를 사용하여 만들 때)?
가치있는 앱을 만들기 위해이 주제에 대한 깊은 이해가 필요하지는 않지만 그 이유를 설명 할 수없는 기술 중에서 선택하는 것을 좋아하지 않습니다. 내 뇌가 나에게 화를 낸다.
질문 업데이트
정보를 주셔서 감사합니다. 여기에 몇 가지 명확한 질문이 있습니다.
- 핵심 그래픽으로 무언가를 그리는 중이지만 UIImageViews와 사전 렌더링 된 png로 동일한 것을 달성 할 수 있다면 항상 그 길을 가야합니까?
- 비슷한 질문 : 특히 이와 같은 나쁜 도구를 사용하는 경우 핵심 그래픽에서 인터페이스 요소를 언제 고려해야합니까? (아마도 요소의 표시가 가변적 일 때 (예 : 20 가지 다른 색상 변형이있는 버튼. 다른 경우는?)
- 아래 답변에 대한 이해를 바탕으로 복잡한 UIView 렌더 자체 후 셀의 스냅 샷 비트 맵을 효과적으로 캡처하고 복잡한보기를 스크롤하고 숨기는 동안 표시하면 테이블 셀의 동일한 성능 향상을 얻을 수 있습니까? 분명히 일부 조각을 해결해야 할 것입니다. 내가 가진 흥미로운 생각.