我有一個NSView子類可以在其超級視圖中拖動。我通過在我的mouseDragged事件處理程序中調用NSView的setFrameOrigin和setFrameRotation方法來移動視圖。每次調用都會移動和旋轉視圖。當第一個NSView在第二個NSView上移動時,NSView會留下工件
我有一個超級視圖所包含的這些視圖的多個實例。我遇到的問題是,當一個視圖被拖拽到另一個視圖上時,它會在它正在遮擋的視圖上留下僞像。我在行動中記錄了a short video。不幸的是,由於視頻壓縮,這些工件並不是非常明顯。
我強烈懷疑這與同時平移和旋轉有關。 Quartz Debug顯示遮擋(或遮擋)視圖的矩形更新爲另一個視圖拖過它(video here);不知何故,這個矩形會被繪圖引擎錯誤地計算出來,所以應該重新繪製的視圖的一部分不是。
踢球者是我不知道如何解決這個問題。我找不到任何方法在文檔中手動指定更新矩形,我也不確定那是需要發生的。有任何想法嗎?謝謝!
這個解決方案對我很有吸引力,因爲我希望使用核心動畫來爲這些視圖所做的某些事情設置動畫效果(例如,當另一個視圖被拖動到同一個插槽中時,它會轉移出來)。可悲的是,簡單地給視圖一個層並不能解決問題(實際上繪製到該層可能會做到這一點)。如果我要使用CALayer而不是視圖,我將如何應對事件? CALayers不從NSRespnder繼承。 (對不起,我是Cocoa n00b,對Core Animation基本無能爲力。) – 2009-08-23 07:08:20
我的理解是,在某個級別上至少需要一個視圖,即使它是託管和控制整個圖層層次結構的單個視圖。在這種安排下,視圖將使用諸如hitTest之類的消息來處理事件,以確定用戶正在使用哪些層。 – 2009-08-23 09:56:43
原來我做錯了。一旦我調用適當的方法爲我的(程序創建的)視圖提供CALayer支持,工件就消失了。當然,我的定位和輪換被打破了,但這不是問題的關鍵。感謝您的建議! – 2009-08-23 23:17:50