문제

석영을 처음 접했고 나는 간단한 모양, 그라디언트 및 그림자의 드로잉 속도에 궁금합니다. 특히 석영 드로잉 기능을 iPhone의 Quartz 이미지와 비교합니다.

채워지고 쓰다듬고 그림자가있는 사각형을 그려야한다고 가정 해 봅시다. 나는 사전 구운 릿을 PNG로 가져 와서 drawInrect를 사용하여 그려면 다음을 그리는 것으로 가정합니다. 반면에 이미지를 그리는 것은 이미지를 가져 와야하기 때문에 메모리 사용과 응용 프로그램 크기가 증가한다고 가정합니다. 이 소리가 맞습니까?

게다가, 어느 기술에도 큰 장점/단점이 있습니까? 그래픽 프로그램에 매우 익숙하고 Quartz에 새로운 브랜드가있는 사람으로서, 전체 UI를 사전 제작하고 이미지를 가져 오는 대신 내 코드에서 드로잉 기능을 사용하는 데있어 장점이 있는지 결정하려고합니다.

도움이 되었습니까?

해결책

비슷한 질문이 있었기 때문에 다른 접근법을 시간에 정리했습니다. 대부분의 간단한 드로잉 케이스 (사각형 예와 같은)에서 디스크에서 이미지를로드하는 것은 디스크 액세스가 필요한 디스크 액세스로 인해 하나를 그리는 것보다 약간 느리게 보였습니다. 그러한 경우, 나는 단순히 그들이주는 유연성 때문에 석영 드로잉 루틴을 사용하는 것에 정착했습니다. 향후 UI 요소의 크기를 변경하려면 (더 크거나 더 높은 해상도 디스플레이를 지원하려면) 벡터 도면이 필요에 따라 확장되는 모든 이미지를 다시 렌더링해야합니다.

중요한 성능 승리를 보았던 영역 중 하나는 배경으로 그리는 큰 방사형 구배에 대한 것입니다. 상어에서는 CGContextDrawRadialgradient () 전화가 많은 CPU 시간을 씹고 있음을 알 수있었습니다. Quartz-Drawn Radial Gradient를 정적 이미지로 교체했을 때 응용 프로그램 시작 시간이 눈에 띄게 감소하는 것을 보았습니다 (이 배경은 응용 프로그램 시작 중에 배치됩니다). 이상하게도, 나는 또한 약 0.5MB의 애플리케이션 메모리 사용이 감소하는 것을 보았습니다.

이것을 직접 테스트하려면 이미지 편집기를 선택하는 것이 좋습니다. 불투명, 도면에 대한 석영 코드 (전체 UIView 또는 Calayer 서브 클래스 포함)를 생성하고 동일한 도면의 PNG를 출력 할 수 있습니다. 따라서 응용 프로그램 내에서 두 경로를 모두 구현하고 테스트하는 것이 중요합니다.

다른 팁

응용 프로그램 구조에 따라 작동 할 수있는 중간 근거도 있습니다. 드로잉 코드를 구현하지만 레이어로 그리기 한 다음 재사용하십시오. 이것은 CPU 시간을 두 번 이상 씹지 않고 여전히 드로잉 프로세스를 동적으로 유지한다는 이점이 있습니다.

예를 들어, 태블릿이 마침내 배송되면 (지금은 지금까지 !!), 여러 정적 이미지를 생성하지 않고 가능한 모든 장치를 다루기 위해 드로잉 매개 변수를 약간 재 작업 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top