2
votes

I have some code that looks like this in my GLKViewController subclass:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    NSLog(@"touch has begun!: %f %f",point.x,point.y);
    float xw = [self.view bounds].size.width;
    float yw = [self.view bounds].size.height;
    NSLog(@"touch -- %f %f", point.x / xw, point.y / yw);
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return UIInterfaceOrientationLandscapeRight == toInterfaceOrientation;
}

Furthermore I have set my only supported device orientation to be "Landscape Right" in the "iPhone/iPod Deployment Info".

From testing by running with the above code it appears as though the upper left corner is (0,0). However, I had another test project similar to this one in which the (0,0) point was at the bottom left corner.

Exactly what determines the orientation of the coordinate system? If I wanted my (0,0) point to be the bottom left corner instead of the upper left corner, how would I do it?

1

1 Answers

2
votes

On iOS, the corner at (0,0) - called the origin - should always be in the upper left corner. I don't know that there's a convenient way to change it, other than perhaps to subclass UIView and handle all the various arithmetic - calculating your bounds/frame, laying out your subviews, and drawing your content - yourself.

On the Mac, the origin is slightly different: it is in the bottom left by default. However, you can subclass NSView and return YES from the -isFlipped method to indicate to the view hierarchy that you expect your coordinates to behave like iOS, with the origin in the upper left.

I don't know of any easy way you could accidentally see an origin at the bottom left on iOS. If you post some code from that other test project, I can expand this answer to address it.