Я пытаюсь анимировать UITextField
, но меня поймала раздражающая и странная проблема . Моя анимация имеет следующую последовательность:
В первом состоянии приложение имеет UITextField
, камеру UIButton
и UIButton отмены
после кнопки камеры, которая находится не был показан, потому что он был размещен за пределами приложения. На самом деле мое приложение имеет ширину 320, а начало отсчета кнопки отмены - (350,7)
Во втором состоянии, когда пользователь касается UITextField
, альфа-канал кнопки камеры устанавливается на 0, а начало отсчета кнопка отмены установлена в положение (247,7).
Конечное состояние такое же, как первое состояние после того, как пользователь коснулся кнопки возврата на клавиатуре или кнопки отмены.
Во время процесса анимируются ширина UITextField и начало координат кнопки отмены по оси x.
Мой код:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = NO;
CGFloat cancelButtonXOffset = CGRectGetMaxX(barcodeSearchButton.frame) - cancelButton.frame.size.width;
CGFloat searchFieldWidth = searchField.frame.size.width - cancelButton.frame.size.width + barcodeSearchButton.frame.size.width;
[UIView animateWithDuration:0.3
animations:^{
searchField.frame = CGRectMake(searchField.frame.origin.x, searchField.frame.origin.y, searchFieldWidth, searchField.frame.size.height);
cancelButton.alpha = 1.0;
cancelButton.frame = CGRectMake(cancelButtonXOffset, cancelButton.frame.origin.y, cancelButton.frame.size.width,cancelButton.frame.size.height);
barcodeSearchButton.alpha = 0.0;
}
completion:^(BOOL finished) {
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = YES;
}];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = NO;
[UIView animateWithDuration:0.3
animations:^{
searchField.frame = CGRectMake(searchField.frame.origin.x, searchField.frame.origin.y, searchFieldStartWidth, searchField.frame.size.height);
cancelButton.alpha = 0.0;
cancelButton.frame = CGRectMake(cancelButtonStartX, cancelButton.frame.origin.y, cancelButton.frame.size.width,cancelButton.frame.size.height);
barcodeSearchButton.alpha = 1.0;
}
completion:^(BOOL finished) {
barcodeSearchButton.userInteractionEnabled = YES;
cancelButton.userInteractionEnabled = NO;
}];
}
Когда анимация выполняется до конечного состояния ТОЛЬКО в первый раз, что означает, что пользователь коснулся UITextField, НАПИСАЛ (эта часть важна) некоторый текст в поле, а затем пользователь при нажатии на кнопку возврата клавиатуры появляется проблема. Проблема в том, что набранный текст в UITextField анимируется, когда ширина UITextField тоже анимируется.
Анимация ведет себя, как показано ниже:
UITextField
возвращается к своему начальному значению. UITextField
и попадает в UITextfield
] в положение, в которое он не должен был попасть. Проблема в том, что шаг 4 не должен происходить, а проблема в том, что это происходит только один раз. Если запустить процесс снова (коснитесь поля uitext, введите текст, коснитесь клавиши возврата), шаг 4 не произойдет.
Я целый день пытался решить эту проблему, но безуспешно.