3

我在NSTextView嵌入NSScrollView水平面NSRulerView以与圆角面罩配合使用时遇到了一些困难。我创建了一个简单的测试应用程序来本地化问题。

首先,似乎基本上有两种方法可以在NSScrollView. 第一种是使用 aCAShapeLayer并将其 path 属性设置为所需的圆角矩形贝塞尔路径。第二种是将 aCALayercornerRadius属性设置为所需的值,然后将其backgroundColor属性设置为具有 1.0 alpha 的任何颜色(例如纯黑色)。在将其设置为layer-backed via 之后,这些层中的任何一个都可以用于设置NSScrollView'backing layer 的属性。虽然当我将它直接应用到的支持层时,我得到了一些绘图工件。因此,我将遮罩应用到' 的 superview 的支持层。superview 本身只是一个简单的容器视图。masksetWantsLayer:NSScrollViewNSScrollView

现在,当我们显示标尺视图并开始与之交互时,问题就出现了。标尺视图本身看起来很棒,由于上面应用了蒙版,它有圆角。但是,当我开始添加和拖动标记时,它们在我释放鼠标之前是不可见的,因此很难定位标记。此外,拖动时不会出现标准垂直标记线。

我已经确认这是由于面罩的存在而发生的。当我禁用面具时,NSRulerView行为正常。

所以问题是,我怎样才能让NSRulerViewNSScrollView的圆角一起打得很好?

看起来好像遮罩层以某种方式遮盖了NSRulerView鼠标拖动跟踪期间发生的临时绘图。如果是这种情况,我如何才能在NSRulerView其他一切之上执行它?使其和所有其他视图层支持,以及定位NSRulerView上述所有同级视图(为了很好的措施)似乎没有任何效果。

我也尝试过子类NSTextView化以覆盖委托方法rulerView:willMoveMarker:(和其他方法)以强制绘制,但它似乎将标记绘制在一个奇怪的位置,靠近窗口的左下角,不靠近NSRulerView,即使在确保我在正确的坐标系。不过,我怀疑这是一个绘图神器,因为强制它在其他地方绘图没有任何效果。

4

0 回答 0