2009-11-30 6 views
3

저는 iPhone 개발에 익숙하지 않고 Silverlight 용으로 개발 한 차트 도구를 재창조하고 있습니다.iPhone에서 Quartz를 사용하여 그래디언트를 움직일 수 있습니까?

현재 차트 내의 막대를 나타내는 사각형을 '채우기'위해 그라디언트를 사용하고 있습니다. 이 그래디언트에 애니메이션을 적용하여 사용자가 차트에서 막대를 터치 할 때 색상이 변경되도록 할 수 있습니까?

Apple에서 제공 한 Core Animation 가이드를 검토했지만 그라디언트를 대상으로하는 속성을 볼 수 없습니다. 두 개의 rect 사이에 페이드를 사용하여 트랜지션을 사용할 수 있는데, 그 중 하나는 시작 그라디언트이고 두 번째는 'touched'버전입니다.하지만 이것은 각 막대에 대해 여러 개의 rect 오브젝트를 그리는 것을 의미 할 것입니다. 추가 퍼펙트 오버 헤드를 가정합니다.

아이디어가 있으십니까?

답변

11

그래, 실제로 코어 애니메이션이있는 애니메이션 그라디언트를 사용할 수 있습니다.

3.0에서 나온 CAGradientLayer 클래스는 그래디언트를 레이어로 렌더링하고 색상 및 색상 정지 효과를 애니메이션으로 표현하는 데 유용한 API를 제공합니다.

I did a post on this class 맨 아래에 링크 된 일부 샘플 코드와 함께 조금 뒤로.

샘플에서는 CABasicAnimation을 작성하여 그래디언트를 움직이게하지만 그래디언트 레이어의 colors 속성에 새로운 색상 배열을 전달하기 만하면 변경 사항을 암시 적으로 애니메이션화 할 수 있습니다. 당신이하지 않는 한 암시 적 애니메이션을 사용하십시오.

애니메이션을 적용하려는 UI와 관련된 질문이 있으면 확인해주십시오.

+0

감사합니다. Joe - 이제 계획대로 정확하게 작동합니다. 레이어의 프레임을 설정해야한다는 것을 모르기 때문에 약간 엉망이되었습니다. 내 그라디언트 레이어의 크기가 0,0,0,0이라는 것을 알기 전까지는 빈 뷰를 보면서 많은 시간을 보냈습니다. 시간이 있다면 질문이 있습니다 - 경로를 그릴 수 있습니까? 각 레이어 내에서? 각 막대 주위에 획을 추가하려고합니다. 내가 할 수있는 것은 각 레이어가 아닌 기본보기에서 rect에 선을 추가하는 것입니다. 드로잉 컨텍스트 UIView, 레이어가 설정되어 있지만 컨텍스트를 이동하는 방법을 찾을 수 없기 때문에이 가정합니다 ... –

+0

네, 물론입니다. 레이어는 사실 그런 식으로 렌더링하기 위해 함께 작업하는 것이 더 좋은 방법입니다. CALayer에는 cornerRadius, borderColor, borderWidth, backgroundColor 등의 속성이 내장되어 있으므로 그래픽 컨텍스트를 사용하지 않고 여러 레이어를 설정하고 각기 다른 시각적 속성을 지정하는 것은 매우 쉽습니다. 해당 속성에 대한 CALayer 문서를 확인하십시오. http://j.mp/6ad0fi 사용자 정의 Quartz 드로잉을 레이어 내부에서 만들고 싶다면 레이어를 서브 클래스 화하고 -drawInContext를 구현하거나 -drawLayer : inContext를 구현하는 델리게이트를 설정할 수있다. –

관련 문제