gpt4 book ai didi

iPhone 正确的横向窗口坐标

转载 作者:行者123 更新时间:2023-12-03 18:35:43 25 4
gpt4 key购买 nike

我正在尝试使用以下代码获取表格 View 的窗口坐标:

[self.tableView.superview ConvertRect:self.tableView.frame toView:nil]

它在纵向模式下报告正确的坐标,但是当我旋转到横向时,它不再报告正确的坐标。首先,它翻转 x、y 坐标以及宽度和高度。但这并不是真正的问题。真正的问题是坐标不正确。在纵向中,表格 View 框架的窗口坐标为 {{0, 114}, {320, 322}},而在横向中,窗口坐标为 {{32, 0}, {204, 480}}。显然这里的x值不正确,对吧?不应该是84吗?我正在寻找解决此问题的方法,如果有人知道如何在横向模式下获取 View 的正确窗口坐标,如果您愿意与我分享这些知识,我将不胜感激。

这里有一些屏幕截图,以便您可以看到 View 布局。

肖像:/image/IaKJc.png

风景:/image/JHUV6.png

最佳答案

我已经找到了我认为是解决方案的开端。看来您和我看到的坐标是基于左下角或右上角的,具体取决于方向是 UIInterfaceOrientationLandscapeRight 还是 UIInterfaceOrientationLandscapeLeft。

我还不知道为什么,但希望这会有所帮助。 :)

[更新]所以我猜窗口的原点在正常纵向模式下是0,0,并随着ipad/iphone旋转。

这就是我解决这个问题的方法。

首先,我捕获我的方向、窗口边界和窗口内 View 的矩形(带有不稳定的坐标)

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;
}

关于iPhone 正确的横向窗口坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com