Ios 带ChildWindow的NSWindow闪烁
我有一个主NSWindow和3个子NSWindow,如:Ios 带ChildWindow的NSWindow闪烁,ios,swift,xcode6,Ios,Swift,Xcode6,我有一个主NSWindow和3个子NSWindow,如: _______________________________________ | || || | | || || | | || || | | || || | | ||
_______________________________________
| || || |
| || || |
| || || |
| || || |
| || || |
| || || |
|_____||______________________||______|
我已经能够通过单击按钮来调整左、右子窗口的大小,其效果与Xcode侧栏几乎相同,但当我向子窗口添加内容时(例如,NSTableView)如果我关闭其中一个侧栏,在关闭后执行的任何调整大小操作都会出现闪烁和延迟效果。甚至主窗口的正常大小调整。你知道为什么会这样吗
代码1:侧边栏的删除操作
var newFrame: NSRect
if sender.selectedSegment == 0 { //leftToolbar button clicked
if leftToolbar.frame.width > 0 { //leftToolbar is closed
newFrame = self.leftToolbar.frame
newFrame.size.width = 0
self.leftToolbar.setFrame(newFrame, display: true, animate: true)
} else {
newFrame = self.leftToolbar.frame
newFrame.size.width = self.sidebarsWidth
self.leftToolbar.setFrame(newFrame, display: true, animate: true)
}
}
代码2:重新调整大小的通知
func windowResized(notification: NSNotification) {
var win = notification.object as NSWindow
// (...) code from main window resizing
if (win.isEqual(self.leftToolbar)) { // Resizing or Animation of the left sidebar
leftTable!.view.frame = (self.leftToolbar.contentView as NSView).frame
var newFrame = self.mainContent.frame
if self.leftToolbar.frame.width > 0 { // if the sidebar is open
newFrame.origin.x = self.mainWin.frame.origin.x+self.leftToolbar.frame.width+10.0
newFrame.origin.y = self.mainWin.frame.origin.y+5.0
if self.rightToolbar.frame.width > 0 { // if right sidebar is open
newFrame.size.width = self.mainWin.frame.width-10.0-10.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
} else {
newFrame.size.width = self.mainWin.frame.width-10.0-5.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
}
} else { // sidebar is now closed
newFrame.origin.x = self.mainWin.frame.origin.x+self.leftToolbar.frame.width+5.0
newFrame.origin.y = self.mainWin.frame.origin.y+5.0
if self.rightToolbar.frame.width > 0 { // if right sidebar is open
newFrame.size.width = self.mainWin.frame.width-5.0-10.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
} else {
newFrame.size.width = self.mainWin.frame.width-5.0-5.0-self.leftToolbar.frame.width-self.rightToolbar.frame.width
}
}
self.mainContent.setFrame(newFrame, display: true) // set the mid (child) window to occupy the space inherited from the left sidebar
}
// (...) Code from right sidebar resizing
}
注1:这是我的代码,由我开发,不是从某处复制的
注2:您可以考虑调整大小,因为它们被测试和工作。正如上面所解释的,当使用内容时,它们只会闪烁。必须解决这个问题。将子窗口设置为0宽度的框架、获取内存转储或类似内容时,将子窗口设置为1宽度并“隐藏”它们是正确的解决方案