2015-04-24 2 views
1

У меня есть метод, который создает слой маски на основе текущего фрейма моего UIImageView, который работает так, как я ожидал. Однако в одном случае я изменяю ограничение высоты UIImageView в методе viewWillAppear, а затем применяю создатель маски к UIImageView, который создает маску с размером worng. Так что мой вопрос: как я могу заставить получить измененный правильный фрейм этого UIImageView?Получение правильного кадра после установки ограничения

Сейчас я получаю высоту 140 InstEd 105, но если я использую layoutIfNeeded после установки ограничения он стал 118, который ближе, но до сих пор не 105.

Обновлено:

метод, который я использую для создания маски:

public func setupMaskForImageView() { 
    let mask = CALayer() 
    let resizedMaskImage = resizeImage(UIImage(named: imageMaskName)!, newSize: frame.size) 
    mask.contents = resizedMaskImage 
    mask.frame = CGRectMake(0, 0, frame.size.width, frame.size.height) 
    layer.mask = mask 
    layer.masksToBounds = true 
} 

и я изменил ограничение в viewWillAppear с

imageHeight.constant = UIScreen.mainScreen().bounds.width/2.5 
+1

Я стараюсь сохранить большинство своих кадров в макете. Вы пробовали установить рамку там, чтобы она обновлялась всякий раз, когда виды нуждаются в перерисовке? – joels

+0

@joels Представление, которое я пытаюсь установить, это не подкласс UIView, поэтому установка в layoutSubviews недоступна к сожалению. –

+0

Как вы добавляете маску и как вы обновляете ее ограничение. – sahara108

ответ

1

Это всегда идеально, чтобы сохранить обрамление в layoutSubiews. От разработчика Apple UIKit doc:

«layoutSubviews». Реализуйте этот метод, если вам нужен более точный контроль над макетом ваших подзонов, чем предусмотрено ограничение по принуждению или авторезистентности ».

Это, как говорится, лучший вариант, возможно, для создания подкласса для вашего пользовательского UIImageView и вставки логики перерисовки в layoutSubviews. Это гарантирует, что ваш вид и маска всегда правильно оформлены.

Смежные вопросы