2010-05-26 1 views
8

Я экспериментирую с использованием cagradientlayer для рисования градиентов в нашем приложении вместо того, чтобы подкласс uiview управлял градиентами. Один snafu, с которым я столкнулся, заключается в том, что когда представление, которое имеет градиент в качестве подслоя его основного слоя, изменяется в соответствии с данными, которые я пытаюсь показать, слой не изменяется вместе с ним. Я заканчиваю тем, что на градиентном слое заканчивается исходный размер кадра, в то время как рама моего представления намного больше.Как получить рамку слоя для автоматического изменения размера в зависимости от фрейма своего суперслоя или рамки его представления?

Есть ли способ авторизовать подслой, чтобы он соответствовал рамке его суперслоя или кадру зрения суперслоя?

ответ

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 был этот метод. Я согласен с тем, что если ваши представления представляют собой представления запасов, которыми управляет uiviewcontroller, что вы хотели бы сделать это вместо layoutSubviews в подклассе UIView. – Kevlar