问题是,从我的角度来看,frame方法通常会返回明显错误的NSRects.
我有一个程序,在Interface Builder中设置了NSPanel,并与我的主程序有各种连接.为了测试框架返回的NSRects,我在应用程序的awakeFromNib:方法中打开了面板,检索了一些NSRects,并将它们打印到控制台.
这是我的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",originalFrame.origin.x,originalFrame.origin.y,originalFrame.size.wIDth,originalFrame.size.height); originalFrame = [abutton frame]; NSLog(@"the frame is %d,originalFrame.size.height); return; }
此代码的结果在控制台中如下所示:
in awakeFromNibthe frame is 0,0the frame is 0,1079230464,1078329344
请注意,(i)面板和两个控件都显示在屏幕上; (ii)我知道这些插座是正确连接的,因为我可以通过编程方式对控件进行 *** 作并让它们工作; (iii)界面构建器在“尺寸和位置”下的检查器中显示正确的框架尺寸.
简而言之,该计划的其他一切工作正常.实际上,框架尺寸似乎没有正确设置.
有人能告诉我如何检索真实的帧信息吗?或者至少解释我看到的结果?
解决方法 帧坐标是浮点数,但您的日志消息使用%d. (整数).将NSLog字符串更改为:
@"the frame is %f,%f,%f"
编辑:
这是调试rects时使用的一个非常有用的宏:
#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 ));
然后,您可以执行简单的rect日志:
RECTLOG([aTextVIEw frame]);总结
以上是内存溢出为你收集整理的cocoa – 为什么NSView的frame方法返回错误的结果?全部内容,希望文章能够帮你解决cocoa – 为什么NSView的frame方法返回错误的结果?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)