UIImageView эффект параллакса для подпредставления и подслоя - PullRequest
0 голосов
/ 16 мая 2019

У меня есть заголовок в TableView.

Включает UIImageView, и я произвел на нем эффект параллакса, и он хорошо работает со следующим кодом:

    var height: NSLayoutConstraint?

    override func layoutSubviews() {
        super.layoutSubviews()

        guard let header = tableHeaderView else { return }
        if let imageView = header.subviews.first as? UIImageView {
            height = imageView.constraints.filter { $0.identifier == "height" }.first
        }

        let offsetY = -contentOffset.y
        height?.constant = max(header.bounds.height, header.bounds.height + offsetY)

        header.clipsToBounds = offsetY <= 0
    }

Но у меня есть эффекты размытия (UIView) и градиента (CALayer) на моем UIImageView.

    func addBlur () {
        let darkBlur = UIBlurEffect(style: .dark)
        let blurView = UIVisualEffectView(effect: darkBlur)
        blurView.frame = self.bounds
        blurView.alpha = 0.3

        self.addSubview(blurView)
    }

    func addGradient () {
        var coverLayerBG: CAGradientLayer!
        let colorTop = UIColor(red: 0, green: 0, blue: 0, alpha: 0).cgColor
        let colorBottom = UIColor(red: 0, green: 0, blue: 0, alpha: 0.65).cgColor
        coverLayerBG = CAGradientLayer()
        coverLayerBG.colors = [colorTop, colorBottom]
        coverLayerBG.frame = self.bounds

        self.layer.addSublayer(coverLayerBG)
    }

Мне нужно сделать один и тот же эффект растяжения для подпредставления (размытие) и подслоя (градиент)

Я уже пробовал это

guard let blur = imageView.subviews.first else { return }
            blur.frame = imageView.bounds

Работает только для размытия (UIView) , но с небольшой задержкой анимации.

Полагаю, это плохая практика.

Как применить параллакс для UIImageView эффектов?

...