Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradient mask on UIScrollView slow to update

I have a UIScrollView subclass containing a very wide UIView subclass, and I want to fade out the edges of the visible content. Here's what I've got in the UIScrollView subclass:

private var gradientMask = CAGradientLayer()
override func layoutSubviews() {
    super.layoutSubviews()

    gradientMask.frame = self.bounds
    gradientMask.colors = [UIColor(white: 0.0, alpha: 0.18).CGColor,
        UIColor(white: 0.0, alpha: 0.95).CGColor,
        UIColor(white: 0.0, alpha: 0.95).CGColor,
        UIColor(white: 0.0, alpha: 0.0).CGColor
    ]

    let fadeStart:CGFloat = 50.0 / self.bounds.width
    gradientMask.startPoint = CGPoint(x:0, y:0.5)
    gradientMask.endPoint = CGPoint(x:1, y:0.5)
    let fadeEnd = (self.bounds.width - 40.0) / self.bounds.width
    gradientMask.locations = [fadeStart,fadeStart+0.1,fadeEnd,1.0]

    self.layer.mask = gradientMask
}   

It does work, but there's a lag. After you scroll, the gradient appears to scroll with the content for a moment then snaps back to the expected position. How can I ensure the edges of the scroll view fade out—and that the gradient doesn't move when scrolling?

like image 839
Rogare Avatar asked Jan 02 '26 06:01

Rogare


1 Answers

The fix was just to embed the UIScrollView subclass into a view that has the gradient applied. That's it!

like image 150
Rogare Avatar answered Jan 04 '26 11:01

Rogare



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!