iOS – 当UIView移动时将UITextField移动到不同的位置

我有一个主要的UIView,它通过一个开关向上移动。 我有这个工作,那里没有问题。 现在UIView在关闭时占据屏幕的大约一半,当它向上推时它显示底部40px。

在它关闭的UIView中它有一个UITextField,它位于中间的某个地方。 当UIView被推高时,我希望UITextField移动到这些40px内,以便它始终可访问。

这是我为UIView移动的代码:

-(IBAction)mainview:(id)sender{ if (uiSwitch.on) { label.text = @"Push Up View"; [UIView beginAnimations:@"animateView" context:nil]; [UIView setAnimationDuration:0.5]; CGRect viewFrame = [subView frame]; viewFrame.origin.y += 0; subView.frame = viewFrame; subView.alpha = 1.0; [self.view addSubview:subView]; [UIView commitAnimations]; } if ([uiSwitch isOn] == YES) { [UIView beginAnimations:@"animateView" context:nil]; [UIView setAnimationDuration:0.5]; CGRect viewFrame = [subView frame]; viewFrame.origin.y = 0; subView.frame = viewFrame; [UIView commitAnimations]; } else { label.text = @"Show View"; [UIView beginAnimations:@"returnView" context:nil]; [UIView setAnimationDuration:0.5]; CGRect viewFrame = [subView frame]; viewFrame.origin.y = -230; subView.frame = viewFrame; subView.alpha = 1.0; [UIView commitAnimations]; }} 

UITextField尚未添加到此,这就是我被困住的地方。 我知道我可能不得不为UITextField创建一个类似的IBAction,但我不确定如何为该位设置动画。

任何帮助??? 干杯杰夫

您可以同时为多个视图设置动画。 你的代码:

 label.text = @"Show View"; [UIView beginAnimations:@"returnView" context:nil]; [UIView setAnimationDuration:0.5]; CGRect viewFrame = [subView frame]; viewFrame.origin.y = -230; subView.frame = viewFrame; subView.alpha = 1.0; [UIView commitAnimations]; 

..可以在您的UITextField上包含额外的帧操作:

 label.text = @"Show View"; [UIView beginAnimations:@"returnView" context:nil]; [UIView setAnimationDuration:0.5]; CGRect viewFrame = [subView frame]; viewFrame.origin.y = -230; subView.frame = viewFrame; subView.alpha = 1.0; // let's move our textField too CGRect textFieldFrame=textField.frame; frame.origin.y+=40; textField.frame=textFieldFrame; [UIView commitAnimations]; 

请注意,如果您的目标是iOS 4.x或更高版本,则可以依赖动画块:

 [UIView animateWithDuration:0.5 animations:^{ CGRect frame; // move our subView to its new position frame=subView.frame; frame.origin.y=-230; subView.frame=frame; subView.alpha=1.0; // let's move our textField too frame=textField.frame; frame.origin.y=40; textField.frame=frame; }];