123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- //
- // IB.swift
- // IBAnimatableApp
- //
- // Created by Tom Baranes on 17/01/2018.
- // Copyright © 2018 IBAnimatable. All rights reserved.
- //
- import Foundation
- public final class IB: NSObject, CornerDesignable, FillDesignable, BorderDesignable,
- RotationDesignable, ShadowDesignable, BlurDesignable,
- GradientDesignable, MaskDesignable {
- private let view: UIView
- // MARK: Life cycle
- fileprivate init(view: UIView) {
- self.view = view
- super.init()
- }
- public func reload() {
- configureMask(in: view, previousMaskType: maskType)
- configureCornerRadius(in: view)
- configureBorder(in: view)
- configureMaskShadow(in: view)
- }
- // MARK: - CornerDesignable
- public var cornerRadius: CGFloat = CGFloat.nan {
- didSet {
- configureCornerRadius(in: view)
- }
- }
- public var cornerSides: CornerSides = .allSides {
- didSet {
- configureCornerRadius(in: view)
- }
- }
- // MARK: - FillDesignable
- public var fillColor: UIColor? {
- didSet {
- configureFillColor(in: view)
- }
- }
- public var predefinedColor: ColorType? {
- didSet {
- configureFillColor(in: view)
- }
- }
- public var opacity: CGFloat = CGFloat.nan {
- didSet {
- configureOpacity(in: view)
- }
- }
- // MARK: - BorderDesignable
- public var borderType: BorderType = .solid {
- didSet {
- configureBorder(in: view)
- }
- }
- public var borderColor: UIColor? {
- didSet {
- configureBorder(in: view)
- }
- }
- public var borderWidth: CGFloat = CGFloat.nan {
- didSet {
- configureBorder(in: view)
- }
- }
- public var borderSides: BorderSides = .AllSides {
- didSet {
- configureBorder(in: view)
- }
- }
- // MARK: - RotationDesignable
- public var rotate: CGFloat = CGFloat.nan {
- didSet {
- configureRotate(in: view)
- }
- }
- // MARK: - ShadowDesignable
- public var shadowColor: UIColor? {
- didSet {
- configureShadowColor(in: view)
- }
- }
- public var shadowRadius: CGFloat = CGFloat.nan {
- didSet {
- configureShadowRadius(in: view)
- }
- }
- public var shadowOpacity: CGFloat = CGFloat.nan {
- didSet {
- configureShadowOpacity(in: view)
- }
- }
- public var shadowOffset: CGPoint = CGPoint(x: CGFloat.nan, y: CGFloat.nan) {
- didSet {
- configureShadowOffset(in: view)
- }
- }
- // MARK: - BlurDesignable
- public var blurEffectStyle: UIBlurEffect.Style? {
- didSet {
- configureBlurEffectStyle(in: view)
- }
- }
- public var vibrancyEffectStyle: UIBlurEffect.Style? {
- didSet {
- configureBlurEffectStyle(in: view)
- }
- }
- public var blurOpacity: CGFloat = CGFloat.nan {
- didSet {
- configureBlurEffectStyle(in: view)
- }
- }
- // MARK: - GradientDesignable
- public var gradientMode: GradientMode = .linear {
- didSet {
- configureGradient(in: view)
- }
- }
- public var startColor: UIColor? {
- didSet {
- configureGradient(in: view)
- }
- }
- public var endColor: UIColor? {
- didSet {
- configureGradient(in: view)
- }
- }
- public var predefinedGradient: GradientType? {
- didSet {
- configureGradient(in: view)
- }
- }
- public var startPoint: GradientStartPoint = .top {
- didSet {
- configureGradient(in: view)
- }
- }
- // MARK: - MaskDesignable
- public var maskType: MaskType = .none {
- didSet {
- configureMask(in: view, previousMaskType: oldValue)
- configureBorder(in: view)
- configureMaskShadow(in: view)
- }
- }
- }
- // MARK: -
- private struct AssociatedKeys {
- static var ib = "IBAnimatable"
- }
- extension UIView {
- public var ib: IB {
- get {
- var ibValue = objc_getAssociatedObject(self, &AssociatedKeys.ib) as? IB
- if ibValue == nil {
- ibValue = IB(view: self)
- self.ib = ibValue!
- }
- return ibValue!
- }
- set {
- objc_setAssociatedObject(self, &AssociatedKeys.ib, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
- }
- }
- }
|