31

我在我的 xib 中创建了一个 uiview,背景颜色为透明色。当我在视图层上应用阴影时,阴影没有出现。但是当我设置除透明颜色以外的背景颜色时,会显示阴影。请帮忙。

这是我的代码

self.cView.layer.shadowColor=[UIColor whiteColor].CGColor;
self.cView.layer.shadowOffset=CGSizeZero;
self.cView.layer.shadowRadius=30.0;
self.cView.layer.shadowOpacity=1.0;
self.cView.layer.cornerRadius=10.0;
4

3 回答 3

38

问题是,阴影实际上考虑了“上”层。如果上面什么都没有,就不会有阴影:阴影是如何工作的

编辑:

从粘贴箱复制的这个食谱

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);

但我怀疑这对你有什么用处:结果是一个“绘制”的视图,带有阴影颜色和周围的阴影。

于 2012-10-17T06:30:30.460 回答
17

如果您指定 shadowPath 属性

shadowView.layer.shadowPath =
  UIBezierPath(
   roundedRect: shadowView.bounds,
   cornerRadius: 10).cgPath

(或任何需要的角半径。)

它甚至可以使用 .clear backgroundColor。

请注意,您当然必须在layoutSubviews相关视图中执行此操作。

这是一个实际的完整工作示例:

import UIKit

@IBDesignable class LonelyShadow: UIView {

    let corner: CGFloat = 20

    override init(frame: CGRect) {
        super.init(frame: frame)
        common()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        common()
    }

    private func common() {

        backgroundColor = .clear
        clipsToBounds = false

        layer.shadowColor = UIColor.yourColor.cgColor
        layer.shadowOffset = CGSize(width: 0, height: 25)
        layer.shadowOpacity = 0.3
        layer.shadowRadius = 40
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        layer.shadowPath = UIBezierPath(
          roundedRect: bounds, cornerRadius: corner).cgPath
    }
}
于 2019-02-26T10:37:05.010 回答
3

相当于@Rok Jark 在 Swift 4 中的回答:

self.layer.shadowColor = UIColor(white: 0.5, alpha: 1).cgColor
self.layer.shadowRadius = 4.0
self.layer.shadowPath = CGPath.init(rect: CGRect.init(x: 0, y: 0, width: 50, height: 50), transform: nil)
self.layer.shadowOpacity = 1.0;
self.layer.shadowOffset = CGSize(width: 1, height: 1)
于 2019-10-07T15:39:05.740 回答