Быстрая тень не распространяется правильно - PullRequest
0 голосов
/ 09 июля 2020

Я пытался создать тень для своего UIView. Я осмотрелся и нашел в этом посте расширение для класса CALayer. { ссылка }

До сих пор он работал у меня хорошо, пока я не попытался ввести число, отличное от 0, для спреда.

При спреде 0. Это это результат

Using 0 spread

And here is the result using a spread of 1

Using 1 spread

And it gets even worse with a spread of 5

Используя спред 5

Проблема в том, что у меня нет закругленных углов, и я не знаю, как это исправить. Вот мой код для UIView, который использует это представление. Расширение, которое используется для создания тени, указано в сообщении выше.

Код UIView

class FileCalculateOperatorSelectionButton : UIView {

    private var isActivated : Bool = false

    //Background colors
    private var unSelectedBackgroundColor : UIColor = UIColor(red: 178/255, green: 90/255, blue: 253/255, alpha: 1.0)
    private var selectedBackgroundColor : UIColor = UIColor.white
   
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.commonInit()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.commonInit()
    }

    private func commonInit() {
        self.layer.cornerRadius = self.frame.height/2
        self.backgroundColor = self.unSelectedBackgroundColor
    
        let shadowColor = UIColor(red: 0xC8, green: 0xC6, blue: 0xC6)

        //Change the spread argument here
        self.layer.applySketchShadow(color: .black, alpha: 0.5, x: 0, y: 0, blur: 5, spread: 0)
    }   
}

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Попробуйте установить для свойства layer's masksToBounds значение true.

self.layer.masksToBounds = true
0 голосов
/ 09 июля 2020

Изменить shadowPath в applySketchShadow функцию в CALayer расширении, как показано ниже;

// shadowPath = UIBezierPath(rect: rect).cgPath
shadowPath = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).cgPath 

когда спред: 1

введите описание изображения здесь

...