4

这是我想要完成的事情:我正在开发一个开源 TI 计算器模拟器,我目前正在尝试添加皮肤支持。皮肤图像只是一个 NSImageView,其图像设置为皮肤图像。我重写 mouseDown: 方法并使用 convertPointFromBase: 以 locationInWindow 返回值作为转换点来获取鼠标在 NSImageView 坐标中的位置。

然后,我使用 bestRepresentationForDevice: 从 NSImageView 获取底层 NSBitmapImageRep,并带有一个 nil 参数。最后,我在 NSBitmapImageRep 上调用 getPixel:atX:y 并使用 point.x 和 point.y 作为位置。

但是,NSImageView 的原点从左下角开始(像往常一样),而 NSBitmapImageRep 的坐标从左上角开始。我似乎找不到一种明显的方法来弥补这一点,因此按钮点击的命中测试无法正常工作。任何帮助是极大的赞赏。

4

2 回答 2

1

我从未考虑在我的 NSImageView 子类中覆盖 isFlipped 以返回 YES。这可以解决问题。

于 2010-01-22T04:48:22.990 回答
0

对我来说似乎很容易,只需根据矩形的高度计算 y 坐标:

NSPoint pointInFlippedRect(NSPoint inPoint, NSRect aRect)
{
    return NSMakePoint(inPoint.x , NSHeight(aRect) - inPoint.y);
}
于 2010-01-22T04:34:36.717 回答