diogocarmo
diogocarmo

Reputation: 970

CGRect positioning according to center point

I'm trying to create multiple views for an iPad app. First I created a menu view and then a sub-menu view with coordinates according to menu. So it looks like this:

enter image description here

What I did:

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

But now on sub-menu I'm trying to create the content view, which is a UINavigationController. Trying to do the same thing, I get this result:

enter image description here

What I'm doing (this time creating the frame on sub-menu view controller):

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);

It's pretty self-explanatory but, I just get the sub-menu origin and add its width so I can get the right edge coordinate.

After a lot of attempts I managed to get it working, because I noticed that the CGRectMake is using the center of the UINavigationController view to arrange its position. So the following code:

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);

Yields the right position.

What's going on? I thought CGRectMake origin would always be top-left, but on this particularly view is actually top-middle (or middle-middle, not sure.) What am I doing wrong?

EDIT1:

Here's the console output for the frame with right position:

enter image description here

Notice how the nav bar is now positioned right:

enter image description here

But the x-coord is not 250 (as it should be, because menu.width + sub-menu.width = 250.)

EDIT2:

I eventually gave up. The problem was with the automatically generated UINavigationBar, which is created by the UINavigationViewController. I can't seem to figure out how to configure it. I'm gonna leave the question open in case someone knows the answer.

Upvotes: 6

Views: 26858

Answers (4)

Fattie
Fattie

Reputation: 12287

thing.center = CGPoint(x: bounds.midX, y: bounds.midY)

It's that simple.

Upvotes: -1

uchuugaka
uchuugaka

Reputation: 12782

Center of a CGRect is a CGPoint created from the origin.x + ( size.width / 2 ) and origin.y + ( size.height / 2 ).

Upvotes: 14

Youstanzr
Youstanzr

Reputation: 634

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);

This will make the button in the center no matter what the device is

Upvotes: 5

AlexWien
AlexWien

Reputation: 28767

CGRectMake just creates an stucture of (x,y, witdh, height).
It your part to set the correct values.

Upvotes: 1

Related Questions