加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 可可窗位置异常

发布时间:2020-12-16 05:29:02 所属栏目:百科 来源:网络整理
导读:我有一个奇怪的问题,在屏幕上定位一个窗口.我想把窗口对准在屏幕上,但我不知道该怎么做.这是我有的窗口由主控制器从nib创建: IdentFormController *ftf = [[IdentFormController alloc] initWithWindowNibName:@"IdentForm"];[[ftf window] makeKeyAndOrder
我有一个奇怪的问题,在屏幕上定位一个窗口.我想把窗口对准在屏幕上,但我不知道该怎么做.这是我有的窗口由主控制器从nib创建:
IdentFormController *ftf = [[IdentFormController alloc] initWithWindowNibName:@"IdentForm"];
[[ftf window] makeKeyAndOrderFront:self];

现在,IdentFormController具有awakeFromNib()方法,它将尝试定位窗口.为了简单起见,我刚刚尝试做setFrameOrigin(NSMakePoint(0,0)).发生的情况如下:

我第一次创建这个窗口,一切都按预期工作.但是如果我在释放之前再次创建它,它就会随机出现.为什么这么做?

解决方法

所以据我所知,你想把窗口中心在屏幕上?

假设NSWindow *窗口是您的窗口对象,那么有两种方法…

[window center];

这是最好的方法,但它会考虑到视觉重量和Dock的存在.

如果你想要死中心,那么这将工作…

// Calculate the actual center
CGFloat x = (window.screen.frame.size.width - window.frame.size.width) / 2;
CGFloat y = (window.screen.frame.size.height - window.frame.size.height) / 2;

// Create a rect to send to the window
NSRect newFrame = NSMakeRect(x,y,window.frame.size.width,window.frame.size.height);

// Send message to the window to resize/relocate
[window setFrame:newFrame display:YES animate:NO];

这段代码是未经测试的,但是它给出了一个公平的想法,你需要做什么来让这个东西按照你想要的方式工作,我个人建议你坚持使用苹果的代码,因为它已被测试,是用户期望看到的,从设计的角度来看,作为设计师,我的自我并不总是依靠实际的中心来到光学中心的地方.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读