我怎样才能重现此阴影? 我的问题是,如果我使用高Alpha颜色或clearColor,没有阴影,如果我用低Alpha颜色,我无法看到板下的阴影。 随着体积的电平被改变(五颜六色的部分)的阴影也移动,所以它不是纯的Photoshop。
Answer 1:
尝试一些使用您的视图放入系统性的判定。 它可能最终的东西
view.layer.shadowColor = [UIColor colorWithWhite:.5 alpha:1].CGColor;
view.layer.shadowRadius = 4.0f;
view.layer.shadowPath = CGPathCreateWithRect(CGRectMake(0, 0, 50, 50), NULL);
view.layer.shadowOpacity = 1.0f;
view.layer.shadowOffset = CGSizeMake(1, 1);
它是由在最后遗憾的方式应该CGPathRelease(矩形)泄漏。
Answer 2:
搜索并没有找到一个回答这个问题后,我写了斯威夫特5以下扩展:
extension UIView {
func makeClearViewWithShadow(
cornderRadius: CGFloat,
shadowColor: CGColor,
shadowOpacity: Float,
shadowRadius: CGFloat) {
self.frame = self.frame.insetBy(dx: -shadowRadius * 2,
dy: -shadowRadius * 2)
self.backgroundColor = .clear
let shadowView = UIView(frame: CGRect(
x: shadowRadius * 2,
y: shadowRadius * 2,
width: self.frame.width - shadowRadius * 4,
height: self.frame.height - shadowRadius * 4))
shadowView.backgroundColor = .black
shadowView.layer.cornerRadius = cornderRadius
shadowView.layer.borderWidth = 1.0
shadowView.layer.borderColor = UIColor.clear.cgColor
shadowView.layer.shadowColor = shadowColor
shadowView.layer.shadowOpacity = shadowOpacity
shadowView.layer.shadowRadius = shadowRadius
shadowView.layer.masksToBounds = false
self.addSubview(shadowView)
let p:CGMutablePath = CGMutablePath()
p.addRect(self.bounds)
p.addPath(UIBezierPath(roundedRect: shadowView.frame, cornerRadius: shadowView.layer.cornerRadius).cgPath)
let s = CAShapeLayer()
s.path = p
s.fillRule = CAShapeLayerFillRule.evenOdd
self.layer.mask = s
}
}
使用例:
myView.makeClearViewWithShadow(cornderRadius: 20, shadowColor: UIColor.black.cgColor, shadowOpacity: 0.5, shadowRadius: 30)
Answer 3:
您将有两个图像之一是丰富多彩的图像,和其他将是它的影子阴影将扩大,并与丰富多彩的部分的膨胀增加宽度
还有就是你所问的没有原生的方式,
Answer 4:
我使用的UIImageView提供的影子。 余由12个像素高创建1个像素宽,的图像。 所述的图像是黑色,但是所述α为0.5,在顶部为0.0在底部例如梯度。 RGBA 1.0,1.0,1.0,0.5 - > 1.0,1.0,1.0,0.0 - I然后放置在刚刚的UIImageView视图需要的阴影的下方,并且穿过视图的宽度水平拉伸它。 我还用这个时我需要改变时,下面一个滚动视图滚动阴影的强度,通过改变UIImageView.alpha值
文章来源: How to add shadow to a transparent UIView?