UIView setCenter问题

时间:2011-03-18 18:56:04

标签: objective-c view interface-builder viewcontroller

我在做一些非常简单的事情时遇到了很多麻烦。我有一个viewController和一个subViewController,两者都有从nib加载的视图。为了澄清,父视图的大小为1024 x 748,而子视图中的subView为640 x 480。

在viewController的viewDidLoad上我添加了subViewController的视图,如下所示:

[self.view addSubview:self.subViewController.view];
NSLog(@"subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));

日志输出:

subview.frame:{{0, 0}, {640, 480}}

然后,为了测试一下,我使用setCenter尝试在同一位置重新定位父视图中的子视图,如下所示:

CGPoint newCenter = CGPointMake(0,0);  //should stay at the same position..
[self.subViewController.view setCenter:newCenter];
NSLog(@"after changing center.subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));

日志输出:

after changing center. subview.frame:{{-320, -240}, {640, 480}}

现在我感觉有些东西可能会被搞砸了,并且猜测它与弹簧和弹簧有关。支柱/尺寸&位置选项。我只能猜到这是因为这是我对IB的最不了解的功能。

关于可能导致此问题的任何其他想法?你们有没有关于如何在IB中设置viewcontrollers视图的一般提示,以便它们自动定位与其他viewcontrollers的视图一致?在设置之后,setCenter是动态移动它们的正确方法吗?

2 个答案:

答案 0 :(得分:6)

鉴于您正在做的事情,输出是正确的。点(0,0)是左上角。如果您将子视图的中心设置为此,则子视图的左上角确实为(-640/2, -480/2)

要使左上角对齐,请使用

[self.subViewController.view setCenter:CGPointMake(320.0,240.0)];

答案 1 :(得分:0)

问题尚不清楚。如果将中心设置为0,0,那么您应该期望帧原点为-320,-240。也许你误解了CGRect? CGRect由原点和大小组成。框架是CGRect。框架,大小和中心都是相关的,更改框架会改变大小和中心,并更改中心更改框架。