我正在通过以下
绘制一个带有笔划的形状- (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);
}
以及我最终如下(十字旗)
现在这次,我想在十字旗上留下一些阴影。
我该怎么做才能做到这一点。请就此问题向我提出建议。感谢。
答案 0 :(得分:4)
CGContextSetShadow
或CGContextSetShadowWithColor
(documentation 1,documentation 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);
答案 1 :(得分:0)
您应该可以通过使用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]];