Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- class GradientView: UIView {
- let gradientLayer = CAGradientLayer()
- override func awakeFromNib() {
- // 1
- self.backgroundColor = ColorPalette.White
- // 2
- gradientLayer.frame = self.bounds
- // 3
- let color1 = ColorPalette.GrdTop.CGColor as CGColorRef
- let color2 = ColorPalette.GrdBottom.CGColor as CGColorRef
- gradientLayer.colors = [color1, color2]
- // 4
- gradientLayer.locations = [0.0, 1.0]
- // 5
- self.layer.addSublayer(gradientLayer)
- }
- }
- gradientLayer.locations = [0.0, 1.0]
- locations = [0.45, 0.55]
- @IBDesignable
- class GradientView: UIView {
- private let gradientLayer = CAGradientLayer()
- @IBInspectable var color1: UIColor = .white { didSet { updateColors() } }
- @IBInspectable var color2: UIColor = .blue { didSet { updateColors() } }
- override init(frame: CGRect) {
- super.init(frame: frame)
- configureGradient()
- }
- required init?(coder aDecoder: NSCoder) {
- super.init(coder: aDecoder)
- configureGradient()
- }
- override func layoutSubviews() {
- super.layoutSubviews()
- gradientLayer.frame = bounds
- }
- private func configureGradient() {
- gradientLayer.startPoint = CGPoint(x: 0, y: 0)
- gradientLayer.endPoint = CGPoint(x: 1, y: 1)
- updateColors()
- layer.insertSublayer(gradientLayer, at: 0)
- }
- private func updateColors() {
- gradientLayer.colors = [color1.cgColor, color2.cgColor]
- }
- }
- @IBDesignable
- class GradientView: UIView {
- private let gradientLayer = CAGradientLayer()
- @IBInspectable var color1: UIColor = .whiteColor() { didSet { updateColors() } }
- @IBInspectable var color2: UIColor = .blueColor() { didSet { updateColors() } }
- override init(frame: CGRect) {
- super.init(frame: frame)
- configureGradient()
- }
- required init?(coder aDecoder: NSCoder) {
- super.init(coder: aDecoder)
- configureGradient()
- }
- override func layoutSubviews() {
- super.layoutSubviews()
- gradientLayer.frame = bounds
- }
- private func configureGradient() {
- gradientLayer.startPoint = CGPoint(x: 0, y: 0)
- gradientLayer.endPoint = CGPoint(x: 1, y: 1)
- updateColors()
- layer.insertSublayer(gradientLayer, atIndex: 0)
- }
- private func updateColors() {
- gradientLayer.colors = [color1.CGColor, color2.CGColor]
- }
- }
- import UIKit
- class GradientView: UIView {
- let gradientLayer = CAGradientLayer()
- override func awakeFromNib() {
- // 1
- self.backgroundColor = ColorPalette.White
- // 2
- gradientLayer.frame = self.bounds
- // 3
- let color1 = ColorPalette.GrdTop.CGColor as CGColorRef
- let color2 = ColorPalette.GrdBottom.CGColor as CGColorRef
- gradientLayer.colors = [color1, color2]
- //** This code should do the trick... **//
- gradientLayer.startPoint = CGPointMake(0.0, 0.5)
- // 4
- gradientLayer.locations = [0.0, 1.0]
- // 5
- self.layer.addSublayer(gradientLayer)
- }
- }
- import UIKit
- @IBDesignable class GradientView: UIView {
- var gradient:CAGradientLayer
- @IBInspectable var startColor:UIColor = UIColor.whiteColor() {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var color1:UIColor? = nil {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var stop1:Double = (1.0 / 3.0) {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var color2:UIColor? = nil {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var stop2:Double = (2.0 / 3.0) {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var endColor:UIColor = UIColor.blackColor() {
- didSet {
- self.updateGradient()
- }
- }
- @IBInspectable var isHorizontal:Bool {
- get {
- return self.gradient.endPoint.y == self.gradient.startPoint.y
- }
- set {
- self.gradient.endPoint = newValue ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 1)
- }
- }
- override init(frame: CGRect) {
- gradient = CAGradientLayer()
- super.init(frame: frame)
- self.configGradient()
- }
- required init?(coder aDecoder: NSCoder) {
- gradient = CAGradientLayer()
- super.init(coder: aDecoder)
- self.configGradient()
- }
- func configGradient() {
- self.backgroundColor = UIColor.clearColor()
- self.layer.insertSublayer(self.gradient, atIndex: 0)
- self.gradient.masksToBounds = true
- self.gradient.frame = self.bounds
- self.gradient.startPoint = CGPoint(x: 0, y: 0)
- self.gradient.endPoint = CGPoint(x: 1, y: 0)
- self.updateGradient()
- }
- override func layoutSubviews() {
- super.layoutSubviews()
- self.gradient.frame = self.bounds
- }
- func updateGradient() {
- var colors:[CGColorRef] = []
- var locations:[NSNumber] = []
- colors.append(self.startColor.CGColor)
- locations.append(0.0.nsNumber)
- if let color = self.color1 {
- colors.append(color.CGColor)
- locations.append(self.stop1)}
- if let color = self.color2 {
- colors.append(color.CGColor)
- locations.append(self.stop2)
- }
- colors.append(self.endColor.CGColor)
- locations.append(1.0.nsNumber)
- self.gradient.colors = colors
- self.gradient.locations = locations
- self.layer.setNeedsDisplay()
- }
- }
- // The end point of the gradient when drawn in the layer’s coordinate space. Animatable.
- var endPoint: CGPoint
- // The start point of the gradient when drawn in the layer’s coordinate space. Animatable.
- var startPoint: CGPoint
- // the gradient angle, in degrees anticlockwise from 0 (east/right)
- @IBInspectable var angle: CGFloat = 270
- // create vector pointing in direction of angle
- private func gradientPointsForAngle(_ angle: CGFloat) -> (CGPoint, CGPoint) {
- // get vector start and end points
- let end = pointForAngle(angle)
- let start = oppositePoint(end)
- // convert to gradient space
- let p0 = transformToGradientSpace(start)
- let p1 = transformToGradientSpace(end)
- return (p0, p1)
- }
- private func pointForAngle(_ angle: CGFloat) -> CGPoint {
- // convert degrees to radians
- let radians = angle * .pi / 180.0
- var x = cos(radians)
- var y = sin(radians)
- // (x,y) is in terms unit circle. Extrapolate to unit square to get full vector length
- if (fabs(x) > fabs(y)) {
- // extrapolate x to unit length
- x = x > 0 ? 1 : -1
- y = x * tan(radians)
- } else {
- // extrapolate y to unit length
- y = y > 0 ? 1 : -1
- x = y / tan(radians)
- }
- return CGPoint(x: x, y: y)
- }
- private func oppositePoint(_ point: CGPoint) -> CGPoint {
- return CGPoint(x: -point.x, y: -point.y)
- }
- private func transformToGradientSpace(_ point: CGPoint) -> CGPoint {
- // input point is in signed unit space: (-1,-1) to (1,1)
- // convert to gradient space: (0,0) to (1,1), with flipped Y axis
- return CGPoint(x: (point.x + 1) * 0.5, y: 1.0 - (point.y + 1) * 0.5)
- }
- private func updateGradient() {
- if let gradient = self.gradient {
- let (start, end) = gradientPointsForAngle(self.angle)
- gradient.startPoint = start
- gradient.endPoint = end
- gradient.frame = self.bounds
- }
- }
Add Comment
Please, Sign In to add comment