2

我正在通过以下操作绘制一个带有笔划的形状

- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    CGContextBeginPath(context);
    CGContextMoveToPoint    (context, 190, 0);
    CGContextAddLineToPoint (context, 220, 0);
    CGContextAddLineToPoint (context, 300, 80);
    CGContextAddLineToPoint (context, 300, 110);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, bgColor);                           // fill color
    CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);     // set color for stroke
    CGContextSetLineWidth(context, .8);                                         // set width for stroke
    CGContextDrawPath(context,  kCGPathFillStroke);                             // do fill and stroke together


    CGContextEOClip(context);
    CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, [UIColor whiteColor].CGColor);
    CGContextSetBlendMode (context, kCGBlendModeScreen);
    CGContextRestoreGState(context);
}

和我下面的结果(十字旗)

在此处输入图像描述

现在这一次,我也想在十字旗周围投下一些阴影。

我应该怎么做才能做到这一点。请就这个问题给我建议。谢谢。

4

2 回答 2

4

CGContextSetShadowCGContextSetShadowWithColor文档 1文档 2

在你的情况下,我能够通过

...
CGContextSaveGState(context);

CGContextSetShadowWithColor(context, CGSizeMake(-3 , 2), 4.0, [UIColor whiteColor].CGColor);

CGContextBeginPath(context);
CGContextMoveToPoint    (context, 190, 0);
...

我从底部删除了这些(剪辑在这里没有做任何事情,为什么是混合模式?)

CGContextEOClip(context);
CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, [UIColor whiteColor].CGColor);
CGContextSetBlendMode (context, kCGBlendModeScreen);
于 2012-11-08T20:39:41.247 回答
-1

您应该能够通过使用 UIBezierPath 跟踪您的标志并将阴影应用于路径来完成此操作。

这是一些可能有用的示例代码

// create highlight
UIRectCorner corners = UIRectCornerTopLeft;
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0.0f, 0.0f, self.bounds.size.width, self.bounds.size.height + 50.0f) byRoundingCorners:corners cornerRadii:CGSizeMake(32.0f, 32.0f)];
[[self layer] setShadowPath:[shadowPath CGPath]];
[[self layer] setShadowOpacity:0.5f];
[[self layer] setShadowRadius:25.0f];
[[self layer] setShadowOffset:CGSizeMake(0.0f, 0.0f)];
[[self layer] setShadowColor:[[UIColor colorWithRed:1.0f green:1.0f blue:0.75f alpha:1.0f] CGColor]];
于 2012-11-08T20:35:11.367 回答