我找到了我认为是解决方案的开端。看起来,你和我看到的坐标是基于左下角或右上角,具体取决于UIInterfaceOrientationLandscapeRight或UIInterfaceOrientationLandscapeLeft的方向。
我还不知道原因,但希望这有所帮助。 :)
[更新]
所以我猜在正常竖屏模式下窗口的原点是0,0,并随着iPad/iPhone旋转。
因此,这是我如何解决这个问题的步骤。
首先,我获取我的方向、窗口边界和视图在窗口中(带有奇怪的坐标)的矩形区域。
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]
CGRect windowRect = appDelegate.window.bounds
CGRect viewRectAbsolute = [self.guestEntryTableView convertRect:self.guestEntryTableView.bounds toView:nil]
如果方向是横向的,我会反转x和y坐标以及宽度和高度。
if (UIInterfaceOrientationLandscapeLeft == orientation ||UIInterfaceOrientationLandscapeRight == orientation ) {
windowRect = XYWidthHeightRectSwap(windowRect);
viewRectAbsolute = XYWidthHeightRectSwap(viewRectAbsolute);
}
然后我调用我的函数来修复原点,使其基于左上角,无论iPad/iPhone的旋转如何。
它根据当前0,0所在的位置(取决于方向)来修复原点。
viewRectAbsolute = FixOriginRotation(viewRectAbsolute, orientation, windowRect.size.width, windowRect.size.height)
这里是我使用的两个函数。
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;
}