2011-10-23 3 views
1

남자 UIView를 서브 클래 싱하는 데 문제가 있습니다. IconView를 만들고 있습니다. 단순히 다른 하위보기 용 컨테이너입니다. 내 IconView에 iVar가 있습니다. UIImageView _background UIImageView _icon UILabel _iconLabel.UIView를 효율적으로 서브 클래 싱하기

IconView를 초기화하면이 3 개의 iVar에 이미지, 텍스트 및 roundCorner 및 Shadow와 같은 일부 석영 효과를 설정 한 다음 자체보기에 추가합니다. 모두 괜찮아요. 그러나 빈 스크롤보기 안에이 IconView 중 일부 (예 : 10 개)를 삽입하면 스크롤 효과가 부드럽 지 않습니다. 스크롤 뷰에 수천 개의 간단한 UIView를 삽입하기 전에 시도했고 스크롤 애니메이션이 완벽하게 작동합니다. IconView의 10 개만 사용하면 스크롤 애니메이션이 실제로 작동하지 않습니다.

UIImageViews 대신 UIImages를 유지하고 drawRect : method 내부에 그릴 수 있지만이 경우 Autoresizing 속성과 Quartz 효과가 느슨해집니다.

아무 제안 사항이 있습니까? 감사합니다. 가브리엘.

답변

1

불행히도 UIScrollView은 매우 느립니다. this Questionthis (defect) blogpost과 함께 it's sample code과 같이이 주제에 대한 많은 게시물과 기사가 있습니다. 또한 내가보기에 매우 권장하는 2010 년 WWDC 비디오에서 'iOS의 성능 최적화'에 관한 세 가지 세션이 있습니다. 결론을 요약하면 다음과 같습니다. 가능한 한 하위보기를 사용하고 투명 필름을 사용하지 않도록 특별히주의하십시오.

일반적으로 '성능에 대한 ScrollViews'의 이야기에 대해 다음과 같이 설명합니다. 동일한 문제가있어 위 기사와 비디오의 모든 팁을 사용했으며 성능이 향상되는 동안 ' 충분히. 나는 너 같은 둥근 모서리 하나의 이미지를 사용했고, 이것이 절대적으로 성능을 떨어 뜨린다는 것을 알았다. 그냥 비활성화하면 다른 모든 것보다 많은 도움이되었습니다. 아마도 그림자 효과와 동일 할 것입니다.

이제 가장 둥근 모서리를 유지하려고합니다. those awesome classes을 사용하여 이미지 사본을 만들거나 (가능한 경우 원본을 가져 와서) 직접 조작하는 것이 좋습니다. 이렇게하면 효과는 한 번만 적용됩니다. 그것은 나를 위해 완벽하게 작동합니다. 그림자가 생기면 Photoshop에서 일부만 만들고 새 ImageView에서 사용할 수 있습니다.

충분하지 않은 경우 TableViewCells과 같이 IconViews을 캐시해야합니다 (아직 캐시하지 않은 경우).

+0

나는 모든 석영 효과를 제거하려고 노력했으며 많은 도움이되었습니다. 고마워,하지만, Quartz는 꽤 쓸모가 없다는 뜻인가? 정적 렌더링에만 사용해야합니까? 나는 그렇게 생각하지 않는다 ... 나는 모든 기사를 읽을 것이고, 나는 성과를 향상시키기 위해 비디오를 보게 될 것이다. – Gabriele

+0

석영은 스크롤보기에서 제대로 작동하지 않습니다. 비활성화하면 문제가 해결되고 동영상이나 기사는 그렇지 않습니다. shouldRasterize가 도움이되지 않는다면, 내가 제안한 것처럼 직접 조작을해야한다. – Phlibbo

+0

성능 최적화에 대한 WWDC 10 강연을 읽기 시작했지만 동영상을 볼 시간이 필요합니다. 이 순간 나는 모든 석영 효과를 사용하지 못하게했고 카테고리가 제안되면서 둥글게되었습니다.굉장해 !! 이제 IconView 백 개를 가진 스크롤은 실제로 빠르지 만 천천히 진행되기 시작합니다.하지만 제 경우에는 스크롤 내에서 jus 15 또는 20을 사용해야합니다. 당신이 말했듯이, 순간적으로 결론은 스크롤 안에서 Quartz를 사용하지 말아야한다는 것입니다. – Gabriele

1

문제는 아마도 석영 그림자 일 것입니다. 많이 사용하면 렌더링 속도가 느려질 수 있습니다.

작성하기 전에 CALayer의 shouldRasterize 속성을 YES로 설정해보십시오. 이렇게하면 쿼츠가 그림자를 한 번만 렌더링하고 버퍼에 저장합니다. 그것이 어떻게되는지보십시오.

+0

또한'rasterizationScale'을 화면 크기로 설정해야합니다. '[[UIScreen mainScreen] scale]을 통해 액세스 할 수 있지만 API 차이점에는 몇 가지 합병증이 있다고 생각합니다 ... http://stackoverflow.com/questions/3130420/how-to-call-uiscreen-mainscreen-scale을 참조하십시오. -in-a-universal-app-for-the-iphone 및 – joerick

+0

shouldRasterize는 내가 언급 한 동영상 중 하나에서 소개되었습니다. 셀 내에 애니메이션이 필요하지 않으면 그 애니메이션을 촬영할 수 있습니다. – Phlibbo

+0

@joerick 도움이되었습니다. 이제 애니메이션은 좋지만 부드럽 지 않습니다. – Gabriele

관련 문제