这是我的设置。我有一个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的位置?
此致 埃里克
答案 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
不执行任何操作。