2013-07-27 3 views
3

나는 그림과 텍스트 레이블 격자가있는 큰 화면 이동 및 확대/축소가 가능한 화면을 표시하는 iPhone 응용 프로그램에서 작업하고 있습니다. 나는 그림의 위치를 ​​개별적으로 변경하고 레이블의 불투명도를 제어 할 수 있어야합니다. UIScrollView 및 Core Animation을 사용하여 이러한 목표를 달성하려고했습니다.부드러운 스크롤 CALayers가있는 UIScrollView

UIScrollView의 하위보기에는 두 개의 주요 하위 레이어가 있습니다. 하나는 그림 표시 용이고 다른 하나는 레이블 용입니다. 그림은 CALayers이고 콘텐츠 속성은 CGImage으로 설정되어 있으며 사진 레이어의 하위 레이어로 추가됩니다. 라벨은 CATextLayers이며 두 번째 레이어의 하위 레이어입니다. 레이블 레이어의 투명도는 스크롤 뷰의 확대/축소 배율에 따라 달라집니다. 레이블이 완전히 불투명하거나 완전히 투명 때 모든 것이 잘 작동하지만,이 때 반투명 스크롤 육포로 시작 FPS 아래 모든 감속이 층의 혼합 분명히 약 35로 떨어진다 :

그리고 여기 문제입니다 , 그러나 나는 그것을 고칠 방법을 찾지 못했습니다. 이 상황에서 성능을 향상시키는 방법에 대한 아이디어는 감사하겠습니다. 문자 레이블을 그릴 때 더 좋은 방법은CATextLayer을 사용하는 것일 수도 있습니다.

답변

0

UIScrollView의 두 "기본 레이어"를 하나로 병합 할 수 있습니까? 또한 레이어를 추가하는 대신 UIScrollView의 레이어에 레이어를 직접 추가 할 수 있습니까?

다른 레이어를 포함하는 유일한 목적으로 존재하는 레이어의 수를 줄임으로써 엄청난 성능을 얻었습니다.

+0

레이블을 별도 레이어에 보관하여 모든 레이어의 투명도를 한 번에 조정할 수 있습니다. 하지만 직접 scrollview 하위 뷰의 레이어에 그림을 추가하고 조언을 주셔서 감사합니다 도움이되는지 확인하려고합니다. –

+0

아, 알겠습니다. 하루가 끝나면 성능 문제는 항상 상황에 따라 다르므로 여러 가지 시도를 시도합니다. 그러나 Objective C 빠른 enumeration + 설정 alphas 개별적으로 컨테이너 레이어 및 불투명도를 변경하는 것보다 빠릅니다 (당신은 하나의 적은 레이어를 혼합 할 것).어쨌든 다른 질문이 있으면 알려주세요. –

-1

한 가지 해결책은 이미지 레이어와 텍스트 레이어의 대부분의 배경 레이어에 그림자를 추가하는 것입니다. 그들 각각을 설정, 어떤 놓치지 마세요 -

은 즉 shadowPath, shadowColor, shadowOffsetshadowRadius 조정할 수 그림자 속성이 될 것입니다. 또한 yourlayer.masksToBounds = NO을 설정하십시오.

yourlayer.shouldRasterize = YES을 추가하는 것을 잊지 마십시오. 성능에 더 큰 영향을 줄 수 있기 때문입니다.

+0

왜 그림자를 추가하지 않아도 그림자를 추가하면 성능이 향상됩니다. 그리고 shouldRasterize가이 시나리오에서 성능을 향상시키는 것을 어떻게 알 수 있습니까? 그는 그가 확대 할 때 어떤 이유에서 건 레이어를 무효화 할 수 있습니다. –

+0

그림자 (0.01와 같은 너비의 그림자)는 톱니 모양의 가장자리를 제거합니다. 이는 OP에서 "삐걱 거리기 시작합니다"라고 설명하는 경우 일 수 있습니다. 나는 물건을 부드럽게하기 위해 그림자를 사용했다. 래스터 라이 제이션은 성능에 더 좋은 영향을 미칩니다. 스크롤 할 때 다시 그려지는 각 레이어를 캐싱하는 한 - 좋습니다. 이것을보십시오 - http://stackoverflow.com/questions/11521959/uiview-self-layer-shouldrasterize-yes-and-performance-issues. 남자를 하향 투표하기 전에 조심하십시오. –

+0

"jerky"로 말하자면 스크롤하는 동안 낮은 FPS를 의미했습니다. 명확하지 않은 경우 미안합니다. 나는'shouldRasterize'를 실험하고 있었지만, 불행히도 내 경우에는 도움이되지 못했습니다. 개별 그림 및/또는 레이블을 래스터 라이 제이션해도 아무런 차이가 없으며 전체보기를 래스터 라이 제이션하면 비트 맵의 ​​일부가 표시됨에 따라 스크롤 속도가 느려지고 깜박 거립니다. –