gpt4 book ai didi

objective-c - 无法从 -mouseDown :event 获取有用的位置

转载 作者:行者123 更新时间:2023-12-03 17:30:50 27 4
gpt4 key购买 nike

完全重写

我现在重现了我之前在一个简单的示例项目中发布的问题,因此我完全知道我可能做错了什么。这就是我现在正在做的事情。

  1. 创建一个新的普通 Cocoa 应用程序(无核心数据,不基于文档)
  2. 添加一个名为“MyImageView.m”的类,无标题
  3. 将 MyImageView.m 的内容替换为:

    @interface MyImageView :NSImageView {} @end


    @implementation MyImageView
    - (void)mouseDown:(NSEvent *)event {
    NSLog( @"mouse down event: %@", event );
    NSPoint point = [event locationInWindow];
    NSLog( @"mouseDown location: (%d,%d)", point.x, point.y );
    }
    @end
  4. 在 Interface Builder 中打开 MainMenu.xib

  5. 将图像拖到窗口上
  6. 将其类更改为 MyImageView
  7. 保存所有内容并运行
  8. 单击图像井上的任意位置

然后我在控制台上看到以下消息:

2011-01-01 13:58:12.351 TestApp[1167:903] 鼠标按下事件: NSEvent: type=LMouseDown loc=(237,242) time=2033.7 flags=0x100 win=0x0 winNum=573 ctxt= 0x0 evNum=286 点击=1 按钮编号=0 压力=1

2011-01-01 13:58:12.353 TestApp[1167:903] mouseDown 位置:(-2057547688,16)

为什么 NSEvent 的字符串表示中的“loc”是正确的,但 -locationInWindow 却明显错误?我能做什么会导致如此微不足道的代码出错?

我已经重新启动了系统,以防有帮助。

最佳答案

NSPoint 的两个元素是 float ,因此错误的是您的 NSLog 语句,而不是返回的值。您需要确保格式字符串中的类型与变量的类型匹配,您可以使用强制转换来实现这一点:

这会起作用:

NSLog( @"mouseDown location: (%d,%d)", (int) point.x, (int) point.y );

就像这样:

NSLog( @"mouseDown location: (%f,%f)", (float) point.x, (float) point.y );

NSPoint 包含 32 位还是 64 位浮点因操作系统版本和系统而异。可能值得使用内置的点到字符串函数:

NSLog( @"mouseDown location: %@", NSStringFromPoint(point) );

(请注意,当实际进行数学和比较时,无需插入强制转换即可自动正常工作。只有 NSLog 需要帮助才能正确完成此操作。)

关于objective-c - 无法从 -mouseDown :event 获取有用的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com