diff --git a/VDSSample/ViewControllers/TileContainerViewController.swift b/VDSSample/ViewControllers/TileContainerViewController.swift index a2cf029..2af2295 100644 --- a/VDSSample/ViewControllers/TileContainerViewController.swift +++ b/VDSSample/ViewControllers/TileContainerViewController.swift @@ -15,9 +15,6 @@ class TileContainerViewController: BaseViewController { lazy var colorPicker: UIColorPickerViewController = { let picker = UIColorPickerViewController() - if case .custom(let hexCode) = component.color { - picker.selectedColor = UIColor(hexString: hexCode) - } picker.delegate = self return picker }() @@ -49,92 +46,6 @@ class TileContainerViewController: BaseViewController { picker: self.picker, items: BackgroundEffect.allCases) }() - - lazy var gradientColorView1: UIStackView = { - let stackView = UIStackView() - let indicatorWrapper = View() - indicatorWrapper.addSubview(gradientColor1View) - indicatorWrapper.height(32) - indicatorWrapper.pinTop() - indicatorWrapper.pinLeading() - indicatorWrapper.pinBottom() - indicatorWrapper.pinTrailingGreaterThanOrEqualTo(anchor: indicatorWrapper.trailingAnchor) - stackView.addArrangedSubview(indicatorWrapper) - stackView.distribution = .fillEqually - stackView.alignment = .fill - var button = Button().with { instance in - instance.size = .small - instance.use = .secondary - instance.text = "Select" - instance.onClick = { [weak self] in - self?.gradientColorTapped($0, view: self?.gradientColor1View) - } - } - button.tag = 1 - let buttonWrapper = View() - buttonWrapper.addSubview(button) - buttonWrapper.height(32) - button.pinTop() - button.pinTrailing() - button.pinBottom() - button.pinLeadingGreaterThanOrEqualTo(anchor: buttonWrapper.leadingAnchor) - stackView.addArrangedSubview(buttonWrapper) - stackView.tag = 1 - stackView.spacing = 10 - return stackView - }() - - lazy var gradientColorView2: UIStackView = { - let stackView = UIStackView() - stackView.distribution = .fillEqually - stackView.alignment = .fill - stackView.spacing = 10 - let indicatorWrapper = View() - indicatorWrapper.addSubview(gradientColor2View) - indicatorWrapper.height(32) - indicatorWrapper.pinTop() - indicatorWrapper.pinLeading() - indicatorWrapper.pinBottom() - indicatorWrapper.pinTrailingGreaterThanOrEqualTo(anchor: indicatorWrapper.trailingAnchor) - stackView.addArrangedSubview(indicatorWrapper) - var button = Button().with { instance in - instance.size = .small - instance.use = .secondary - instance.text = "Select" - instance.onClick = { [weak self] in - self?.gradientColorTapped($0, view: self?.gradientColor2View) - } - } - button.tag = 2 - let buttonWrapper = View() - buttonWrapper.addSubview(button) - buttonWrapper.height(32) - button.pinTop() - button.pinTrailing() - button.pinBottom() - button.pinLeadingGreaterThanOrEqualTo(anchor: buttonWrapper.leadingAnchor) - stackView.addArrangedSubview(buttonWrapper) - stackView.tag = 2 - return stackView - }() - - var gradientColor1View: UIView = { - let view = UIView() - view.translatesAutoresizingMaskIntoConstraints = false - view.widthAnchor.constraint(equalToConstant: 20).isActive = true - view.heightAnchor.constraint(equalToConstant: 20).isActive = true - view.tag = 1 - return view - }() - - var gradientColor2View: UIView = { - let view = UIView() - view.translatesAutoresizingMaskIntoConstraints = false - view.widthAnchor.constraint(equalToConstant: 20).isActive = true - view.heightAnchor.constraint(equalToConstant: 20).isActive = true - view.tag = 2 - return view - }() var gradientColorsFormStackView = FormSection().with { $0.isHidden = true } var backgroundColor: BackgroundColor = .secondary @@ -143,11 +54,7 @@ class TileContainerViewController: BaseViewController { var showBackgroundImageSwitch = Toggle() var showBorderSwitch = Toggle() var showDropShadowSwitch = Toggle() - var selectedGradient1Color: String? - var selectedGradient2Color: String? - var colorPickerType: ColorPickerType = .backgroundColor var backgroundImage = UIImage(named: "backgroundTest")! - var selectedGradientColorView: UIView? var customPaddingRowView: UIView? var anyCancellable: AnyCancellable? @@ -168,6 +75,25 @@ class TileContainerViewController: BaseViewController { $0.placeholder = "Minimum 100px else it will occupy full container" } + var colorPickerType: ColorPickerType = .backgroundColor + enum ColorPickerType { + case backgroundColor, gradientColor1, gradientColor2, contentViewBackgroundColor + } + + lazy var gradientColorView1: ColorPickerView = { + return .init(with: ColorPickerType.gradientColor1) { [weak self] picker in + self?.colorPickerType = picker.pickerType + self?.selectedColorTapped(picker) + } + }() + + lazy var gradientColorView2: ColorPickerView = { + return .init(with: ColorPickerType.gradientColor2) { [weak self] picker in + self?.colorPickerType = picker.pickerType + self?.selectedColorTapped(picker) + } + }() + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: .makeWrapper(for: component)) @@ -295,12 +221,10 @@ class TileContainerViewController: BaseViewController { if let effect = $0.effect { self.component.backgroundEffect = effect self.gradientColorsFormStackView.isHidden = true - self.selectedGradient1Color = nil - self.selectedGradient1Color = nil - self.gradientColor1View.backgroundColor = .clear - self.gradientColor2View.backgroundColor = .clear + self.gradientColorView1.selectedColor = nil + self.gradientColorView2.selectedColor = nil } else { - self.colorPickerType = .gradientColors + self.colorPickerType = .gradientColor1 self.gradientColorsFormStackView.isHidden = false } } @@ -333,14 +257,6 @@ class TileContainerViewController: BaseViewController { } } - func gradientColorTapped(_ sender: Button, view: UIView?) { - selectedGradientColorView = view - let selectedColor = (sender.tag == 1) ? selectedGradient1Color : selectedGradient2Color - if let selectedColor { - colorPicker.selectedColor = UIColor(hexString: selectedColor) - } - present(colorPicker, animated: true) - } } extension TileContainerViewController: ComponentSampleable { @@ -354,6 +270,14 @@ extension TileContainerViewController: ComponentSampleable { extension TileContainerViewController: UIColorPickerViewControllerDelegate { + func selectedColorTapped(_ picker: ColorPickerView) { + let selectedColor = picker.selectedColor + if let selectedColor { + colorPicker.selectedColor = selectedColor + } + present(colorPicker, animated: true) + } + func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) { dismiss(animated: true) } @@ -365,17 +289,19 @@ extension TileContainerViewController: UIColorPickerViewControllerDelegate { component.containerView.backgroundColor = UIColor(hexString: hexString) case .backgroundColor: component.color = .custom(hexString) - case .gradientColors: - guard let selectedGradientColorView else { return } - if selectedGradientColorView.tag == 1 { - selectedGradient1Color = hexString - } else { - selectedGradient2Color = hexString - } - selectedGradientColorView.backgroundColor = UIColor(hexString: hexString) - if let selectedGradient1Color, let selectedGradient2Color { - component.backgroundEffect = .gradient(selectedGradient1Color, selectedGradient2Color) - } + case .gradientColor1: + gradientColorView1.selectedColor = viewController.selectedColor + updateGradientColors() + case .gradientColor2: + gradientColorView2.selectedColor = viewController.selectedColor + updateGradientColors() + } + } + + func updateGradientColors(){ + if let selectedGradient1Color = gradientColorView1.selectedColor?.hexString, + let selectedGradient2Color = gradientColorView2.selectedColor?.hexString{ + component.backgroundEffect = .gradient(selectedGradient1Color, selectedGradient2Color) } } } @@ -429,12 +355,7 @@ extension TileContainerViewController { } } } - - //Internal helper enum to identiy the configuration - enum ColorPickerType { - case backgroundColor, gradientColors, contentViewBackgroundColor - } - + //Internal helper enum to map padding & pass custom padding values public enum Padding: String, CaseIterable { case padding3X