que he encontrado lo que creo que es el comienzo de la solución. Parece que las coordenadas que usted y yo estamos viendo se basan en la esquina inferior izquierda o superior derecha, según si la orientación es UIInterfaceOrientationLandscapeRight o UIInterfaceOrientationLandscapeLeft.
No sé por qué, pero espero que ayude. :)
[ACTUALIZACIÓN] Así que supongo que el origen de la ventana es 0,0 en modo retrato normal, y gira con el ipad/iphone.
Así que aquí es cómo lo resolvió.
En primer lugar me agarra mi orientación, límites de la ventana y de la rect de mi punto de vista dentro de la ventana (con las coordenadas torcidas)
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
CGRect windowRect = appDelegate.window.bounds;
CGRect viewRectAbsolute = [self.guestEntryTableView convertRect:self.guestEntryTableView.bounds toView:nil];
Entonces, si la orientación es horizontal, invierto las coordenadas X e Y y el anchura y altura
if (UIInterfaceOrientationLandscapeLeft == orientation ||UIInterfaceOrientationLandscapeRight == orientation) {
windowRect = XYWidthHeightRectSwap(windowRect);
viewRectAbsolute = XYWidthHeightRectSwap(viewRectAbsolute);
}
Entonces llamo a mi función para fijar el origen de basarse en la parte superior izquierda, sin importar el giro de la ipad/iphone. Se fija el origen dependiendo de donde vive actualmente 0,0 (dependiendo de la orientación)
viewRectAbsolute = FixOriginRotation(viewRectAbsolute, orientation, windowRect.size.width, windowRect.size.height);
Estas son las dos funciones que utilizo
CGRect XYWidthHeightRectSwap(CGRect rect) {
CGRect newRect;
newRect.origin.x = rect.origin.y;
newRect.origin.y = rect.origin.x;
newRect.size.width = rect.size.height;
newRect.size.height = rect.size.width;
return newRect;
}
CGRect FixOriginRotation(CGRect rect, UIInterfaceOrientation orientation, int parentWidth, int parentHeight) {
CGRect newRect;
switch(orientation)
{
case UIInterfaceOrientationLandscapeLeft:
newRect = CGRectMake(parentWidth - (rect.size.width + rect.origin.x), rect.origin.y, rect.size.width, rect.size.height);
break;
case UIInterfaceOrientationLandscapeRight:
newRect = CGRectMake(rect.origin.x, parentHeight - (rect.size.height + rect.origin.y), rect.size.width, rect.size.height);
break;
case UIInterfaceOrientationPortrait:
newRect = rect;
break;
case UIInterfaceOrientationPortraitUpsideDown:
newRect = CGRectMake(parentWidth - (rect.size.width + rect.origin.x), parentHeight - (rect.size.height + rect.origin.y), rect.size.width, rect.size.height);
break;
}
return newRect;
}
Estoy viendo el mismo problema. A veces calcula correctamente las coordenadas, a veces no lo hace. –