如何添加阴影透明的UIView?(How to add shadow to a transparen

2019-09-17 17:12发布

我怎样才能重现此阴影? 我的问题是,如果我使用高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?