我在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
效果应用视差?