objective-c - NSRect 的鼠标事件

标签 objective-c xcode cocoa

我有一个 NSEvent 并想检测何时单击一个矩形,所以这是我的代码:

- (void)mouseDown:(NSEvent *)event;
{
    NSPoint clickedPoint = [event locationInWindow];
    //perform code for clickedPoint    
}

如何不使用 locationInWindow 将矩形或 View 转换为 NSPoint,以便它检查我是否单击了该矩形?谢谢!

最佳答案

首先,考虑您是否真的想要覆盖 mouseDown: 或者覆盖 mouseUp: 是否是更好的选择。如果此单击类似于单击按钮,则通常最好重写 mouseUp: 而不是 mouseDown:,如 mouseUp:将允许用户通过在放开鼠标之前将鼠标拖出按钮的矩形来“改变主意”。

NSEventlocationInWindow 给出了事件在基本窗口坐标中的位置。要将该位置转换为 View 的本地坐标系,您可以使用 NSView 的 convertPoint:fromView:就像下面这样:

- (void)mouseDown:(NSEvent *)event {
  NSPoint eventLocation = [event locationInWindow];
  NSPoint location = [self convertPoint:eventLocation fromView:nil];
  // handle the logic of what to do given the point
}

参见Cocoa Event-Handling Guide: Getting the Location of an Event了解更多信息。

关于objective-c - NSRect 的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059677/

相关文章:

ios - “Unrecognized selector sent to instance” swift

objective-c - iOS5.1 : synchronising tasks (wait for a completion)

objective-c - 在应用程序内播放音乐

iphone - 在核心数据中保存一对多关系时出现问题

ios - 库搜索零件的顺序取决于构建类型

objective-c - 为什么 id 是通用指针?

objective-c - OS X 在正则表达式中使用星号

ios - 如何快速处理推送通知?

iphone - NSMutableString 和 NSString 的类别导致绑定(bind)困惑?

javascript - 通过 HTML5/JS/PhoneGap 使用带小数点的数字键盘