2014-11-03 4 views
3

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

Первоначально я создаю свой веб-просмотр с размером 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... 
} 

ответ

15

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

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

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

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

Смотрите также How do I animate constraint changes?

+1

спасибо! Я всегда забываю, что 'layoutIfNeeded' следует вызывать на ** parentView **, а не на самом анимирующем представлении –

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

  • Нет связанных вопросов^_^