Я нашел то, что я считаю началом решения.Кажется, что координаты, которые мы с вами видим, основаны на нижнем левом или верхнем правом углу, в зависимости от того, является ли ориентация 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;
}