From fa6bb87cb10c52d890f6bf0fe6988f11ed37cc3f Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 18 Apr 2024 15:02:27 -0500 Subject: [PATCH] added selected color Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 8 ++- VDSSample/Classes/ColorPickerView.swift | 68 +++++++++++++++++++ .../ButtonIconViewController.swift | 54 ++++++++++++++- 3 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 VDSSample/Classes/ColorPickerView.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 5fbd5e1..fc9f459 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -61,6 +61,7 @@ EA5E30552950EA6E0082B959 /* TitleLockupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E30542950EA6E0082B959 /* TitleLockupViewController.swift */; }; EA5E305C295111050082B959 /* TileletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E305B295111050082B959 /* TileletViewController.swift */; }; EA5F86CE2A1E863F00BC83E4 /* TabsContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5F86CD2A1E863F00BC83E4 /* TabsContainerViewController.swift */; }; + EA6642972BD1B2E700D81DC4 /* ColorPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6642962BD1B2E700D81DC4 /* ColorPickerView.swift */; }; EA81410E2A0ED8DC004F60D2 /* ButtonIconViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */; }; EA89201928B56DF5006B9984 /* RadioBoxGroupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */; }; EA89204628B66CE2006B9984 /* ScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89203F28B66CE2006B9984 /* ScrollViewController.swift */; }; @@ -155,6 +156,7 @@ EA5E30542950EA6E0082B959 /* TitleLockupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLockupViewController.swift; sourceTree = ""; }; EA5E305B295111050082B959 /* TileletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TileletViewController.swift; sourceTree = ""; }; EA5F86CD2A1E863F00BC83E4 /* TabsContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabsContainerViewController.swift; sourceTree = ""; }; + EA6642962BD1B2E700D81DC4 /* ColorPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorPickerView.swift; sourceTree = ""; }; EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIconViewController.swift; sourceTree = ""; }; EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroupViewController.swift; sourceTree = ""; }; EA89203F28B66CE2006B9984 /* ScrollViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollViewController.swift; sourceTree = ""; }; @@ -263,9 +265,10 @@ EA89204F28B682F4006B9984 /* Classes */ = { isa = PBXGroup; children = ( - EA89205028B68307006B9984 /* TextField.swift */, - EAD062A42A3B5CDF0015965D /* Slider.swift */, + EA6642962BD1B2E700D81DC4 /* ColorPickerView.swift */, EAB5FEF22928153D00998C17 /* Helper.swift */, + EAD062A42A3B5CDF0015965D /* Slider.swift */, + EA89205028B68307006B9984 /* TextField.swift */, ); path = Classes; sourceTree = ""; @@ -515,6 +518,7 @@ EAD062AD2A3B86950015965D /* BadgeIndicatorViewController.swift in Sources */, EA5E305C295111050082B959 /* TileletViewController.swift in Sources */, EAD062A32A3913920015965D /* DropShawdowViewController.swift in Sources */, + EA6642972BD1B2E700D81DC4 /* ColorPickerView.swift in Sources */, EA0D1C312A673F3500E5C127 /* RadioButtonViewController.swift in Sources */, EAB5FEF32928153D00998C17 /* Helper.swift in Sources */, EA89204728B66CE2006B9984 /* KeyboardFrameChangeListener.swift in Sources */, diff --git a/VDSSample/Classes/ColorPickerView.swift b/VDSSample/Classes/ColorPickerView.swift new file mode 100644 index 0000000..a340698 --- /dev/null +++ b/VDSSample/Classes/ColorPickerView.swift @@ -0,0 +1,68 @@ +// +// ColorPickerView.swift +// VDSSample +// +// Created by Matt Bruce on 4/18/24. +// + +import Foundation +import UIKit +import VDS + +public class ColorPickerView: UIStackView { + public var pickerType: EnumType + public var selectedColor: UIColor? { + didSet { + selectedColorView.backgroundColor = selectedColor + } + } + + var selectedColorView: UIView = { + let view = UIView() + view.translatesAutoresizingMaskIntoConstraints = false + view.widthAnchor.constraint(equalToConstant: 20).isActive = true + view.heightAnchor.constraint(equalToConstant: 20).isActive = true + return view + }() + + var button = Button().with { + $0.size = .small + $0.use = .secondary + $0.text = "Select" + } + + public init(with pickerType: EnumType, onClick: @escaping (ColorPickerView)->Void) { + self.pickerType = pickerType + super.init(frame: .zero) + setup() + button.onClick = { _ in onClick(self) } + } + + required init(coder: NSCoder) { + fatalError() + } + + private func setup() { + distribution = .fillEqually + alignment = .fill + spacing = 10 + + let indicatorWrapper = View() + indicatorWrapper.addSubview(selectedColorView) + indicatorWrapper.height(32) + indicatorWrapper.pinTop() + indicatorWrapper.pinLeading() + indicatorWrapper.pinBottom() + indicatorWrapper.pinTrailingGreaterThanOrEqualTo(anchor: indicatorWrapper.trailingAnchor) + + addArrangedSubview(indicatorWrapper) + let buttonWrapper = View() + buttonWrapper.addSubview(button) + buttonWrapper.height(32) + button.pinTop() + button.pinTrailing() + button.pinBottom() + button.pinLeadingGreaterThanOrEqualTo(anchor: buttonWrapper.leadingAnchor) + addArrangedSubview(buttonWrapper) + } +} diff --git a/VDSSample/ViewControllers/ButtonIconViewController.swift b/VDSSample/ViewControllers/ButtonIconViewController.swift index 5113cfc..8d3b24a 100644 --- a/VDSSample/ViewControllers/ButtonIconViewController.swift +++ b/VDSSample/ViewControllers/ButtonIconViewController.swift @@ -59,7 +59,7 @@ class ButtonIconViewController: BaseViewController { var selectableSwitch = Toggle() var badgeIndicatorSwitch = Toggle() var variantOneSwitch = Toggle() - + lazy var badgeIndicatorExpandDirectionPickerSelectorView = { PickerSelectorView(title: "right", picker: self.picker, @@ -75,6 +75,32 @@ class ButtonIconViewController: BaseViewController { var badgeIndicatorFormStackView = FormSection().with { $0.isHidden = true } + ///ColorPicker + var colorPickerType: ColorPickerType = .light + enum ColorPickerType { + case light, dark + } + + lazy var colorPicker: UIColorPickerViewController = { + let picker = UIColorPickerViewController() + picker.delegate = self + return picker + }() + + lazy var lightColorPicker: ColorPickerView = { + return .init(with: ColorPickerType.light) {[weak self] picker in + self?.colorPickerType = picker.pickerType + self?.selectedColorTapped(picker) + } + }() + + lazy var darkColorPicker: ColorPickerView = { + return .init(with: ColorPickerType.dark) {[weak self] picker in + self?.colorPickerType = picker.pickerType + self?.selectedColorTapped(picker) + } + }() + override func setupForm(){ super.setupForm() addFormRow(label: "Disabled", view: disabledSwitch) @@ -82,6 +108,8 @@ class ButtonIconViewController: BaseViewController { addFormRow(label: "Surface Type", view: surfaceTypePickerSelectorView) addFormRow(label: "Size", view: sizePickerSelectorView) addFormRow(label: "Kind", view: kindPickerSelectorView) + addFormRow(label: "Selected Light", view: lightColorPicker) + addFormRow(label: "Selected Dark", view: darkColorPicker) addFormRow(label: "Floating", view: floating) addFormRow(label: "Hide Border", view: hideBorder) addFormRow(label: "Fit To Icon", view: fitToIcon) @@ -237,3 +265,27 @@ extension ButtonIconViewController: ComponentSampleable { return ComponentSample(component: component, trailingPinningType: .lessThanOrEqual) } } + +extension ButtonIconViewController: 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) + } + + func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) { + let color = viewController.selectedColor + let selectedColorPickerView = colorPickerType == .dark ? darkColorPicker : lightColorPicker + selectedColorPickerView.selectedColor = color + if let selectedDarkColor = darkColorPicker.selectedColor, let selectedLightColor = lightColorPicker.selectedColor { + component.selectedIconColorConfiguration = .init(selectedLightColor, selectedDarkColor) + } + } +}