2015-06-11 2 views
0

Я создал окно без заголовка каждого конкретногоПочему фоновый фон окна остается черным в полноэкранном режиме?

override func windowDidLoad() { 
    super.windowDidLoad() 
    self.window?.styleMask = NSBorderlessWindowMask 
    self.window?.movableByWindowBackground = true 
} 

Я дал canBecomeKeyWindow каждому конкретному

override var canBecomeKeyWindow:Bool 
{ 
    get{ 
     return true 
    } 

} 

Я изменил цвет фона зрения контейнера каждый конкретный

override func drawRect(dirtyRect: NSRect) { 
    super.drawRect(dirtyRect) 

    var viewcolor = NSColor.whiteColor() 
    viewcolor.setFill() 
    NSRectFill(dirtyRect) 


} 

И пользовательский вид добавляется в качестве представления в виде контейнера в этом контейнере, и я изменил цвет фона пользовательского вида на:

override func drawRect(dirtyRect: NSRect) { 
    super.drawRect(dirtyRect) 

    NSColor(SRGBRed: 0.8, green: 0.26, blue: 0.33, alpha:1.0).set() 
    NSRectFill(self.bounds) 
} 

Теперь, когда я делаю ToggleFullscreen как-

@IBAction func goFullScreen(sender: AnyObject) { 
    self.view.window?.toggleFullScreen(sender) 


} 

Вся область экрана не заполняется. За созданным окном пустой (черный) фон. Приложение должно заполнить пробел, в этом скриншоте не должно быть черного фона Full screen state

Как исправить это поведение. Спасибо за вашу помощь.

+0

Если вы не переключите окно в полноэкранный режим, можете ли вы изменить его размер настолько, насколько хотите? Я предполагаю, что у вас есть ограничения, ограничивающие размер окна, или вы установили «maxSize» или «contentMaxSize» окна. –

+0

Нет. У меня нет максимального размера или минимального размера для окна. Я также хотел бы добавить, что если я удаляю строку «self.window? .styleMask = NSBorderlessWindowMask», то переключатель отлично работает. Но тогда окно будет иметь заголовок, который я не хочу. – Abhishek

+0

Вы пробовали 'NSBorderlessWindowMask | NSResizableWindowMask'? –

ответ

1

Проблема в том, что ваше окно не изменяет размер. Установка styleMask на NSBorderlessWindowMask непреднамеренно удален NSResizableWindowMask.

Вы должны установить styleMask в NSBorderlessWindowMask | NSResizableWindowMask.

0

dirtyRect не всегда равен границам. Итак, в окне drawRect вместо этого вызывается NSRectFill(self.bounds). Заполнение операции не так сильно влияет на общую производительность чертежа.

Или вы можете пометить все окно как загрязненное с помощью setNeedsDisplay вызывать обработчик изменения размера и работать только с грязной областью.

Если вы знаете о возможной проблеме замедления производительности, вы можете отметить содержимое окна в виде слоя и установить цвет слоя на белый - это будет более эффективно (это также лучший вариант, если вы выполняете любую анимацию на это мнение).

Есть еще несколько техник, которые описывают яблоко в разделе Optimizing View Drawing, которые могут вам помочь.

+0

Изменение на self.bounds не помогает. Но спасибо за подсказку. – Abhishek

+0

Вы установили ограничения автоопределения в subview, чтобы выровнять его при изменении размера окна? –

+0

Добавлены ограничения в подзаголовке. См. Мой комментарий выше. «Я также хотел бы добавить, что если я удалю строку« self.window? .styleMask = NSBorderlessWindowMask, то переключатель отлично работает. Но тогда окно будет иметь заголовок, который я не хочу. »>> Есть идеи об этом? – Abhishek

Смежные вопросы