插入子视图并以相同方法更改另一个视图的位置

时间:2013-02-11 08:12:23

标签: iphone objective-c

我正在尝试向视图添加子视图(UITextField)并在同一方法中更改UITextView的框架属性,但它不能像我期望的那样工作。这是代码:

UITextField *textField = [[UITextField alloc] init];
textField.backgroundColor = [UIColor redColor];
textField.frame = CGRectMake(0, 120, 240, 40);

[UIView beginAnimations:@"MoveView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.5f];
self.tvContent.frame = CGRectMake(0, 80, self.tvContent.frame.size.width, self.tvContent.frame.size.height);
[UIView commitAnimations];
[self.view insertSubview:textField aboveSubview:self.tvContent];

注意:tvContent是我试图重新定位的UITextView对象。

我面临的问题是UITextView根本没有移动 IF 最后一行代码(insertSubview)就位。 The UITextField确实出现了。但是,如果我删除最后一行,textview会改变它的位置。

我还试过没有动画,只需设置self.tvContent的frame属性,就会发生同样的行为。

有任何解决此问题的想法吗?

2 个答案:

答案 0 :(得分:0)

这样做,

UITextField *textField = [[UITextField alloc] init];
textField.backgroundColor = [UIColor redColor];
textField.frame = CGRectMake(0, 120, 240, 40);

[UIView beginAnimations:@"MoveView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.5f];
self.tvContent.frame = CGRectMake(0, 80, self.tvContent.frame.size.width, self.tvContent.frame.size.height);
[UIView setAnimationDidStopSelector:@selector(animationFinish)];
[UIView commitAnimations];

-(void)animationFinish {
[self.view insertSubview:textField aboveSubview:self.tvContent];
}

答案 1 :(得分:0)

你有没有理由继续使用好的'beginAnimations

这样做也是如此:

[UIView animateWithDuration:0.5 animations:^(void) {
    self.tvContent.frame = CGRectMake(0, 80, self.tvContent.frame.size.width, self.tvContent.frame.size.height);
} completion:^(BOOL finished) {
    [self.view addSubview:textField];
}];

编辑:如果你只是添加子视图会怎么样?