CGRect根据中心点定位

dcc*_*rmo 5 uiview ios cgrectmake

我正在尝试为iPad应用创建多个视图.首先,我创建了一个菜单视图,然后根据菜单创建了带坐标的子菜单视图.所以它看起来像这样:

在此输入图像描述

我做了什么:

self.view = [[UIView alloc] initWithFrame:CGRectMake(self.parentViewController.view.frame.size.width, 0, 150, screenHeight)];
Run Code Online (Sandbox Code Playgroud)

但现在在子菜单上我正在尝试创建内容视图,这是一个UINavigationController.试着做同样的事情,我得到了这个结果:

在此输入图像描述

我在做什么(这次在子菜单视图控制器上创建框架):

CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width,
                            0,
                            [[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
                            [[UIScreen mainScreen] bounds].size.height);
Run Code Online (Sandbox Code Playgroud)

这是非常不言自明的,但我只是得到子菜单原点并添加其宽度,以便我可以获得正确的边缘坐标.

经过多次尝试,我设法让它工作,因为我注意到CGRectMake正在使用UINavigationController视图的中心来排列它的位置.所以下面的代码:

CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width + 259,
                            0,
                            [[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
                            [[UIScreen mainScreen] bounds].size.height);
Run Code Online (Sandbox Code Playgroud)

产生正确的位置.

这是怎么回事?我认为CGRectMake的起源始终是左上角,但在这个特别的观点实际上是中上(或中间 - 中间,不确定.)我做错了什么?

EDIT1:

这是具有正确位置的框架的控制台输出:

在此输入图像描述

请注意导航栏现在如何定位:

在此输入图像描述

但是x-coord不是250(因为它应该是,因为menu.width + sub-menu.width = 250.)

EDIT2:

我最终放弃了.问题在于自动生成的UINavigationBar,它是由UINavigationViewController创建的.我似乎无法弄清楚如何配置它.如果有人知道答案,我会打开这个问题.

uch*_*aka 11

a的中心CGRectCGPointorigin.x + ( size.width / 2 )和创建的origin.y + ( size.height / 2 ).

  • 您不必手动计算,在[CGGeometry.h]中定义了名为`CGRectGetMidX`和`CGRectGetMidY`的方法(https://developer.apple.com/library/ios/documentation/graphicsimaging/reference/CGGeometry /Reference/reference.html#//apple_ref/c/func/CGRectGetMidX) (11认同)

You*_*nzr 5

UIButton* btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 70, 70)];
btn.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
Run Code Online (Sandbox Code Playgroud)

无论设备是什么,这都会使按钮位于中心

  • 我想你的意思是第二行中的“btn.center”。 (2认同)

Ale*_*ien 1

CGRectMake 只是创建一个 (x,y, witdh, height) 的结构。
设置正确的值是您的责任。