Swift UI и тени цветов - PullRequest
       48

Swift UI и тени цветов

0 голосов
/ 04 мая 2020

Итак, мне нужна кнопка в iOS / swift, которая имеет внешнюю тень на нижней и правой границе и внутреннюю тень на верхней и левой границе. Я изучал учебные пособия в течение нескольких дней и придумал следующее решение, ПОЧЕМУ то, что мне нужно.

internal func Setup() {
        self.backgroundColor = .white

        self.contentEdgeInsets = UIEdgeInsets(top: 10, left:30, bottom: 10,  right: 30)

        // Outer shadow 
        self.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
        self.layer.shadowOffset = CGSize(width: 10, height: 10)
        self.layer.shadowOpacity = 1.0
        self.layer.shadowRadius = 6
        self.layer.masksToBounds = false
        self.layer.cornerRadius = self.frame.height / 2

        // call to add inner shadow
        self.addInnerShadow()

    }

    internal func addInnerShadow() {
        let cornerRadius = self.bounds.height / 2

        let innerShadow = CALayer()
        innerShadow.frame = bounds
        // Shadow path (1pt ring around bounds)
        let path = UIBezierPath(roundedRect: innerShadow.bounds.insetBy(dx: -1, dy: -1), cornerRadius: cornerRadius)
        let cutout = UIBezierPath(roundedRect: innerShadow.bounds, cornerRadius: cornerRadius).reversing()
        path.append(cutout)

        innerShadow.shadowPath = path.cgPath
        innerShadow.masksToBounds = true

        // Shadow properties. Color is SAME as in outer shadow, but will come out differently
        innerShadow.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor
        innerShadow.shadowOffset = CGSize(width: 8, height: 8)
        innerShadow.shadowOpacity = 1.0
        innerShadow.shadowRadius = 6
        innerShadow.cornerRadius = cornerRadius


        // Add
        layer.addSublayer(innerShadow)
    }

Функция Setup () вызывается во время init () кнопки, и все это создает красивую затененную кнопку с закругленные углы.

enter image description here

Но вопрос в том, почему верхняя внутренняя тень такая легкая? Он должен быть того же цвета, что и нижняя внешняя тень. Если я установлю любой другой цвет (например, красный), он всегда будет очень светлым, с оттенком нужного цвета. Почему? Можно ли контролировать цвет внутренней тени так же прямо, как я это делаю с внешней тенью?

...