анимация ограничений не анимируется, как ожидалось - PullRequest
0 голосов
/ 14 апреля 2019

следующий код используется для перемещения позиции текстового поля в место редактирования в приложении. к сожалению, это не дает желаемого эффекта.

textfield1 перемещается по X к своему окончательному местоположению, а затем по y к его конечному местоположению.

Я хочу, чтобы оба ограничения создавали диагональное движение текстового поля, но оно не работает при тестировании на iPhone.

анимация работает, но я получаю перевернутое "L" -образное движение вместо диагонального "\" движения

любые предложения, как это исправить, будут оценены.

    -(void)textFieldEditingPosition
{
    NSLog(@"editing");
[_regular setNeedsUpdateConstraints];
    switch (_activeTextField.tag)
    {
        case 1:
            self.textField2WidthConstraint.constant =_regular.frame.size.width/4 -16;
            self.textField2XConstraint.constant = -_regular.frame.size.width/4 - self.textField2WidthConstraint.constant/2 -8;
            self.textField2YConstraint.constant = -(_regular.frame.size.height/2 -_inputView.frame.size.height/2);

            _textField1YConstraint.constant = 0;
            _textField1XConstraint.constant = 0;
            _textField1WidthConstraint.constant = _placeHolderTextfield.frame.size.width;

            break;
        case 2:
            self.textField1XConstraint.constant = (_regular.frame.size.width /4) /2;
            self.textField1YConstraint.constant = -(_regular.frame.size.height/8 -8) ;
            self.textField1WidthConstraint.constant = _regular.frame.size.width/4 * 3 -16;

            self.textField2YConstraint.constant =0;
            self.textField2XConstraint.constant = 0;
            self.textField2WidthConstraint.constant = _placeHolderTextfield.frame.size.width;
            break;

        default:
            break;
    }
            [UIView animateWithDuration:0.7
                                  delay: 0.0
                                options: UIViewAnimationOptionCurveEaseInOut
                             animations:^{
                                [self.view layoutIfNeeded];
                             }
                             completion:nil];

}

1 Ответ

0 голосов
/ 15 апреля 2019

Мне удалось решить эту проблему следующим образом

Сначала я включил медленную анимацию в симуляторе.

Это позволило мне точно увидеть, что происходит.Движение в форме буквы L, которое я видел, на самом деле было иллюзией, вызванной расширением ширины текстового поля, когда текстовое поле перемещалось в новые позиции x и y.

вид расширяющейся ширины отменял движение, ожидаемое в xi.см.

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

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

при этом исправленный код:

-(void)textFieldEditingPosition
{
    NSLog(@"editing");
    [_regular setNeedsUpdateConstraints];

    switch (_activeTextField.tag)
    {
        case 1:{
            self.textField2WidthConstraint.constant =_regular.frame.size.width/4 -16;
            self.textField2XConstraint.constant = -_regular.frame.size.width/4 - self.textField2WidthConstraint.constant/2 -8;
            self.textField2YConstraint.constant = -(_regular.frame.size.height/2 -_inputView.frame.size.height/2);

            _textField1YConstraint.constant = 0;
            _textField1XConstraint.constant = 0;
            [UIView animateWithDuration:0.7
                                  delay: 0.0
                                options: UIViewAnimationOptionBeginFromCurrentState
                             animations:^{
                                 [self.regular layoutIfNeeded];
                             }
                             completion:^(BOOL finished){
                                 self->_textField1WidthConstraint.constant = self->_placeHolderTextfield.frame.size.width;
                                 [self.regular layoutIfNeeded];}];
        }
            break;
        case 2:{
            self.textField1XConstraint.constant = (_regular.frame.size.width /4) /2;
            self.textField1YConstraint.constant = -(_regular.frame.size.height/8 -8) ;
            self.textField1WidthConstraint.constant = _regular.frame.size.width/4 * 3 -16;

            self.textField2YConstraint.constant =0;
            self.textField2XConstraint.constant = 0;

            [UIView animateWithDuration:0.7
                                  delay: 0.0
                                options: UIViewAnimationOptionBeginFromCurrentState
                             animations:^{
                                 [self.regular layoutIfNeeded];
                             }
                             completion:^(BOOL finished){
                                 self->_textField2WidthConstraint.constant = self->_placeHolderTextfield.frame.size.width;
                                                  [self.regular layoutIfNeeded];}];
        }
            break;

        default:
            break;
    }


}

IЯ уверен, что есть более чистый способ кодирования, но он работает, поэтому я с облегчением

спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...