2015-04-13 2 views
0

Я использую autoLayout в представлении, и я хочу выполнить метод после размещения ограничений, потому что у меня есть изображение, и мне нужен реальный кадр.Метод выполнения iOS после того, как ограничения помещены в представление

Я пользуюсь iOS 8 SDK.

Это метод, который я хочу, чтобы выполнить

- (void)addGradientOverlayToQuestion { 
    CALayer *questionLayer = self.questionImage.layer; 
    CAGradientLayer *maskLayer = [CAGradientLayer layer]; 
    maskLayer.colors = @[(id)([UIColor blackColor].CGColor), (id)([UIColor clearColor].CGColor)]; 
    maskLayer.startPoint = CGPointMake(0, 0.7); 
    maskLayer.endPoint = CGPointMake(0, 1); 
    maskLayer.frame = questionLayer.bounds; 
    questionLayer.mask = maskLayer; 
} 

Я попытался

[self layoutIfNeeded] 
[self addGradientOverlayToQuestion]; 

и это то же самое, и я попытался

[self.questionView layoutSubviews]; 

но изображение выглядит слишком большой ,

Любые идеи? Спасибо!

+0

Не могли бы вы дать более подробную информацию. Ваш вопрос немного запутанный – Jeef

+0

Как я могу узнать, что фрейм обновлен autoLayout? (В представлении) –

+0

попытайтесь вызвать метод layoutIfNeeded, чтобы сделать ретрансляцию представлений соответствующим вашим ограничениям, и после этого попробуйте вызвать свой метод. Это должно работать –

ответ

0

Возможно, вы хотите переопределить layoutSubviews в своем UIView, чтобы получить момент после того, как были отображены подсмотры?

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    if (self.hasAddedGradient) { 
     [self removeGradient]; // Remove previously added gradient 
    } 

    self.hasAddedGradient = YES; 
    [self addGradientOverlayToQuestion]; 
} 

Поэтому убедитесь, что вы отслеживаете, если градиент уже был добавлен, и убедитесь, что вы можете удалить его, так что вы можете добавить его снова. Этот метод должен быть повторяемым.

+0

Спасибо за помощь. У меня все еще есть такая же проблема, что изображение выглядит настолько большим. Кажется, что autoLayout не влияет –

+0

viewDidLayoutSubviews также является хорошим кандидатом. Пожалуйста, NSLog ваши фреймы с NSStringFromCGRect, как NSLog (@ "Найдено прямой:% @", NSStringFromCGRect (self.view.frame)) –

+0

Я не в ViewController. Также у меня есть xib, и я использую классы размера. Это журнал фрейма одного UIView, который у меня есть в xib: {{15, 62}, {570, 448}} –