绘制一个自定义样式的矢量路径

时间:2013-02-22 12:58:37

标签: iphone objective-c macos cocoa

我很惊讶在Stackoverflow上找不到这个答案。

我有一个pdf格式的矢量路径,比如Safari或Mac App Store应用程序通常用作图像图标。

现在,我想在代码中指定填充颜色和自定义阴影,而不是制作图像并导出它们。我没弄明白怎么做。

阴影有效,但填充颜色没有 谁能告诉我怎么做?


当前代码

[NSGraphicsContext saveGraphicsState];
{
    // Has no effect
    [[NSColor colorWithCalibratedRed:0.92f green:0.97f blue:0.98f alpha:1.00f] setFill];
    // Neither has this
    [[NSColor colorWithCalibratedRed:0.92f green:0.97f blue:0.98f alpha:1.00f] set];

    NSShadow *shadow = [NSShadow new];
    [shadow setShadowOffset:NSMakeSize(0, -1)];
    [shadow setShadowColor:[NSColor blackColor]];
    [shadow setShadowBlurRadius:3.0];
    [shadow set];

    [image drawInRect:imgRect 
             fromRect:NSZeroRect 
            operation:NSCompositeXOR 
             fraction:1.0 
       respectFlipped:YES 
                hints:nil];
}
[NSGraphicsContext restoreGraphicsState];

1 个答案:

答案 0 :(得分:1)

在调用drawInRect:...方面,图像“就是这样”。设置填充和描边将仅影响基本操作。考虑这一点的一个好方法是要意识到所有图像,矢量或光栅都必须以相同的方式运行;如果在上下文中设置的当前填充颜色会影响基于光栅的图像的绘制,那会是奇怪的吗?同样的想法 - 图像是图像。矢量图像中可能还有多个路径,每个路径都有不同的填充。对于那些被上下文中的填充颜色集覆盖的人也没有意义。

阴影无论如何都是有效的,因为它实际上是一个合成操作;使用给定的阴影设置绘制给定图像会产生相同的阴影,无论图像是基于光栅还是等效的矢量。

简而言之,如果你想改变图像的内容,你将不得不编写代码来从图像中提取矢量,然后将它们绘制成图元。

或者,如果您只想用颜色填充任何填充区域,您可以使用矢量图像在上下文中创建遮罩,然后您可以设置颜色 在上下文中,填写。 可能产生预期的效果。