可可:使用nsgradient作为在其下方绘制的面具
-
29-09-2019 - |
题
我正在尝试使用可可a进行形状的反射。我已经应用了NSAFFINETRANSFORM并成功地重新绘制了形状,但是现在我不知道如何在其上绘制Alpha面膜。我正在使用 NSCompositeDestinationOut
操作,但这给我带来了不必要的结果:Alt Text http://img687.imageshack.us/img687/2417/capturedcran20100623094.png
我不确定如何解决这个问题 - 我需要做到这一点 因此,梯度仅充当α面膜,实际上没有显示. 。我使用错误的合成模式吗?
谢谢!如果需要,这是梯度代码:
- (void)fadeOutRect:(NSRect)rect {
[NSGraphicsContext saveGraphicsState];
[[NSGraphicsContext currentContext] setCompositingOperation:NSCompositeDestinationOut];
NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations:
[[NSColor blackColor] colorWithAlphaComponent:0.5], 0.0,
[[NSColor blackColor] colorWithAlphaComponent:1.0], 0.8, nil];
[gradient drawInRect:NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - ( PILL_HEIGHT * 2 ),
rect.size.width, PILL_HEIGHT) angle:270];
[NSGraphicsContext restoreGraphicsState];
}
解决方案
是的。这是我们用来执行此操作的代码的示例。它使用源图像,并具有一些有趣的业务,具有比例因素,但是您应该能够使用基本的结构和合成选择来完成所需的工作。 (此代码在[ReflectionImage lockfocus]块中,而自我是我们正在做出反思的nsimage。)
// Draw our mask into the image
NSGradient* fade = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]
endingColor:[NSColor clearColor]];
[fade drawFromPoint:NSMakePoint(0.0, size.height)
toPoint:NSMakePoint(0.0, 0.0)
options:0];
// Composite the original image, upside-down
NSAffineTransform* flipper = [NSAffineTransform transform];
[flipper scaleXBy:1.0 yBy:-1.0];
[flipper concat];
[self drawInRect:NSMakeRect(0.0, -1.0*size.height, size.width, size.height)
fromRect:NSMakeRect(0.0, 0.0, self.size.width, size.height / scaleFactor)
operation:NSCompositeSourceIn fraction:1.0];
不隶属于 StackOverflow