2013-02-15 2 views
2

По какой-то причине, если я просто использовать код:AnimateWithDuration работает странно

[UIView animateWithDuration:.5 delay:0 
          options:UIViewAnimationOptionCurveEaseInOut 
         animations:^{ 

          CGRect newDescriptFrame = [self.summaryTextField frame]; 
          newDescriptFrame.size.height = (bkgndRect.size.height - kbSize.height) - ((newDescriptFrame.origin.y) + 10); 
          self.descriptionTextView.frame = newDescriptFrame; 

         } 
         completion:^(BOOL finished){ 

         }]; 

Он перемещает descriptionTextView просто отлично, но если добавить еще один анимационный блок наряду с этим.

[UIView animateWithDuration:.3 delay:.5 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 

         self.summaryLabel.alpha = 0.0; 
         self.summaryLabel.alpha = 1.0; 

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

descriptionTextView возвращается в исходное положение до анимации, когда второй блок одухотворяет. Почему это происходит? Как это исправить? Если я перемещу альфа-изменения в том же блоке, что и смена кадра. Он вообще не изменяет рамки.

+0

Это может быть проблема ограничения компоновки. Вы используете раскадровку или xib? Если это так, попробуйте отключить автоматическую компоновку (первая вкладка слева, «Инспектор файлов») и посмотрите, исправляет ли она это. – rdelmar

+0

@rdelmar Мне нужно использовать AutoLayout, так как я использую его во всех других представлениях. Еще одна странная вещь, которая случается, если я принимаю изменение кадра из блока анимации, он все равно не изменится, если у меня есть блоки альфа-анимации. Если я прокомментирую блок альфа-анимации, кадр будет изменен .... – Alan

+0

Иногда вы видите, где сначала изменяется, но затем, когда выполняется другой макет представления, все возвращается к их старым позициям. Если вы используете ограничения компоновки, вам не следует устанавливать фреймы. Вы должны сделать выход к любому ограничению, которое хотите изменить, и вместо этого изменить альянс. – rdelmar

ответ

0

Не потому ли, что только одна анимация может быть выполнена в тот же момент времени? А именно, если вы собрали две анимации в одном блоке кода, фактически будет выполнен только последний.

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