gpt4 book ai didi

cocoa - 为什么 NSView 的框架方法返回错误的结果?

转载 作者:行者123 更新时间:2023-12-03 16:16:05 24 4
gpt4 key购买 nike

我偶尔想以编程方式更改 NSView 的尺寸。为此,获取各种 View 的尺寸,调整它们之间的相对位置,然后使用 setFrame: 重新定位会很有帮助。

问题在于,从我的角度来看,frame 方法通常返回明显错误的 NSRect。

我有一个在 Interface Builder 中设置了 NSPanel 的程序以及与我的主程序的各种连接。为了测试框架返回的 NSRect,我在应用程序的 awakeFromNib: 方法中打开面板,检索一些 NSRect,并将它们打印到控制台。

这是我的 awakeFromNib:

- (void)awakeFromNib {
NSLog(@"in awakeFromNib");
[self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
//note that it does indeed pop up and is displayed
originalFrame = [aTextView frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
originalFrame = [aButton frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
return;
}

此代码的结果在控制台中如下所示:

in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344

请注意 (i) 面板和两个控件均显示在屏幕上; (ii) 我确实知道 socket 已正确连接,因为我可以通过编程方式对控件进行操作并让它们工作; (iii) 界面构建器在检查器中的“大小和位置”下显示正确的帧大小。

简而言之,该程序的其他一切都运行良好。实际上似乎框架尺寸设置不正确或其他什么。

有人可以告诉我如何检索真实帧信息吗?或者至少解释一下我看到的结果?

最佳答案

框架坐标是 float ,但您的日志消息使用的是 %d。 (整数)。

将 NSLog 字符串更改为:

@"the frame is %f, %f, %f, %f"

编辑:

这是我在调试矩形时使用的一个非常有用的宏:

#define RECTLOG(rect)    (NSLog(@""  #rect @" x:%f y:%f w:%f h:%f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height ));

然后你可以做简单的矩形日志:

RECTLOG([aTextView frame]);

关于cocoa - 为什么 NSView 的框架方法返回错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127479/

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