0

我有一个窗口,里面有两个视图:

大部分窗口被 PRH Movie View 占据,而窗口底部的 20 个点属于 PRH Controller View。

电影视图和控制器视图都覆盖mouseDown:and mouseUp:,用于不同的目的(电影视图有一个目标和动作,并作为一个按钮做出反应,而控制器寻求并支持拖动)。

扭曲的是,当我在电影视图中单击时(如屏幕截图所示,它通常足够大,以至于错过它并击中控制器视图而不是极不可能)mouseDown:mouseUp:消息被发送到控制器视图!电影视图永远不会收到任何消息。

我没有hitTest:在电影视图或其父视图(这是一个普通的 NSView)中覆盖,仅在控制器视图中(原因与我在该视图上的跟踪区域有关 - 我的实现只是返回self,即控制器视图)。

那么,什么给了?

4

1 回答 1

0

好吧,你可能猜到了:这是我hitTest:在控制器视图中的实现。

事实证明,它hitTest:不仅发送到鼠标位置所在帧的视图;它被发送到窗口中的每个视图,甚至在单击的任一端都不靠近鼠标的视图。

因此,在覆盖 时hitTest:,请确保您验证该点实际上在您自己内部。最简单的方法是发送[super hitTest:thePoint]并且仅在结果不是时才进行自定义命中测试nil。(除非您窃取窗口中其他视图的点击次数。)

于 2013-02-21T06:41:14.420 回答