iOS, как активировать/деактивировать ограничения макета для определенного класса размера (ориентация)?

У меня есть универсальный интерфейс приложения iOS, разработанный с использованием классов размеров и автомакета. В приложении я делаю анимацию на основе ограничений, активируя и деактивируя ограничения.

Следующий подход работает в «портрете», однако у меня установлены дополнительные ограничения для класса размера «пейзаж». Как учитывать текущий класс размера экрана при активации/деактивации ограничений для анимации?

Например, для изображения, которое у меня есть, я хочу, чтобы код анимации знал, должен ли он активировать какой-то набор ограничений, но не другие.

-(NSArray*)layoutFullScreen
{
    return @[self.imageYCenterConstraint,
             self.imageWidthRatioConstraint];
}

-(NSArray*)layoutWorkingScreen
{
    return  @[self.textLabelCenterYConstraint,
              self.imageHeightRatioConstraint];
}

-(void)doAnimation
{
        [NSLayoutConstraint deactivateConstraints:[self layoutFullScreen]];
        [NSLayoutConstraint activateConstraints:[self layoutWorkingScreen]];

        [UIView animateWithDuration:0.6 delay:0 options:0 animations:^{
            [self.view layoutIfNeeded];

        } completion:^(BOOL finished) {
        }];
}

person Alex Stone    schedule 05.08.2015    source источник


Ответы (1)


Если вы используете классы размера, вы должны думать не с точки зрения ротации, а с точки зрения UITraitsCollections. Вы можете обработать изменение класса размера в traitCollectionDidChange: и соответствующим образом исправить свои ограничения.

person Antonis    schedule 05.08.2015