簡體   English   中英

NSView 上的 SetNeedsDisplay 觸發整個視圖層次結構的重繪

[英]SetNeedsDisplay on NSView triggers the redrawing of the whole views hierarchy

我正在開發一個由 NSWindow 制作的應用程序,它擁有很多自定義子視圖,可能不透明。 每當我在子視圖上調用 SetNeedsDisplay: 或 SetNeedsDisplayInRect: 時,系統都會從父 NSWindows 的內容視圖開始調用每個子視圖的 drawRect。

如何避免? 我怎樣才能只重繪臟子視圖(它應該是默認行為)? 在繼承 NSView 時,我可能缺少什么東西嗎? 還是在設置父 NSWindow 的屬性或樣式?

謝謝

可能不透明的問題是一些麻煩。 任何非透明視圖都會觸發整個視圖層次結構的重繪,因為 window 必須將該視圖背景恢復為原始 state。 只有設置為不透明的視圖可能不需要重繪它們下面的任何其他內容。 但是,如果不透明視圖本身被其他視圖部分覆蓋,它們可能仍會觸發“上方”重繪。

好吧,我想我已經想通了。 似乎將所有子視圖轉換為支持層的視圖就可以了。 考慮到 gpu 管理層的方式以及如何執行層合成,這是合理的。 但是我仍然不明白為什么,使用“經典” NSViews,無論它們是否不透明,兄弟姐妹或孩子,重疊與否,如果沒有系統調用重新繪制整個視圖,我都無法使單個視圖無效window 的視圖層次結構

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM