您可以使用 Core Graphics 创建阴影。QuartzDemo示例中描述了您需要的构建块。特别是class QuartzMaskingView
在QuartzClipping.m中查看。
- 将形状图层的内容捕获到图像中
- 根据自己的喜好设置阴影
- 开始透明层
- 剪辑到图层内容的图像 - 您将在它之外绘图
- 再次绘制您的图像
这会导致在蒙版区域之外绘制阴影。
CGSize size = CGSizeMake(300, 100);
UIGraphicsBeginImageContextWithOptions(size,NO, 0.0);
[shapeLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGRect flippedImageRect =
CGRectMake(0, 0, image.size.width, -image.size.height);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextSetShadowWithColor(ctx, CGSizeMake(4, 4), 2,
[[UIColor colorWithWhite:0 alpha:0.4] CGColor]);
CGContextBeginTransparencyLayer(ctx, NULL);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextClipToMask(ctx, flippedImageRect, [image CGImage]);
CGContextSetFillColorWithColor(ctx, [[UIColor redColor] CGColor]);
CGContextDrawImage(ctx, flippedImageRect, [image CGImage]);
CGContextEndTransparencyLayer(ctx);
CGContextRestoreGState(ctx);