Skip to content

Instantly share code, notes, and snippets.

@olgusirman
Forked from luismachado/FadeScrollView.swift
Created March 5, 2021 10:29
Show Gist options
  • Select an option

  • Save olgusirman/232749e306749b0a4928c58f23e1c634 to your computer and use it in GitHub Desktop.

Select an option

Save olgusirman/232749e306749b0a4928c58f23e1c634 to your computer and use it in GitHub Desktop.

Revisions

  1. @luismachado luismachado created this gist Jun 23, 2017.
    58 changes: 58 additions & 0 deletions FadeScrollView.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    //
    // FadeScrollView.swift
    //
    // Created by Luís Machado on 23/06/2017.
    // Copyright © 2017 Luis Machado. All rights reserved.
    //

    import UIKit

    class FadeScrollView: UIScrollView, UIScrollViewDelegate {

    let fadePercentage: Double = 0.2
    let gradientLayer = CAGradientLayer()
    let transparentColor = UIColor.clear.cgColor
    let opaqueColor = UIColor.black.cgColor

    var topOpacity: CGColor {
    let scrollViewHeight = frame.size.height
    let scrollContentSizeHeight = contentSize.height
    let scrollOffset = contentOffset.y

    let alpha:CGFloat = (scrollViewHeight >= scrollContentSizeHeight || scrollOffset <= 0) ? 1 : 0

    let color = UIColor(white: 0, alpha: alpha)
    return color.cgColor
    }

    var bottomOpacity: CGColor {
    let scrollViewHeight = frame.size.height
    let scrollContentSizeHeight = contentSize.height
    let scrollOffset = contentOffset.y

    let alpha:CGFloat = (scrollViewHeight >= scrollContentSizeHeight || scrollOffset + scrollViewHeight >= scrollContentSizeHeight) ? 1 : 0

    let color = UIColor(white: 0, alpha: alpha)
    return color.cgColor
    }

    override func layoutSubviews() {
    super.layoutSubviews()

    self.delegate = self
    let maskLayer = CALayer()
    maskLayer.frame = self.bounds

    gradientLayer.frame = CGRect(x: self.bounds.origin.x, y: 0, width: self.bounds.size.width, height: self.bounds.size.height)
    gradientLayer.colors = [topOpacity, opaqueColor, opaqueColor, bottomOpacity]
    gradientLayer.locations = [0, NSNumber(floatLiteral: fadePercentage), NSNumber(floatLiteral: 1 - fadePercentage), 1]
    maskLayer.addSublayer(gradientLayer)

    self.layer.mask = maskLayer
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
    gradientLayer.colors = [topOpacity, opaqueColor, opaqueColor, bottomOpacity]
    }

    }