我發現我認爲是解決方案的開始。看起來您和我看到的座標是基於左下角還是右上角,取決於方向是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;
}
我看到了同樣的問題。有時它正確地計算座標,有時它不會。 – 2011-07-19 06:22:36