带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条
Posted
技术标签:
【中文标题】带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条【英文标题】:NSScrollView with CA layer mask adds a second useless scrollbar 【发布时间】:2013-11-19 21:31:21 【问题描述】:我为表格添加了一个自定义的 NSScrollView,为了将所有内容都隐藏在窗口形状中,我使用核心动画图层蒙版来剪辑它,它的子视图如下所示:
- (void)drawRect:(NSRect)dirtyRect
[super drawRect:dirtyRect];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef cgPath = CGPathCreateMutable();
//Make path here
[maskLayer setPath:cgPath];
self.wantsLayer = YES;
self.layer.mask = maskLayer;
self.layer.masksToBounds = YES;
虽然面具本身工作正常,但它在另一边给了我这个克隆的“幽灵”滚动条:
滚动条的大部分都被表格本身所覆盖,但我将单元格视图移动了一点,以显示它是如何向下继续的。滚动条与右侧的大小相同,并且不会移动或响应单击或滚动。
当我隐藏窗口并重新打开它时,它完全消失了。是否与未正确重绘滚动条有关?
【问题讨论】:
【参考方案1】:由于我已经从 XIB 加载了视图,并且由于这不需要持续绘制,而不是从 initWithFrame 或 drawRect 调用它,我应该从 awakeFromNib 调用它:
- (void)awakeFromNib
[super drawRect:dirtyRect];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef cgPath = CGPathCreateMutable();
//Make path here
[maskLayer setPath:cgPath];
self.wantsLayer = YES;
self.layer.mask = maskLayer;
self.layer.masksToBounds = YES;
【讨论】:
以上是关于带有 CA 图层掩码的 NSScrollView 添加了第二个无用的滚动条的主要内容,如果未能解决你的问题,请参考以下文章
.Net - 在文件名中使用带有掩码的 FileIOPermission
java 带有信用卡掩码的Android TextInputLayout
读取带有网络和子网掩码的 csv 并写入带有 ping 结果的文件