以下代码用于将文本字段位置移动到应用程序上的编辑位置。 不幸的是,它没有产生预期的效果。
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];
}
答案 0 :(得分:0)
我设法解决了以下问题
首先,我在模拟器中打开慢速动画。
这使我能够准确地了解正在发生的事情。 我看到的L形运动实际上是由于文本框移动到新的x和y位置时文本框宽度扩大而引起的错觉。
这种扩展宽度抵消了我期望看到的x方向的运动。
通过将宽度扩展分成动画完成,我得到了所需的结果,即文本框向编辑位置的对角移动。
文本框宽度的扩展发生在没有动画的补全块中,这对我来说很好,因为文本框背景被隐藏了,并且用户只能看到占位符文本。
以及修改后的代码:
-(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;
}
}
我敢肯定有一种更简洁的编码方式,但是它可以工作,所以我放心了
谢谢