Swift - тень для неправильной формы вида - PullRequest
0 голосов
/ 06 февраля 2019

Я изо всех сил пытаюсь добавить тень к пользовательской фигуре.

Вот изображение того, что я хочу построить: enter image description here (Не обращайте внимания на текст и символ)

Вы можете увидеть произвольную форму с изогнутым углом справа и прямоугольной формой слева с тенью.Я использую UIView, и добавил угол слева.

Это код, который у меня есть, который корректирует вид:

 View1.backgroundColor = .green //green color is just to see the shape well
    let path = UIBezierPath(roundedRect:View1.bounds,
                            byRoundingCorners:[.topRight, .bottomRight],
                            cornerRadii: CGSize(width: self.frame.height/2, height:  self.frame.height/2))

    let maskLayer = CAShapeLayer()

Я пытался добавить тень,но тень не появляется.Вот код, который я пытался добавить тень:

    View1.layer.masksToBounds = false
    View1.layer.layer.shadowPath = maskLayer.path
    View1.layer.shadowColor = UIColor.black.cgColor
    View1.layer.shadowOffset = CGSize(width: 0.0, height: 3.0)
    View1.layer.shadowOpacity = 0.5
    View1.layer.shadowRadius = 1.0

Как вы можете добавить тень к этой фигуре?

1 Ответ

0 голосов
/ 06 февраля 2019

Этого можно добиться, используя один UIView (shadowView), добавив подслой shapeLayer и установив тень слоя shadowView.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setup()
    }

    @IBOutlet var shadowView: UIView!
    func setup() {
        // setup irregular shape
        let path = UIBezierPath.init(roundedRect: shadowView.bounds, byRoundingCorners: [.topRight, .bottomRight], cornerRadii: CGSize.init(width: 20, height: 20))
        let layer = CAShapeLayer.init()
        layer.frame = shadowView.bounds
        layer.path = path.cgPath
        layer.fillColor = UIColor.white.cgColor
        layer.masksToBounds = true
        shadowView.layer.insertSublayer(layer, at: 0)

        // setup shadow
        shadowView.layer.shadowRadius = 8
        shadowView.layer.shadowOpacity = 0.2
        shadowView.layer.shadowOffset = CGSize.init(width: 0, height: 2.5)
        shadowView.layer.shadowColor = UIColor.black.cgColor
        shadowView.layer.shadowPath = path.cgPath
    }
}

Result

Примечание:

  1. shadowView.clipToBounds должно быть false, чтобы тени вступили в силу.

  2. Чтобы увидеть layer.fillColor, установите shadowView.backgroundColor to .clear.

    Вы можете легко достичь вышеизложенного с помощью Interface Builder, установив свойство «Background» и сняв флажок «Clip to Bounds».

...