Swift - Масштабирование размера тени пользовательского класса кнопок не работает - PullRequest
0 голосов
/ 10 апреля 2019

Я написал этот класс пользовательских кнопок

class RoundedButton: UIButton {

override func awakeFromNib() {

    layer.cornerRadius = 5

    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    layer.shadowOpacity = 0.2
    layer.shadowRadius = 1.0
    layer.masksToBounds = false
    layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 5).cgPath

    layer.contents = center
    layer.shouldRasterize = true
    layer.rasterizationScale = UIScreen.main.scale
}
}

На моем iPhone X все идеально подходит

enter image description here

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

enter image description here

Есть проблема с самим классом кнопки или это проблема ограничений? Я не могу найти решение.

1 Ответ

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

Вам нужно обновить тень на layoutSubviews (это также должно решить проблемы, которые ваш код, казалось, имел с вращением).

class RoundedButton: UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()
        updateShadow(on: self)
    }

func updateShadow(on background: UIView) {
    let layer = background.layer
    layer.shadowPath = UIBezierPath(rect: background.bounds).cgPath
    layer.masksToBounds = false
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOffset = CGSize(width: 0, height: 0.0)
    layer.shadowRadius = 4
    layer.shadowOpacity = 0.22
}

override func awakeFromNib() {

    layer.cornerRadius = 5
    layer.shadowColor = UIColor.black.cgColor
    layer.shadowOffset = CGSize(width: 0.0, height: 0.0)
    layer.shadowOpacity = 0.2
    layer.shadowRadius = 1.0
    layer.masksToBounds = false
    layer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 5).cgPath
    layer.contents = center
    layer.shouldRasterize = true
    layer.rasterizationScale = UIScreen.main.scale
}
}

Надеюсь, это поможет вам

...