将 NSPoint 从窗口坐标转换为视图坐标

2024-06-22

我的应用程序有一个自定义视图,显示事件的时间线。该视图包含在NSScrollView支持时间线的水平滚动。使用通知,我实现了一种机制,该机制应该显示另一个自定义视图,当用户在时间线中单击该事件时,该视图会显示有关该事件的详细信息。下面是时间线接收到事件时处理该事件的代码:

NSEvent *anEvent = [aNotification object];
NSPoint aLocationInSelf = [self convertPoint: [anEvent locationInWindow] toView: self];

// Create callout view and display
NSRect aRect = NSMakeRect(aLocationInSelf.x, aLocationInSelf.y, 300, 200);
TimelineCallout *aCallout = [[TimelineCallout alloc] initWithFrame: aRect];
[self addSubview: aCallout];

在上面的代码中,我将事件注册的鼠标单击点从窗口坐标转换为视图(时间线)坐标。

但是,当我使用调试器单步执行此操作时,没有发生转换并且locationInSelf显示与我得到的点相同的坐标[anEvent locationInWindow]。结果,标注绘制在错误的位置或根本不可见。

我一定做错了什么,但我不知道是什么......


为了从窗口坐标转换为视图坐标,您必须使用:

NSPoint aLocationInSelf = [self convertPoint: [anEvent locationInWindow] fromView: nil];

由于事件不是源自特定视图,因此这将从窗口基坐标转换为接收器坐标。

欲了解更多信息,请参阅文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html.

更详细的解释:

转换方法有点难以理解。一般情况主要有两种(其他都是变种):

  1. 当点位于同一窗口中时,将点从一个视图转换为另一个视图
  2. 将窗口坐标表示的点转换为视图坐标

对于第一种情况,同一窗口中有两个视图(view1 和 view2)。如果要将 view2 中的点转换为 view1 的坐标系,代码将是:

NSPoint pointInView1 = [view1 convertPoint:pointInView2 fromView:view2];

对于第二种情况,您有一个以窗口坐标表示的点(来自事件)。由于该点以窗口坐标表示,因此您无需指定“来自”视图,代码将是:

NSPoint pointInView1 = [view1 convertPoint:pointInWindow fromView:nil];

这是该方法的后备行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 NSPoint 从窗口坐标转换为视图坐标 的相关文章

