我试图通过使用剪贴蒙版剪掉路径的笔划,在圆角矩形内绘制嵌入阴影,只留下阴影。最终目标是近似通知中心中事物的嵌入外观。
我失败了。CGContextClipToMask 根本不起作用,这尤其令人抓狂,因为我在项目的其他地方使用了相同的技术,并且在那里工作正常。这是我的绘图代码:
const CGFloat cornerRadius = 5.0f;
CGContextRef context = UIGraphicsGetCurrentContext();
// Draw background color
[[UIColor colorWithWhite:0.2 alpha:0.5] setFill];
UIBezierPath* background = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:cornerRadius];
[background fill];
// Draw the inner shadow
UIImage* mask;
UIGraphicsBeginImageContext(self.bounds.size);
{{
CGContextRef igc = UIGraphicsGetCurrentContext();
[[UIColor blackColor] setFill];
CGContextFillRect(igc, self.bounds);
// Inset the mask by a ridiculous degree just to be sure that it's working
UIBezierPath* insetMask = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(self.bounds, 20, 20) cornerRadius:cornerRadius];
[[UIColor whiteColor] setFill];
[insetMask fill];
mask = UIGraphicsGetImageFromCurrentImageContext();
}}
UIGraphicsEndImageContext();
CGContextSaveGState(context);
{{
CGContextClipToMask(context, self.bounds, mask.CGImage);
[[UIColor whiteColor] setStroke];
CGContextSetShadow(context, CGSizeMake(0, 1), 1);
[background stroke];
}}
CGContextRestoreGState(context);
如果我猜测出了什么问题,我会说我以某种方式违反了文档中列出的先决条件:
如果
mask
是图像,则它必须在 DeviceGray 颜色空间中,可能没有 alpha 分量,并且可能不会被图像蒙版或蒙版颜色遮盖。
但是,我发现无法验证是否是这种情况,更不用说纠正了。
TIA 为您提供任何帮助!
(我在运行 iOS 6 的 iPhone 4S 上运行该应用程序。)