NSShadow绘图错误

时间:2012-07-20 14:07:30

标签: 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 setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
[shadow set];

[self.stringValue drawInRect:NSMakeRect(x, y, w - 60, h) withAttributes:attributes];

当我的NSTableView在CALayer打开时少于约50行或当我在IB中关闭CALayer时,我的单元格被绘制为:http://i.stack.imgur.com/zMxmK.png

但是当我的NSTableView有超过50行且我在IB中打开CALayer时,我的单元格被绘制成:http://i.stack.imgur.com/IMyIP.png

怎么可能?我打破了我的意思:(

1 个答案:

答案 0 :(得分:1)

  • 尝试将-2.0更改为+2.0,具体取决于[[NSGraphicsContext currentContext] isFlipped]属性。
  • 尝试根据视图是否已分层并且CALayer已启用isGeometryFlipped来更改它。
  • 如果您已应用翻转转换,请注意它们不会影响NSShadow:

      

    无论应用于该空间的任何变换如何,都始终在默认用户坐标空间中绘制阴影。这意味着当前变换矩阵(CTM)的旋转,平移和其他变换不会影响生成的阴影。另一种思考方式是CTM的变化不会移动或改变阴影光源的视在位置。