UIView下阴影截断

Posted

技术标签:

【中文标题】UIView下阴影截断【英文标题】:Shadow cut off under UIView 【发布时间】:2013-07-22 12:16:34 【问题描述】:

我正在尝试在 UIView 下添加一些阴影。

drawRect 中,我创建了一个圆角矩形贝塞尔路径,并在其上附加了一个弯曲的箭头状底部(蓝色的东西)

这是影子的代码:

...
    CGContextSaveGState(context);
        CGContextAddPath(context, rectPath.CGPath);  // rectPath is the bezier
        CGContextSetShadowWithColor(context,shadowSize, 3.0, [[[UIColor blackColor]  colorWithAlphaComponent:0.7]CGColor]);    
        CGContextFillPath(context);
    CGContextRestoreGState(context);
...

如您所见,阴影在底部被切断,即视图框架结束的地方。我可以将阴影延伸到框架“外部”吗?

【问题讨论】:

【参考方案1】:

使用CALayer阴影属性而不是在drawRect:中绘制阴影

shadowOpacity shadowRadius shadowOffset shadowColor shadowPath

这可能会导致一些性能问题,您可以使用 shadowPath 属性来减少这些问题。

【讨论】:

是的,我也知道这种方式,但我想如果我计算我的路径并在drawrect中绘制整个视图,我也可以在这里绘制阴影......最终,将我的贝塞尔曲线设置为@987654329 @ 解决了这个问题,所以我会接受你的回答(但如果你知道为什么 drawRect 方法不起作用,请赐教:D)谢谢。 你可以使用drawRect,但是你必须扩展你的views frame,这样它才能渲染整个阴影。根据您的代码设计,这比仅使用 CALayer 阴影属性更复杂。 drawRectCGContext 有点像纸页,你不能在页面之外画。

以上是关于UIView下阴影截断的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIView 下绘制阴影?

为选定的边缘 UIView 添加阴影

向我的 UIView 添加阴影的最佳方法是啥

带有切出段和阴影的 UIView

如何在 ios Swift 的 UIView 中左右设置阴影?

如何在蒙面的 UIView 周围绘制阴影?