动态改变UIView的位置

时间:2010-05-24 19:50:32

标签: iphone objective-c uiview

这是我的设置。我有一个viewcontroller,我正在创建并添加为子视图。 viewcontroller提供了一些用户可以选择的选项。正在按下“长按”手势来推动视图控制器。在视图控制器中,我添加了一个子UIView将其他控件组合在一起,这样我就可以将它们作为一个单元在屏幕上移动,当它们显示时,将它们置于长按的位置。以下是实例化视图控制器,更改其位置并将其添加为子视图的代码:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" bundle:nil];
[opts recenterOptions:location];
[self.view addSubview:opts.view];

这段代码确实创建并推送了viewcontroller,但是对recenterOptions的调用没有做任何事情。这是方法:

- (void) recenterOptions:(CGPoint)location {
    CGRect oldFrame = self.optionsView.frame;

    CGFloat newX = location.x; // + oldFrame.size.width / 2.0;
    CGFloat newY = location.y; // + oldFrame.size.height / 2.0;

    CGRect newFrame = CGRectMake(newX, newY, oldFrame.size.width, oldFrame.size.height);

    self.optionsView.frame = newFrame;
}

请注意,self.optionsView是我添加到viewcontroller的nib的子UIView。

有谁知道为什么我无法改变UIView的位置?

此致 埃里克

2 个答案:

答案 0 :(得分:0)

一些事情。首先,尝试在调用-recenterOptions之前将视图添加到视图层次结构中:

UserOptions *opts = [[UserOptions alloc] initWithNibName:@"UserOptions" 
                                                  bundle:nil];
[self.view addSubview:opts.view];
[opts recenterOptions:location];

接下来,只需设置视图的中心,而不是尝试更改其框架:

- (void) recenterOptions:(CGPoint)location {
    [[self optionsView] setCenter:location];
}

您是否验证了您的optionsView是否有效(非零)?

我同意罗布,顺便说一句。您需要更改标题以符合您的问题。

答案 1 :(得分:0)

视图被懒惰加载。在您调用self.view之前,视图未加载且optionsView为零,因此self.optionsView.frame = newFrame不执行任何操作。