Быстрая тень не распространяется правильно

Я пытался создать тень для своего UIView. Я осмотрелся и нашел расширение для класса CALayer из этого поста. https://stackoverflow.com/a/48489506/9188318

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

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

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

И вот результат с использованием спреда 1

Используется 1 разворот

И это становится еще хуже с разбросом 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)
    }   
}

person Talon Brown    schedule 09.07.2020    source источник
comment
проверьте это.. stackoverflow.com/a/62574465/6783598   -  person Ben Rockey    schedule 09.07.2020


Ответы (2)


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

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

когда распространение: 1

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

person Ömer Faruk Öztürk    schedule 09.07.2020

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

self.layer.masksToBounds = true
person PGDev    schedule 09.07.2020