Skip to content

Instantly share code, notes, and snippets.

@jhanzo
Created May 16, 2019 13:31
Show Gist options
  • Save jhanzo/b1ba2f76df3f26b0c3e9795689d041c7 to your computer and use it in GitHub Desktop.
Save jhanzo/b1ba2f76df3f26b0c3e9795689d041c7 to your computer and use it in GitHub Desktop.
Shimmering views
//
// UIView+Shimmer.swift
// SearchFlights
//
// Created by Jessy Hanzo on 16/05/2019.
// Copyright © 2019 jho. All rights reserved.
//
import Foundation
import UIKit
// inspired by https://github.com/AjayBhanushali/ABLoaderView
extension UIView {
public func startShimmering() {
self.layoutIfNeeded()
self.animate()
}
public func stopShimmering() {
self.layoutIfNeeded()
let layers = self.layer.sublayers?.filter({$0.name == "colorLayer" || $0.name == "loaderLayer"})
layers?.forEach { $0.removeFromSuperlayer() }
}
private func animate() {
// Add Color Layer
let colorLayer = CALayer()
colorLayer.backgroundColor = UIColor(white: 0.82, alpha: 1).cgColor
colorLayer.frame = CGRect(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height)
colorLayer.name = "colorLayer"
self.layer.addSublayer(colorLayer)
self.autoresizesSubviews = true
self.clipsToBounds = true
// Add loader Layer
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [
UIColor(white: 0.82, alpha: 1).cgColor,
UIColor(white: 0.86, alpha: 1).cgColor,
UIColor(white: 0.82, alpha: 1).cgColor
]
gradientLayer.locations = [0,0.4,0.8, 1]
gradientLayer.name = "loaderLayer"
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
gradientLayer.frame = CGRect(x: 0, y: 0, width: self.bounds.width, height: self.bounds.height)
self.layer.addSublayer(gradientLayer)
// Animate loader layer
let animation = CABasicAnimation(keyPath: "transform.translation.x")
animation.duration = 1.2
animation.fromValue = -self.frame.width
animation.toValue = self.frame.width
animation.repeatCount = Float.infinity
gradientLayer.add(animation, forKey: "smartLoader")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment