Masonry animationWithDuration не анимирует

Я пытаюсь анимировать UIWebView в нижней части моего viewController, и я использую кладку ( https://github.com/Masonry/Masonry).

Сначала я создаю свое веб-представление с размером 0 - (x,y, высотой и шириной), а затем пытаюсь анимировать его так, чтобы веб-представление анимировалось "поверх" контроллера представления. Веб-просмотр показан, но он не анимируется на месте - он появляется сразу. Может ли кто-нибудь, кто имеет опыт, направить меня в правильном направлении?

Это моя кнопка действия

-(void)didPressBtn{
    self.infoView = [UIWebView new];
    self.infoView.scalesPageToFit = YES;
    self.infoView.backgroundColor = [UIColor whiteColor];
    self.infoView.delegate = self;
    [self.scrollView addSubview:self.infoView];
    [self.infoView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(@(0));
    }];


    [self.scrollView layoutIfNeeded];
    //FIXME: Hmmm it doesn't really animate!?
    [UIView animateWithDuration:1 animations:^{
        [self.scrollView setContentOffset:CGPointMake(0, 0)];
        [self.infoView makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(self.scrollView);
        }];

        [self.scrollView layoutIfNeeded];

    } completion:^(BOOL finished) {
                [self.infoView loadRequest:[[NSURLRequest alloc] initWithURL:[[NSURL alloc] initWithString:NSLocalizedString(@"INFORMATION_URL", )] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:15]];
    }];
}

Мой viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView = [UIScrollView new];
    self.scrollView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.scrollView];
    [self.scrollView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view);
    }];

    UIView *contentView = [UIView new];
    [self.scrollView addSubview:contentView];

    [contentView makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
    }];

//Then adding buttons and such...
}

1 ответ

Одно быстрое наблюдение относительно didPressButton, Ты используешь mas_makeConstraints установить края равными @0 и их сразу после использования mas_makeConstraints снова, чтобы изменить их так, чтобы прокрутка была заполнена. Это добавляет противоречивые ограничения поверх первого набора.

Вместо этого вы можете использовать mas_remakeConstraints заменить существующие ограничения на это представление.

Что касается анимации, шаблон, который я использую, должен сначала обновить ограничения (не внутри блока анимации), а затем анимировать макет:

[UIView animateWithDuration:1
        animations:^{
            [theParentView layoutIfNeeded];
        }];

См. Также Как анимировать изменения ограничений?

Другие вопросы по тегам