【发布时间】:2014-07-14 21:04:58
【问题描述】:
我有一个带有自定义视图的窗口。此视图获取的是在其中绘制为背景的图像。我们现在假设它是一个结构化的灰色背景图像。
- (void)drawRect:(NSRect)dirtyRect
{
[super drawRect:dirtyRect];
[self.titlebarBGImage drawInRect:dirtyRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];
}
在这个自定义视图中,我添加了一个方形纹理按钮,并在 IB 中将其配置为没有边框。然后在我的 AppDelegate 中,我在 applicationDidFinishLaunching 方法中给这个按钮一个图像:
// ...
// [[self.minimizeButton cell] setBackgroundColor:[NSColor clearColor]];
[self.minimizeButton setImage:minimizeImage];
// ...
不知何故,相同的背景 (titlebarBGImage) 也被绘制为按钮背景,因此它具有结构化的灰色图像,但会缩放以适应按钮大小。这看起来很傻,显然不是我想要的。如果我然后用setBackgroundColor: 取消注释行,背景将被清除,但自定义视图背景也不会在按钮图像透明的地方发光(按钮图像是圆形),所以我得到一个矩形,窗口背景发光通过(即示例图像中的绿色),而不是按钮所在视图的背景。
这里有一张图片可以清楚地说明发生了什么:
从上到下:
- 我想要实现的,即通过按钮透明区域查看灰色结构化背景
- 我用上面的代码得到了什么,即没有未注释的行:自定义视图背景被压缩到按钮背景中
- 我使用
clearColor线得到的结果,即窗口颜色(绿色)会透出,而不是视图的背景。
我怎样才能获得最高的结果?
编辑:我推送了example project to github,以便您明白我的意思。
【问题讨论】:
-
我改了标题,希望有人能找到这个风滚草。我仍然需要一个答案,谢谢