我在NSTextView
嵌入NSScrollView
水平面NSRulerView
以与圆角面罩配合使用时遇到了一些困难。我创建了一个简单的测试应用程序来本地化问题。
首先,似乎基本上有两种方法可以在NSScrollView
. 第一种是使用 aCAShapeLayer
并将其 path 属性设置为所需的圆角矩形贝塞尔路径。第二种是将 aCALayer
的cornerRadius
属性设置为所需的值,然后将其backgroundColor
属性设置为具有 1.0 alpha 的任何颜色(例如纯黑色)。在将其设置为layer-backed via 之后,这些层中的任何一个都可以用于设置NSScrollView
'backing layer 的属性。虽然当我将它直接应用到的支持层时,我得到了一些绘图工件。因此,我将遮罩应用到' 的 superview 的支持层。superview 本身只是一个简单的容器视图。mask
setWantsLayer:
NSScrollView
NSScrollView
现在,当我们显示标尺视图并开始与之交互时,问题就出现了。标尺视图本身看起来很棒,由于上面应用了蒙版,它有圆角。但是,当我开始添加和拖动标记时,它们在我释放鼠标之前是不可见的,因此很难定位标记。此外,拖动时不会出现标准垂直标记线。
我已经确认这是由于面罩的存在而发生的。当我禁用面具时,NSRulerView
行为正常。
所以问题是,我怎样才能让NSRulerView
和NSScrollView
的圆角一起打得很好?
看起来好像遮罩层以某种方式遮盖了NSRulerView
鼠标拖动跟踪期间发生的临时绘图。如果是这种情况,我如何才能在NSRulerView
其他一切之上执行它?使其和所有其他视图层支持,以及定位NSRulerView
上述所有同级视图(为了很好的措施)似乎没有任何效果。
我也尝试过子类NSTextView
化以覆盖委托方法rulerView:willMoveMarker:
(和其他方法)以强制绘制,但它似乎将标记绘制在一个奇怪的位置,靠近窗口的左下角,不靠近NSRulerView
,即使在确保我在正确的坐标系。不过,我怀疑这是一个绘图神器,因为强制它在其他地方绘图没有任何效果。