假设我有一个浮动的、无边界的圆形NSWindow
.
它是圆形的,因为内容视图只是简单地绘制了一个红色圆圈。
该内容视图需要有图层支持 ( [contentView setWantsLayer:YES]
),因为我在其上应用了CoreAnimations,例如动画缩放。
通常,NSWindow 的可点击区域由内容视图的像素透明度定义。然而,不幸的是,一旦 NSWindow 的内容视图变为 layer-backed,透明区域也会收到点击。
就我而言,这是一个严重的问题,因为我只想接收半径范围内的点击。但是现在,在窗口的矩形内点击,但超出圆半径,将激活窗口(因此,整个应用程序),这是不应该的。窗口也可以通过其内容视图的一角拖动。
我最初的想法是[NSWindow sendEvent:]
在子类中实现并检查是否在半径内执行了点击,使用[theEvent locationInWindow]
. 我想我可以简单地丢弃该事件,如果它超出了半径,[super sendEvent:theEvent]
那么不调用。然而这并没有奏效:我注意到,mouseDown:; window 方法甚至在 sendEvent 之前被调用:;方法。
我搜索了很多,但我发现的唯一想法是在窗口顶部有一个像非层支持的 NSWindow 这样的代理,它有条件地委托点击,但这会导致不可预测的 UI 行为。
各位大佬有什么思路,怎么解决?