带CA层掩码的NSScrollView添加了第二个无用的滚动条

时间:2013-11-19 21:31:21

标签: objective-c cocoa core-animation nsview nsscrollview

我为一个表添加了一个自定义的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;
}

然而,虽然面具本身工作正常,但它给了我另一面克隆的“幽灵”滚动条:scrollbar

表格本身覆盖了大部分滚动条,但我将一个单元格视图移动了一下以显示它是如何继续向下移动的。滚动条的大小与右侧的滚动条相同,不会移动或响应单击或滚动。

当我隐藏窗口然后重新打开它时,它完全消失了。是否与滚动条没有正确重绘有关?

1 个答案:

答案 0 :(得分:0)

由于我从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;
}