随机推荐

  • 在解决承诺之前已提交指令

    我在获取指令时遇到问题 仅在我的承诺得到解决后才呈现其内容 我想then 本来应该这样做 但它似乎不起作用 这是我的控制器 Generated by CoffeeScript 1 6 3 function var sprangularCon
  • 等待 Promise 和嵌套 then 完成

    我从这样的函数返回一个承诺 resultPromise dgps utils save opportunity api Opportunity Save opportunity dirtyFlag then function self ch
  • 回滚事务与 LINQ to SQL 有何关系?

    问题只是关于回滚更改 而不是提交 假设我获取一些数据 更改它们 提交更改 可选步骤 并回滚事务 无论您在哪里查看每个作者的写作 都会取消更改 但我发现这句话只对了一半 LINQ DataContext 将保留更改后的数据 我使用 Trans
  • 在 Selenium Webdriver 中何时使用显式等待与隐式等待?

    我在用 driver manage timeouts implicitlyWait 180 TimeUnit SECONDS 但对于以下元素它仍然连续失败 driver findElement By id name clear driver
  • C 中的 malloc 可以有多大?

    我在 C 中有一个 malloc 它是 26901 2 sizeof double 这让我思考这里的最大价值是多少 另外 定义宏来访问这个二维数组时会遇到任何问题吗 define DN i j int i ny int j 因为这似乎对我不
  • 如何为 PostgreSQL 构建系统

    为 MS SQL Server 构建系统很简单 cmd sqlcmd S i file selector source sql shell true 对于 PostgreSQL 我尝试了这个 env PGPASSWORD password
  • 需要重写的虚拟函数来调用基本实现

    在 C 类层次结构中 是否可以强制要求特定虚拟函数也始终调用其基类的实现 就像构造函数链的方式一样 我正在研究一种情况 其中深层类层次结构具有一些每个子级都会重写的通用接口函数 我希望每个派生类的重写都链接到基类 明确地执行此操作很简单eg
  • NSCondition 是如何工作的?

    我在这个意义上使用 NSCondition 类 void method1 cocoaCondition lock lock while someCheckIsTrue cocoaCondition wait Do something coc
  • 对于同一文件描述符,可以从两个线程并行调用 fwrite 和 fclose 吗?

    如果会发生什么fwrite fclose从两个线程并行调用同一文件描述符 POSIX 要求FILE访问是线程安全的 但是因为fclose关闭文件并使指针无效 没有办法使用 即 这不仅仅是一个规范问题 而且是一个永远无法 修复 或消失的基本
  • 多行 overrideValues Helm 安装 Azure DevOps

    是否可以指定要在 Azure devOps 管道中的 HelmDeploy 任务中覆盖的值 例如 类似下面的任务 显然不完全按原样工作 task HelmDeploy 0 displayName helm install inputs co
  • 如果断言失败则停止测试

    我有一个简单的赛普拉斯测试 describe My First Test gt it Go to login page gt cy visit http localhost 3000 cy contains Log in click it
  • 在 AngularJS 中从 Firebase 实时更新信息

    我使用 Angular JS 从 Firebase 制作了一个显示信息的应用程序 目前 刷新页面后信息会更新 但我想实时更新我的 信息 这是我的角度代码 var root angular module root services fireb
  • R 中 data.table 的聚合

    该练习包括通过 R 中的 data table 的因素组合来聚合数值向量 以以下数据表为例 require data table require plyr dtb lt data table cbind expand grid month
  • Multidex安装失败

    我正在使用 CircledImageView 库 它在棒棒糖 Android 版本上运行良好 但在 Kitkat 中 它崩溃了 于是在google上搜索之后 我发现我必须在我的应用程序中实现 multidex 这是我的应用程序类 publi
  • 类的方法之间的区别,哪些是“函数”,哪些是“绑定方法”?

    我做了一些实验 通过检查 dict 对于类或实例 我可以看到某些方法具有类型function还有一些bound method 实验很乱 下面的问题我都想不出来 在Python 3中 类或实例的方法之间有什么区别 哪些是 函数 哪些是 绑定方
  • “ListView”已从 React Native 中删除

    我的模拟器说 ListView 已从 React Native 中删除 是的 它自 2017 年 3 月版本以来已被删除 您无法再使用它 来自docs https facebook github io react native blog 2
  • 计算指定窗口内的滚动计数

    示例数据可能比解释它更有助于解释我正在尝试做的事情 所以我将从它开始 这是我目前正在使用的数据 CallStart CallDuration 2017 09 15 09 15 15 313 00 01 28 2017 09 15 09 15
  • AWS:在 Redshift 中自动查询

    我想自动化每天运行的 redshift 插入查询 我们实际上使用的是aws环境 有人告诉我使用 lambda 不是正确的方法 这是在 Redshift 中自动执行查询的最佳 ETL 流程 要在 Redshift 上自动化 SQL 您有 3
  • Angular 7:将 HTML 转换为 PDF

    我正在尝试将 HTML 表格转换为 PDF 但没有成功 我已经使用 jsPDF 来做到这一点 但结果非常差 我试图理解为什么 考虑到我有一台平板电脑 我想要的是将此表以横向模式打印在 A4 页面上 使用所需的所有页面 我的问题是 PDF 是
  • 将 NSPoint 从窗口坐标转换为视图坐标

    我的应用程序有一个自定义视图 显示事件的时间线 该视图包含在NSScrollView支持时间线的水平滚动 使用通知 我实现了一种机制 该机制应该显示另一个自定义视图 当用户在时间线中单击该事件时 该视图会显示有关该事件的详细信息 下面是时间