子视图和子图层的UIImageView视差效果

时间:2019-05-16 08:47:31

标签: ios swift xcode parallax

我在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)
    }

我需要对subview(blur)和sublayer(gradient)做相同的拉伸效果

我已经尝试过

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

它仅适用于模糊 UIView ,但动画延迟很小。

我想这是一个坏习惯。

如何为UIImageView效果应用视差?

0 个答案:

没有答案