Как добавить тень в UIView с закругленными углами - PullRequest
0 голосов
/ 21 января 2019

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

Итак, я хочу UIView, который имеет тень вокруг сторон и кнопку вида, а не сверху. Как бы я это сделал, так как у меня закругленные углы.

Вот как выглядит пользовательский интерфейс:

enter image description here

Вот что я попробовал до сих пор (что, похоже, не работает):

featureOneView.layer.cornerRadius = 10.0
        featureOneView.clipsToBounds = true


        featureOneView.layer.shadowOffset = CGSize(width: 0, height: 3)
        featureOneView.layer.shadowOpacity = 0.6
        featureOneView.layer.shadowRadius = 3.0
        featureOneView.layer.shadowColor = UIColor.gray.cgColor

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я пишу класс IBDesingable, который отлично работает

@IBDesignable
class RoundedButton: UIButton {

    @IBInspectable var cornerRadius: CGFloat = 10.0 {
        didSet {
            self.layer.cornerRadius = cornerRadius
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0.0 {
        didSet {
            self.layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor: UIColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) {
        didSet {
            self.layer.borderColor = borderColor.cgColor
        }
    }

    @IBInspectable
    var shadowRadius: CGFloat {
        get {
            return layer.shadowRadius
        }
        set {
            layer.shadowRadius = newValue
        }
    }

    @IBInspectable
    var shadowOpacity: Float {
        get {
            return layer.shadowOpacity
        }
        set {
            layer.shadowOpacity = newValue
        }
    }

    @IBInspectable
    var shadowOffset: CGSize {
        get {
            return layer.shadowOffset
        }
        set {
            layer.shadowOffset = newValue
        }
    }

    @IBInspectable
    var shadowColor: CGColor? {
        get {
            if let color = layer.shadowColor {
                return color
            }
            return nil
        }
        set {
            if let color = newValue {
                layer.shadowColor = color
            } else {
                layer.shadowColor = nil
            }
        }
    }

    override func awakeFromNib() {
        self.setupView()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
    }

    func setupView() {
        self.layer.cornerRadius = cornerRadius
        self.layer.borderWidth = borderWidth
        self.layer.borderColor = borderColor.cgColor
        self.layer.shadowColor = shadowColor ?? UIColor.gray.cgColor
        self.layer.shadowOffset = shadowOffset
        self.layer.shadowRadius = shadowRadius
        self.layer.shadowOpacity = shadowOpacity
    }


}

Вы можете добавить рамку / угловой радиус / смещение / цвет / opocity надеюсь, это поможет

0 голосов
/ 21 января 2019

Я верю, что проблема заключается в ограничении границ. Если вы хотите, чтобы представление ограничивало границы, у вас должно быть два вида - один для тени и один для содержимого.

Это у вас работает?

// corner radius
featureOneView.layer.cornerRadius = 10

// shadow
featureOneView.layer.shadowColor = UIColor.black.cgColor
featureOneView.layer.shadowOffset = CGSize(width: 3, height: 3)
featureOneView.layer.shadowOpacity = 0.6
featureOneView.layer.shadowRadius = 3.0

Быстрый поиск в Google: https://stackoverflow.com/a/34984063/6885097

...