2010-05-26 6 views
8

저는 cagradientlayer를 사용하여 uiview 관리 그래디언트의 하위 클래스 대신 그라디언트를 그리는 방법을 실험하고 있습니다. 내가 겪어 본 한 가지 사실은 주 레이어의 하위 레이어 인 그래디언트가있는보기가 내가 보여 주려고하는 데이터에 맞게 크기가 조절되면 그 레이어가 크기가 조정되지 않는다는 것입니다. 내 뷰의 프레임이 훨씬 커지면서 원본 프레임 크기에서 그라디언트 레이어 끝을 갖게됩니다.슈퍼 레이어의 프레임이나 뷰의 프레임을 기준으로 레이어의 프레임 크기를 자동으로 조정하려면 어떻게해야합니까?

슈퍼 레이어의 프레임 또는 슈퍼 레이어의보기 프레임에 맞게 자동 레이어 하위 레이어를 만들 수있는 방법이 있습니까?

답변

9

보기의 하위 클래스에 layoutSubviews을 구현하십시오. 프레임의 사이즈가 변경되었을 때 (또는 setNeedsLayout가 불려 갔을 때에) 불려갑니다. 그냥보기의 경계에 레이어의 프레임 설정 :

-(void)layoutSubviews 
{ 
    someSubview.frame = self.bounds; // make the subview frame match its view 
} 
+0

내가 모든 서브 클래스를 필요로하지를 바라고 작동하지만 CALayers에 일부 기능이 존재하는 것을 그 전 그게 날 위해 할 것이라고 찾을 수없는 것입니다 (레이어를 서브 클래 싱하는 것은 문제가되지 않습니다). – Kevlar

+0

보기의 크기는 어떻게 조정합니까? 프레임을 설정하여보기 크기를 조정하고 레이어의 크기를 조정하지 않아도됩니다. – progrmr

+0

어떤 경우에는 프레임을 설정하고보기에서 다른보기에 자동 표시되도록합니다. 문제는 내가 뷰를 수동으로 크기를 조정할 때 서브 뷰 자체 크기를 조정하지 않도록 서브 뷰의 자동 크기를 끄는 것일 수 있다고 생각합니다. 그게 내 문제일지도 몰라. – Kevlar

2

이 더 나은

-(void)viewWillLayoutSubviews 
+1

무엇보다? 그리고 왜? 완전한 답을 제공하십시오. –

+0

실제로 의도 한 것을 실제로 수행 할 것이라는 점에서 더 좋을 것이라고 생각합니다. – GregJaskiewicz

+0

나는이 질문을 할 당시 UIViewController가 그 방법을 가지고 있다고 생각하지 않는다. UIView 하위 클래스에서 layoutSubviews 대신 UIView에서 관리하는 뷰가 뷰에있는 경우이를 수행하는 것이 좋습니다. – Kevlar

관련 문제