Don_Mag icon

Untitled

Don_Mag | PRO | 06/06/23 05:41:46 PM UTC | 0 ⭐ | 8395 👁️ | Never ⏰ | []
Swift |

1.97 KB

|

None

|

0 👍

/

0 👎

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let g = view.safeAreaLayoutGuide
        
        let gv = Gradient()
        gv.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(gv)
        
        NSLayoutConstraint.activate([
            gv.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0),
            gv.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 20.0),
            gv.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -20.0),
            gv.bottomAnchor.constraint(equalTo: g.bottomAnchor, constant: -20.0),
        ])
        
        //gv.diagonalMode = true
        //gv.horizontalMode = true
        
        view.backgroundColor = .systemYellow
    }
    
}
 
class Gradient: UIView {
    var startColor:   UIColor = .white { didSet { updateColors() }}
    var endColor:     UIColor = .red { didSet { updateColors() }}
    var horizontalMode:  Bool =  false { didSet { updatePoints() }}
    var diagonalMode:    Bool =  false { didSet { updatePoints() }}
    
    override class var layerClass: AnyClass { CAGradientLayer.self }
    
    var gradientLayer: CAGradientLayer { layer as! CAGradientLayer }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        commonInit()
    }
    private func commonInit() {
        updatePoints()
        updateLocations()
        updateColors()
    }
    
    func updatePoints() {
        if horizontalMode {
            gradientLayer.startPoint = diagonalMode ? .init(x: 1, y: 0) : .init(x: 0, y: 0.5)
            gradientLayer.endPoint   = diagonalMode ? .init(x: 0, y: 1) : .init(x: 1, y: 0.5)
        } else {
            gradientLayer.startPoint = diagonalMode ? .init(x: 0, y: 0) : .init(x: 0.5, y: 0)
            gradientLayer.endPoint   = diagonalMode ? .init(x: 1, y: 1) : .init(x: 0.5, y: 1)
        }
    }
    func updateLocations() {
        gradientLayer.locations = [0, 0.5, 0.5, 1.0]
    }
    func updateColors() {
        gradientLayer.colors = [startColor.cgColor, startColor.cgColor, endColor.cgColor, endColor.cgColor]
    }
    
}
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