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?
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
YESfrom the-isFlippedmethod 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.