5

Я пытаюсь увеличить высоту пользовательской клавиатуры в анимации со следующим кодом. Но я не могу понять, почему изменение происходит мгновенно, игнорируя анимацию.Анимация пользовательской высоты клавиатуры в iOS 8

//In viewDidAppear 

[self.view needsUpdateConstraints]; 
[UIView animateWithDuration:2 animations:^{ 
    CGFloat _expandedHeight = 500; 
    NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
      constraintWithItem: self.view 
      attribute: NSLayoutAttributeHeight 
      relatedBy: NSLayoutRelationEqual 
      toItem: nil 
      attribute: NSLayoutAttributeNotAnAttribute 
      multiplier: 0.0 
      constant: _expandedHeight]; 
    [self.view addConstraint: _heightConstraint]; 
    [self.view layoutIfNeeded]; 
}]; 

ответ

0

Сначала добавьте контрсилами вне блока анимации, а затем вызвать для updateConstraints, и внутри блока анимации, вызовите layoutIfNeeded .HOpe это будет работать

CGFloat _expandedHeight = 500; 
NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint 
     constraintWithItem: self.view 
     attribute: NSLayoutAttributeHeight 
     relatedBy: NSLayoutRelationEqual 
     toItem: nil 
     attribute: NSLayoutAttributeNotAnAttribute 
     multiplier: 0.0 
     constant: _expandedHeight]; 
[self.view addConstraint: _heightConstraint]; 
[self.view needsUpdateConstraints]; 
[UIView animateWithDuration:2 animations:^{ 

[self.view layoutIfNeeded]; 
}]; 
+0

Когда я пытаюсь это решение, продолжительность все еще не учитывается. – Drico

+0

Кто-нибудь нашел решение? – Renatus

+0

Лучшее, что я нашел, это использовать CADisplayLink. Это решение работает, но оно недостаточно стабильно. –

0

Внизу код я использую для анимации положение X в центре линии. Я связал центр X этой линии с центром центра ссылок, используя IBOutlet NSLayoutConstraint. Inorder для анимаций, возникающих при автоопределении, необходимо обновить ограничение и вызвать layoutIfNeeded внутри блока анимации. Это определенно идея анимации с автозапуском.

blueScrollerCenterXConstraint.constant = (btn.tag - 4000)*btn.frame.size.width; 
    [blueScroller updateConstraints]; 

    [UIView animateWithDuration:0.3 animations:^{ 
    [blueScroller layoutIfNeeded]; 
}]; 
0
  1. Вы не должны добавить ограничение есть.

  2. Добавьте его и отключите (или установите приоритет действительно очень низкий).

  3. После этого измените приоритет на 999 и выведите layoutIfNeded в блоке анимации.