2011-05-14 8 views
0

을 사용하여 그래디언트를 만들려면 this answer을 따르고 있습니다. 키 명령은대체 CALayer

[view.layer insertSublayer:gradient atIndex:0]; 

내 문제는 내가 정기적으로 그라데이션을 업데이트 할 것입니다. 위의 코드를 반복적으로 호출하면 이전 그라디언트 아래에 새로운 그라디언트가 배치되므로 아무 것도 발생하지 않습니다. this answer을 참조하십시오.

내 질문은 : 어떻게 하나가 하위 레이어를 다른 것으로 바꿉니 까? 아마도 replaceSublayer:with:으로 전화해야합니다. 하지만 이렇게하려면 이전 그라디언트에 대한 참조가 필요합니다. 이것을 얻기위한 역동적 인 방법이 있습니까? [view.layer getSublayerAtIndex: 0]과 같은 것? viewcontroller에서 현재 그라디언트에 대한 참조를 저장하는 가장 쉬운 방법은 무엇입니까?

아이디어가 있으십니까? 당신은 단지 수,

[view.layer.sublayers objectAtIndex:0]; 

는 그런 다음 레이어를 교체 외에

[view.layer replaceSublayer:[view.layer.sublayers objectAtIndex:0] with:yourNewGradient]; 

답변

4
[[view layer] replaceSublayer:[[[view layer] sublayers] objectAtIndex:0] with:gradient]; 
+0

고맙습니다. 이것은 내가 찾고 있었던 바로 그 것이었다. – user467225

3

, 당신은이 방법을 사용한다 기존 CAGradientLayer의 colors, locations 및 기타 속성을 업데이트하여 표시된 그라디언트의 매개 변수를 변경하십시오.

+0

완벽한! 고맙습니다. – user467225

+0

괜찮습니다! :) 추신 : 동일한 방법은 하위 뷰와 함께 사용됩니다 (그러나 당신은'subviews' 배열을 대신 사용합니다). – akashivskyy

1

를 통해 계층을 대체 할 수있다 : 당신이 하위 계층을 얻고 싶은 경우에