Добавление теневого слоя с закругленными углами в пользовательский подкласс UIButton - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь применить тень и скругленные углы к пользовательскому подклассу UIButton для использования в раскадровке

Вот мой код:

import UIKit

class customButton: UIButton {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
    setGradientBackground()
    setShadowLayer()
}

private func setup() {
    clipsToBounds = true
    layer.cornerRadius = 8
}

private func setGradientBackground() {

    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = bounds
    gradientLayer.colors = [
        UIColor(red: 0.18, green: 0.5, blue: 0.93, alpha: 1).cgColor,
        UIColor(red: 0.18, green: 0.61, blue: 0.86, alpha: 1).cgColor
    ]
    gradientLayer.locations = [0,1]
    gradientLayer.startPoint = CGPoint(x: 0.25, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 0.75, y: 0.5)

    layer.insertSublayer(gradientLayer, at: 0)
}

private func setShadowLayer(){

    let subLayer = CALayer()
    subLayer.frame = bounds
    subLayer.shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: 8).cgPath
    subLayer.shadowColor = UIColor.red.cgColor
    subLayer.shadowOpacity = 1
    subLayer.shadowRadius = 12
    subLayer.shadowOffset = CGSize(width: 0, height: 2)

    layer.insertSublayer(subLayer, at: 0)
}

}

Когда я устанавливаюclipsToBounds до true это удаляет тень, поэтому я решил добавить новый подслой func setShadowLayer() и пока ничего не получалось.

1 Ответ

0 голосов
/ 12 октября 2018

Попробуйте также установить .cornerRadius на градиентном слое:

    gradientLayer.endPoint = CGPoint(x: 0.75, y: 0.5)

    // add this line        
    gradientLayer.cornerRadius = 8

    layer.insertSublayer(gradientLayer, at: 0)

Мой результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...