Мне удалось решить эту проблему следующим образом
Сначала я включил медленную анимацию в симуляторе.
Это позволило мне точно увидеть, что происходит.Движение в форме буквы 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Я уверен, что есть более чистый способ кодирования, но он работает, поэтому я с облегчением
спасибо