1

嗨,在我的应用程序中,我有一个带有 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

怎么会这样?我打破了我的:(

4

1 回答 1

1
  • 尝试更改-2.0+2.0取决于[[NSGraphicsContext currentContext] isFlipped]属性。
  • 尝试根据视图是否分层以及 CALayer 是否打开来更改它isGeometryFlipped
  • 如果您应用了翻转转换,请注意它们不会影响 NSShadow:

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

于 2012-07-20T14:17:32.070 回答