Macos NSShadow绘图错误

Macos NSShadow绘图错误,macos,cocoa,core-graphics,calayer,nsshadow,Macos,Cocoa,Core Graphics,Calayer,Nsshadow,您好,在我的应用程序中,我有一个带有CALayer的自定义视图(我将其用于过渡动画),在该视图中我添加了一些子视图,其中一个是带有NSTableView的视图。NSTableView的每个单元格都使用阴影绘制其内容。代码如下: NSShadow* shadow = [[NSShadow alloc] init]; [shadow setShadowOffset:NSMakeSize(2.0, -2.0)]; [shadow setShadowBlurRadius:2.0]; [shadow se

您好,在我的应用程序中,我有一个带有CALayer的自定义视图(我将其用于过渡动画),在该视图中我添加了一些子视图,其中一个是带有NSTableView的视图。NSTableView的每个单元格都使用阴影绘制其内容。代码如下:

NSShadow* shadow = [[NSShadow alloc] init];
[shadow setShadowOffset:NSMakeSize(2.0, -2.0)];
[shadow setShadowBlurRadius:2.0];
[shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
[shadow set];

[self.stringValue drawInRect:NSMakeRect(x, y, w - 60, h) withAttributes:attributes];
当我的NSTableView在CALayer打开的情况下少于50行时,或者当我在IB中关闭CALayer时,我的单元格绘制如下:

但当我的NSTableView有超过50行并且我在IB中打开CALayer时,我有如下绘制的单元格:

怎么可能呢?我打破了我的had:(

  • 根据
    [[NSGraphicsContext currentContext]isFlipped]
    属性,尝试将
    -2.0
    更改为
    +2.0
  • 尝试根据视图是否分层以及CALayer是否启用了
    IsGeometryLipped
    来更改它
  • 如果应用了翻转变换,请注意它们不会影响NSShadow:

    阴影始终在默认用户坐标空间中绘制,而不管应用于该空间的任何变换。这意味着当前变换矩阵(CTM)的旋转、平移和其他变换不要影响产生的阴影。考虑这一点的另一种方式是,对CTM的更改不会移动或更改阴影光源的明显位置

      • 根据
        [[NSGraphicsContext currentContext]isFlipped]
        属性,尝试将
        -2.0
        更改为
        +2.0
      • 尝试根据视图是否分层以及CALayer是否启用了
        IsGeometryLipped
        来更改它
      • 如果应用了翻转变换,请注意它们不会影响NSShadow:

        阴影始终在默认用户坐标空间中绘制,而不管应用于该空间的任何变换。这意味着当前变换矩阵(CTM)的旋转、平移和其他变换不要影响产生的阴影。考虑这一点的另一种方式是,对CTM的更改不会移动或更改阴影光源的明显位置


      谢谢你的回答。1.GraphicsContex总是为我翻转。2.CALayer几何体没有翻转。3.我没有应用任何转换。这是一个奇怪的错误:(谢谢你的回答。1.GraphicsContex总是为我翻转。2.CALayer几何体没有翻转。3.我没有应用任何转换。这是一个奇怪的错误:(