gpt4 book ai didi

objective-c - iOS 核心图形 : Draw ONLY shadows of a CGPath

转载 作者:IT王子 更新时间:2023-10-29 08:06:06 25 4
gpt4 key购买 nike

我正在使用 Core Graphics 在 iOS 5 中绘制一条简单的路径:

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint( path, NULL, center.x , topMargin );
CGPathAddLineToPoint(path, NULL, center.x+20, topMargin+50);
CGPathAddLineToPoint(path, NULL, center.x , topMargin+40);
CGPathAddLineToPoint(path, NULL, center.x-20, topMargin+50);
CGPathAddLineToPoint(path, NULL, center.x , topMargin );

现在我想像这样以叠加模式填充它:

[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.4] setFill];
CGContextAddPath(context, path);
CGContextSetBlendMode (context, kCGBlendModeOverlay);
CGContextFillPath(context);

这给了我预期的结果。但接下来,我想创建一个浮雕效果。我想到了使用白色和黑色阴影来达到这样的效果:

[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] setFill];
CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, highlightColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);

[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] setFill];
CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(-1, -1), 1.0, shadowColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);

问题是,当 alpha 设置为 0 时,不会绘制阴影。
现在的问题是:有没有办法绘制没有填充颜色但处于全 alpha 状态的阴影?我能以某种方式阻止我的路径内部被绘制吗?或者是否有更简单的方法为一条路径绘制两个阴影?

最佳答案

我建议您将上下文的剪切路径设置为形状路径的倒数,配置阴影,并正常填充形状,完全不透明。剪切路径将掩盖填充颜色,只留下阴影。

CGContextSaveGState(context);
CGRect boundingRect = CGContextGetClipBoundingBox(context);
CGContextAddRect(context, boundingRect);
CGContextAddPath(context, path);
CGContextEOClip(context);

[[UIColor blackColor] setFill];
CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, highlightColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);

CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(-1, -1), 1.0, shadowColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);

CGContextRestoreGState(context);

诀窍是使用 CGContextEOClip 和一个额外的矩形子路径将剪辑区域设置为原始路径覆盖的区域。这适用于任何非自相交的路径。

关于objective-c - iOS 核心图形 : Draw ONLY shadows of a CGPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com