我在使用水平NSTextView
的{{1}}中嵌入NSScrollView
时遇到一些困难,以便使用圆角掩码。我已经创建了一个简单的测试应用程序来本地化问题。
首先,基本上有两种方法可以在NSRulerView
上获得圆角。第一种是使用NSScrollView
并将其路径属性设置为所需的圆角矩形贝塞尔曲线路径。第二种方法是将CAShapeLayer
的{{1}}属性设置为所需的值,然后将其CALayer
属性设置为1.0 alpha的任何颜色(例如纯黑色)。在通过cornerRadius
对其进行图层备份后,可以使用这些图层中的任何一个来设置backgroundColor
的支持图层的NSScrollView
属性。虽然当我将它直接应用到mask
的背衬层时,我会得到一些绘图工件。因此,我将掩码应用于setWantsLayer:
的superview的支持层。 superview本身只是一个简单的容器视图。
现在,当我们显示标尺视图并开始与它进行交互时,问题就出现了。标尺视图本身看起来很棒,由于上面应用了蒙版,因此它具有圆角。但是,当我开始添加和拖动标记时,它们是不可见的,直到我释放鼠标,这使得定位标记变得非常困难。此外,拖动时不会显示标准垂直标记线。
我已经确认这是由于面罩的存在而发生的。当我禁用掩码时,NSScrollView
表现正常。
所以问题是,我怎样才能让NSScrollView
和NSRulerView
的圆角齐聚一堂?
在鼠标拖动跟踪过程中,看起来好像遮罩层以某种方式遮挡了NSRulerView
中出现的临时图形。如果是这种情况,我如何让NSScrollView
执行它的绘图高于其他一切?使它和所有其他视图支持层,以及将NSRulerView
定位在所有兄弟视图之上(为了好的衡量标准)似乎没有任何效果。
我还尝试将NSRulerView
子类化为覆盖委托方法NSRulerView
(和其他人)以强制绘制,但它似乎在一个奇怪的位置绘制标记,靠近左下角窗口,在NSTextView
附近,即使确保我在正确的坐标系中。我怀疑这是一个绘图工件,因为强制它在其他地方绘制没有效果。