Macos NSShadow绘图错误
您好,在我的应用程序中,我有一个带有CALayer的自定义视图(我将其用于过渡动画),在该视图中我添加了一些子视图,其中一个是带有NSTableView的视图。NSTableView的每个单元格都使用阴影绘制其内容。代码如下: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
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的更改不会移动或更改阴影光源的明显位置