工具欄翻轉的圖像(新建自 2009年1月種子)
一個常見但不正確的做法是 呼叫setFlipped:YES
是 您打算繪製圖像成翻轉的 圖形上下文。這是不正確的 ,因爲如果圖像稍後繪製爲 到正常的未翻轉上下文中,則圖像將顛倒顯示。 但是,Leopard和更早版本包含 的一個bug,其中 NSToolbarItem
(通過setImage:
)設置的圖像 將忽略它們的isFlipped
屬性。 SnowLeopard修復了在SnowLeopard上使用10.6 SDK編譯的應用程序 的此bug;因此,當您的 應用程序重新編譯時,一些 應該在 Leopard中顛倒過來的圖像將開始這樣做。
如果你重新編譯的 雪豹應用程序,並發現你 工具欄項的圖像繪製顛倒 下降,則表明你是 調用setFlipped:YES
地方 你的代碼中。您應該刪除 這些呼叫,並用正確處理翻轉的上下文的方法替換圖片 。關於setFlipped:
的 討論請參見這些 發行說明以獲取更多討論。
NSImage中:貶低 - [NSImage中 setFlipped:],加入描繪方法 尊重上下文flippedness(新澤西 自2008年WWDC)
的翻轉NSImage
的屬性是 被廣泛誤解。我們 不贊成使用SnowLeopard,而 用更少的 替代它的典型用途,容易出錯的API。
該屬性描述內部座標系 NSImage
的方向 。正如上海華 從來不計較的 其子視圖的flippedness,一個NSImage
的用戶應該不會在意它的flippedness。
典型的(有缺陷)的使用情況是 嘗試調用[image setFlipped:[[NSGraphicsContext currentContext] isFlipped]]
前夕 圖紙,但這並不 完成預期目標。如果緩存之前稱之爲 ,然後 交涉最終倒掛緩存下來 和翻蓋被吸收到 緩存。如果在緩存之後調用,則它不起作用 - 已緩存的 表示已被假設爲包含任何必要的翻轉。 在前一種情況下,如果NSImage
是 繪製其他地方後,它結束了 在是地方,這是 也令人困惑,因爲這個錯誤和錯誤的 表達相距甚遠倒掛。 缺乏有關 flippedness理解也頻繁的執行代碼不佳,在 人們作無謂的 中間緩衝器來解決 感知框架錯誤的 源。 框架根據設計行爲, 但與預期相反,並且 語義不是所有有用的。 這也是難以改變的-[NSImage isFlipped]
, 的 語義,因爲大量的代碼是非常密切 依賴於當前的行爲。 而不是嘗試此操作,我們已棄用該屬性 。
我們提供了一個簡單而正確的 方式繪製的翻轉或 unflipped背景下,這是一個平局 方法,可以考慮上下文 flippedness圖像。我們還在-bestRepresentationForRect:context:hints:
中添加了一個匹配提示的 提示參數。
- (void)drawInRect:(NSRect)dstRect fromRect:(NSRect)srcRect operation:(NSCompositingOperation)op fraction:(CGFloat)alpha respectFlipped:(BOOL)respectContextIsFlipped hints:(NSDictionary *)hints;
通YES
爲respectFlipped
得到新奇的行爲。一個 注意那些瞭解CTM ,並擔心這種方法有一個奇怪的 交互,其中修改CTM 可能無法對圖像產生影響 繪圖:情況並非如此。此 方法根據 [[NSGraphicsContext currentContext] isFlipped]
分支行爲。修改CTM可能 把你的軸倒掛,但 不會改變的 -[NSGraphicsContext isFlipped]
結果。它們完全正交。
的-[NSImage setFlipped:]
第二有效用途是指定 flippedness經由-[NSImage lockFocus]
獲得 上下文。有 的情況下,例如通過NSLayoutManager
直接 ,需要翻轉上下文 。爲了彌補這種情況下,我們 添加
- (void)lockFocusFlipped:(BOOL)flipped;
這不會改變對 的 圖像本身,只有上下文的狀態,這會鎖定對焦。這意味着 (0,0)位於左上方,沿着Y軸的正值 在鎖定的 上下文中向下。
我的代碼中沒有任何地方使用了setFlipped,所以這肯定是某種奇怪的錯誤,但是明確地設置Images不會被翻轉就是一個竅門。什麼可能導致什麼?另外,我只注意到在NIB中發生了這種情況,我存儲了這組特定的窗口。另一個NIB中的主窗口未受此影響。 – 2011-01-21 05:15:09
您可以在 - [NSImage setFlipped:]上設置一個符號斷點並查看它何時發生變化。 – 2011-01-21 07:25:18