Почему цвет фона UIViews не обновляется? - PullRequest
0 голосов
/ 17 мая 2018

Оператор Switch работает, но не сбрасывает цвета фона представления и т. Д.

У меня есть UIImage (значок) и UIButton, встроенные в UIView (пользовательского типа DropShadowCircleView)как показано на рисунке ниже.

buttons

При нажатии на кнопку ходьбы для шага var navigationOption устанавливается на walking или driving и setupNavigationSelectionView() выполняется.

Проблема : переключатель " ходьба " работает отлично, но случай " вождение " не сбрасываетсяUIView и цветовой оттенок значка с исходной настройкой, например;цвет фона и т. д. любые идеи почему?

func setupNavigationSelectionView(){

        switch navigationOption {

        case "walking":
            walkingBg.setGradientBackground(colourOne: softGreen, ColourTwo: softBlue)
            walkingBg.layer.cornerRadius = walkingBg.frame.width / 2
            walkingBg.clipsToBounds = true
            walkingIcon.tintColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)

        case "driving":
            walkingBg.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
            walkingBg.layer.cornerRadius = walkingBg.frame.width / 2
            walkingBg.clipsToBounds = true
            walkingIcon.tintColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)

        default:
            break

        }
}

РЕДАКТИРОВАТЬ: это мой DropShadowCircleView класс

class DropShadowCircleView: UIView {

    override func awakeFromNib() {

        setupView()
        super.awakeFromNib()

    }

    func setupView(){
        self.layer.shadowOpacity = 0.50
        self.layer.shadowRadius = 20
        self.layer.shadowColor = UIColor.black.cgColor
        self.layer.cornerRadius = self.frame.width / 2


    }

}

РЕДАКТИРОВАТЬ: Это моя setGradientBackground функция, которая находится в расширениифайл в UIView

func setGradientBackground(colourOne: UIColor, ColourTwo: UIColor) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [colourOne.cgColor, ColourTwo.cgColor]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
    }

1 Ответ

0 голосов
/ 17 мая 2018

Вам необходимо удалить градиентный слой при сбросе значка.

Добавьте это к своему extension UIView:

func removeGradientBackground() {
    guard
        let idx = layer.sublayers?.index(where: { $0 is CAGradientLayer })
        else { return }

    layer.sublayers?.remove(at: idx)
}

и вызовите его при сбросе значка.

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