所以我的手上有一个非常奇怪的问题,搜索时间没有提供任何结果。
我有一个包含uitextfield的uiview。现在,最初此视图位于可见屏幕之外,坐标如x = -500,y = -500。
然而,按下按钮时,此视图会动画并移动到屏幕中央。
现在每当我点击作为此视图子视图的uitextfield时。此视图将移回屏幕外的原始坐标。
我疯狂地检查了我的代码,没有任何东西可以在外面再次移动视图。任何帮助解释这种非常不熟悉的行为都会非常感激。
此代码将视图移动到屏幕上
- (IBAction)Register:(id)sender {
//(self.view.frame.size.width/2)-(self.SignUp_Screen.frame.size.width/2);
//self.login_Screen.hidden = YES;
self.blurView.hidden = NO;
//self.SignUp_Screen.layer.zPosition = 5;
NSLog(@"Register");
self.SignUp_Screen.hidden = NO;
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.SignUp_Screen.frame = CGRectMake(35, 50,self.SignUp_Screen.frame.size.width , self.SignUp_Screen.frame.size.height);
} completion:^(BOOL finished) {
}];
}
这些是textfield的委托方法
-(void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"TextFieldEndEditing");
[textField resignFirstResponder];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSLog(@"textFieldShouldReturn");
[textField resignFirstResponder];
return YES;
}
答案 0 :(得分:1)
正如Wezly暗示的那样,如果您使用自动布局,则不再直接修改框架。那是旧世界。您希望为约束设置Outlet /属性并为其设置动画。
[UIView animateWithDuration:0.25
animations:^{
SignUp_Screen.centerXConstraint.constant = ...;
SignUp_Screen.centerYConstraint.constant = ...;
[SignUp_Screen layoutIfNeeded];
}];
答案 1 :(得分:0)
我解决这个问题的方法是将IBOutlet
链接到我想要更改的约束,然后设置它的constant
值。
<强>·H 强>
@interface ViewController : UIViewController {
IBOutlet NSLayoutConstraint *constraintHandle;
}
<强>的.m 强>
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
constraintHandle.constant = self.view.center.x;
[SignUp_Screen layoutIfNeeded];
} completion:^(BOOL finished) {
}];
不要忘记将IBOutlet
链接到故事板或xib中的约束。
答案 2 :(得分:0)
如果使用自动布局,则不应修改帧。您应该通过动画约束的常量来为视图设置动画。例如:
NSLayoutConstraint *viewY; //constraint from superview top to view top
viewY.constant = 100;
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:0.3f animations:^{
[self.view layoutIfNeeded];
}];