4

如何在自己的窗口中正确托管 PitchShift 音频单元插件?

我正在开发一个托管 Apple 系统提供的音频单元插件的 Mac 应用程序。在新的 OSX 10.7 Lion 中,一些插件更新了视图。PitchShift 就是其中之一。

PitchShift 和其他一些有新的旋钮来改变那里的参数。用鼠标转动旋钮时,旋钮下方会显示一个显示旋钮参数值的水平条。

松开旋钮后,甚至在关闭窗口后,此栏仍会保留在屏幕上。如果我单击其中一个旋钮,从而创建一个流氓值栏,并移动 PitchShift 视图所在的窗口,则该栏将停留在窗口以前所在的位置。如果此时我再次单击旋钮,则会出现一个新的条形图,但两个条形图都会随着不断变化的旋钮参数值信息而主动更新。每次我重复此过程时都会发生这种情况,屏幕上会停留更多条。

发生这种情况几次后,我的应用程序在 main.m 文件中的 NSApplicaionMain() 调用中以错误的访问权限退出。

我检查了逻辑 9,但这并没有发生在那里。该条似乎直接系在旋钮上,因此在您用鼠标松开旋钮后立即消失。

我将 PitchSHift 视图设置为专用 NSWindow 的 contentView。

Logic 如何防止这种情况发生,或者我该怎么做?

我试过查看参数值是否在 PitchShift 视图的子视图中出现,但它们似乎不是。

任何帮助将不胜感激。

编辑:当第一次出现值栏时,我在程序的控制台中得到以下输出: Circle and line do not intersect

所以我发现它正在使用核心动画CALayers。现在的问题是值栏层不是 PitchShiftView 层层次结构的一部分。换句话说,我可以找到构建 pitchShiftView 的所有其他层,但找不到值栏的层。这似乎是整个问题的开始。

4

1 回答 1

1

我终于弄明白了。参数值栏是拥有音频单元视图的窗口的子窗口。

为了解决这个问题,我在我的 NSApplication 子类中捕获了窗口的鼠标向上事件,然后我关闭了子窗口(也就是值栏),这样它们就不会留在屏幕上。

这并没有阻止出口不良访问。我现在认为这是一个单独的问题,似乎只与这些挥之不去的子窗口有关。

于 2011-08-12T23:12:31.510 回答