UIView тень не видна - PullRequest
       7

UIView тень не видна

1 голос
/ 26 апреля 2019

У меня есть UIView под названием containerView.

После создания UIView и добавления его к основному виду я пытаюсь добавить небольшую тень. Мой код:

    let containerView = UIView()

    let bg_clear = UIColor(hexString: "#34495E")
    containerView.backgroundColor = bg_clear


    containerView.layer.cornerRadius =  15
    containerView.clipsToBounds = false

    containerView.dropShadow() // Generate Shadow

    view.addSubview(containerView)

    containerView.translatesAutoresizingMaskIntoConstraints = false
    containerView.heightAnchor.constraint(equalToConstant: 50).isActive = true
    containerView.widthAnchor.constraint(equalToConstant: 300).isActive = true
    containerView.centerXAnchor.constraint(equalTo: tabBar.centerXAnchor).isActive = true

Код для генерации тени:

extension UIView {

    func dropShadow(scale: Bool = true) {
        layer.masksToBounds = false
        layer.shadowColor = UIColor(hexString: "#000000").cgColor
        layer.shadowOpacity = 0.5
        layer.shadowOffset = CGSize(width: -1, height: 1)
        layer.shadowRadius = 1

        layer.shadowPath = UIBezierPath(rect: bounds).cgPath
        layer.shouldRasterize = true
        layer.rasterizationScale = scale ? UIScreen.main.scale : 1
   }
}

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Несколько замечаний:

  • Убедитесь, что вид контейнера не слишком близко к левому или нижнему краю экрана, потому что тень будет отображаться слева ипод контейнером.

  • Убедитесь, что вы используете округленный прямоугольник для теневого пути, потому что ваш контейнерный вид имеет ненулевой угловой радиус.

  • Если вы все еще не видите тень, попробуйте увеличить смещение тени.

Вы можете скопировать и вставить этот код на игровую площадку и открытьLive View:

extension UIView {

    func dropShadow(scale: Bool = true) {
        layer.masksToBounds = false
        layer.shadowColor = UIColor.black.cgColor
        layer.shadowOpacity = 0.5
        layer.shadowOffset = CGSize(width: -5, height: 5) // I made this larger
        layer.shadowRadius = 1

        // I used a rounded rect here
        layer.shadowPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.layer.cornerRadius).cgPath
        layer.shouldRasterize = true
        layer.rasterizationScale = scale ? UIScreen.main.scale : 1
    }
}

let view = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
view.backgroundColor = .white
let containerView = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))

let bg_clear = UIColor.green
containerView.backgroundColor = bg_clear


containerView.layer.cornerRadius =  15
containerView.clipsToBounds = false

containerView.dropShadow() // Generate Shadow

view.addSubview(containerView)

PlaygroundPage.current.liveView = view

Вы должны увидеть:

enter image description here

1 голос
/ 26 апреля 2019

Это должно помочь:

extension UIView {

    func addShadow(withOpacity opacity:Float, radius:CGFloat, andColor color:UIColor) {
         self.layer.shadowColor         = color.cgColor
         self.layer.shadowOffset        = CGSize(width:-1.0, height:1.0)
         self.layer.shadowOpacity       = opacity
         self.layer.shadowRadius        = radius
    }
}

Пример:

containerView.addShadow(withOpacity: 0.4, radius: 0.4, andColor: .black)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...