假設我有一個浮動的無邊界圓形NSWindow
。根據點擊位置放棄NSWindow上的鼠標事件
它是循環的,因爲內容視圖只是繪製一個紅色圓圈。
該內容視圖需要分層支持([contentView setWantsLayer:YES]
),因爲我正在對其應用CoreAnimations,例如動畫縮放。
通常,NSWindow的可點擊區域由內容視圖像素的透明度來定義。但是,一旦NSWindow的內容視圖變成了分層支持,不幸的是,透明區域也會收到點擊。
在我的情況下,這是一個嚴重的問題,因爲我只想在半徑內接收點擊。但是現在,在窗口矩形內單擊,但超出圓弧半徑,將激活窗口(從而激活整個應用程序),但不應該這樣做。此外,該窗口可通過其內容視圖的角落拖動。
我最初的想法是實現在子類中[NSWindow sendEvent:]
並查看點擊是否半徑內執行,使用[theEvent locationInWindow]
。我想我可以簡單地放棄這個事件,如果它超出了半徑範圍,那麼不要致電[super sendEvent:theEvent]
。然而這並沒有奏效:我注意到,mouseDown:;窗口方法甚至在sendEvent之前被調用:;方法。
我搜索了很多,但我發現的唯一想法是在窗口頂部有一個非層支持NSWindow的代理,它有條件地委託點擊,但這導致了不可預測的UI行爲。
你們有什麼想法,如何解決它?
您是否嘗試過在應用程序級別通過繼承'NSApplication'並實現'-sendEvent:'重寫來攔截事件? – indragie
我剛剛測試過,沒有成功。即使我試圖通過從不調用NSApplication子類中的''super sendEvent:'''拋棄任何**事件,窗口一直通過拖動鼠標來移動。另外,覆蓋'''[NSApplication postEvent:]'''不起作用。 – Raffael