vds_ios_sample/VDSSample/ViewControllers/DropShawdowViewController.swift
Matt Bruce d345e8cb32 refactored to use new methods
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2023-06-15 12:42:59 -05:00

235 lines
9.0 KiB
Swift

//
// DropShawdowViewController.swift
// VDSSample
//
// Created by Matt Bruce on 6/13/23.
//
import Foundation
import UIKit
import VDS
import VDSColorTokens
import Combine
class DropShadowViewController: BaseViewController<View> {
var shadowLightColor: UIColor.VDSColor = .backgroundPrimaryDark { didSet { updateView() }}
var shadowDarkColor: UIColor.VDSColor = .backgroundPrimaryLight { didSet { updateView() }}
var viewLightColor: UIColor.VDSColor = .paletteGray65 { didSet { updateView() }}
var viewDarkColor: UIColor.VDSColor = .backgroundPrimaryLight { didSet { updateView() }}
var viewPaddingRange = Slider()
var viewRadiusRange = Slider()
var opacityRange = Slider()
var radiusRange = Slider()
var offsetXRange = Slider()
var offsetYRange = Slider()
var viewSpacerRange = Slider()
var viewSize: CGFloat = 100.0
var componentWrapper: UIView!
var componentConstraints: NSLayoutConstraint.Container!
var secondView = View()
var thirdView = View()
lazy var dropShadowLightColorPickerSelectorView = {
PickerSelectorView(title: "",
picker: self.picker,
items: UIColor.VDSColor.allCases)
}()
lazy var dropShadowDarkColorPickerSelectorView = {
PickerSelectorView(title: "",
picker: self.picker,
items: UIColor.VDSColor.allCases)
}()
lazy var viewLightColorPickerSelectorView = {
PickerSelectorView(title: "",
picker: self.picker,
items: UIColor.VDSColor.allCases)
}()
lazy var viewDarkColorPickerSelectorView = {
PickerSelectorView(title: "",
picker: self.picker,
items: UIColor.VDSColor.allCases)
}()
var spacer: CGFloat = 10 {
didSet {
spacings.forEach{ $0.constant = spacer }
}
}
var viewPadding: CGFloat = 0 {
didSet {
componentConstraints.topConstraint?.constant = viewPadding
componentConstraints.leadingConstraint?.constant = viewPadding
componentConstraints.trailingConstraint?.constant = -viewPadding
componentConstraints.bottomConstraint?.constant = -viewPadding
}
}
var spacings = [NSLayoutConstraint]()
override func viewDidLoad() {
super.viewDidLoad()
let wrapper = UIView.makeWrapperWithConstraints(for: component, isTrailing: false)
componentWrapper = wrapper.view
componentConstraints = wrapper.container
contentTopView.addSubview(secondView)
contentTopView.addSubview(thirdView)
contentTopView.addSubview(componentWrapper)
component.width(viewSize).height(viewSize)
secondView.width(viewSize).height(viewSize)
thirdView.width(viewSize).height(viewSize)
componentWrapper.pinTop().pinLeading()
secondView.pinTop()
thirdView.pinLeading().pinBottom()
secondView.pinTrailingLessThanOrEqualTo(contentTopView.trailingAnchor)
secondView.pinBottomLessThanOrEqualTo(contentTopView.bottomAnchor)
thirdView.pinTrailingLessThanOrEqualTo(contentTopView.trailingAnchor)
spacings.append(thirdView.topAnchor.constraint(equalTo: componentWrapper.bottomAnchor))
spacings.append(secondView.leadingAnchor.constraint(equalTo: componentWrapper.trailingAnchor))
spacings.forEach{ $0.isActive = true }
viewPadding = 10
setupPicker()
setupModel()
updateView()
}
override func showDebug(show: Bool) {
super.showDebug(show: show)
component.debugBorder(show: false)
componentWrapper.debugBorder(show: show, color: .green)
secondView.debugBorder(show: show, color: .green)
thirdView.debugBorder(show: show, color: .green)
}
override func setupForm(){
super.setupForm()
addFormRow(label: "Surface", view: surfacePickerSelectorView)
addFormRow(label: "Space Between Views", view: viewSpacerRange)
addFormRow(label: "View Padding", view: viewPaddingRange)
addFormRow(label: "View Corner Radius", view: viewRadiusRange)
addFormRow(label: "View Light", view: viewLightColorPickerSelectorView)
addFormRow(label: "View Dark", view: viewDarkColorPickerSelectorView)
addFormRow(label: "Shawdow Light", view: dropShadowLightColorPickerSelectorView)
addFormRow(label: "Shawdow Dark", view: dropShadowDarkColorPickerSelectorView)
addFormRow(label: "Opacity", view: opacityRange)
addFormRow(label: "Radius (Blur)", view: radiusRange)
addFormRow(label: "Width (OffSet X)", view: offsetXRange)
addFormRow(label: "Height (Offset Y)", view: offsetYRange)
opacityRange.maximumValue = 1.0
opacityRange.minimumValue = 0.0
opacityRange.value = 1.0
opacityRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.updateView()
}).store(in: &subscribers)
radiusRange.maximumValue = 20.0
radiusRange.minimumValue = 0.0
radiusRange.value = 2.0
radiusRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.updateView()
}).store(in: &subscribers)
offsetXRange.maximumValue = 20
offsetXRange.minimumValue = -20
offsetXRange.value = 2.0
offsetXRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.updateView()
}).store(in: &subscribers)
offsetYRange.maximumValue = 20
offsetYRange.minimumValue = -20
offsetYRange.value = 2.0
offsetYRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.updateView()
}).store(in: &subscribers)
viewPaddingRange.maximumValue = 50.0
viewPaddingRange.minimumValue = 0.0
viewPaddingRange.value = 2.0
viewPaddingRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.viewPadding = CGFloat(slider.value)
self?.updateView()
}).store(in: &subscribers)
viewRadiusRange.maximumValue = Float(viewSize / 2)
viewRadiusRange.minimumValue = 0
viewRadiusRange.value = 8.0
viewRadiusRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.updateView()
}).store(in: &subscribers)
viewSpacerRange.maximumValue = 50
viewSpacerRange.minimumValue = 0
viewSpacerRange.value = 10.0
viewSpacerRange.publisher(for: .valueChanged).sink(receiveValue: { [weak self] slider in
self?.spacer = CGFloat(slider.value)
}).store(in: &subscribers)
dropShadowLightColorPickerSelectorView.text = shadowLightColor.rawValue
dropShadowDarkColorPickerSelectorView.text = shadowDarkColor.rawValue
viewLightColorPickerSelectorView.text = viewLightColor.rawValue
viewDarkColorPickerSelectorView.text = viewDarkColor.rawValue
}
func setupModel() {
//setup UI
surfacePickerSelectorView.text = component.surface.rawValue
}
override func updateView() {
let surface = surfacePickerSelectorView.selectedItem
let dropshadowColor = SurfaceColorConfiguration(shadowLightColor.uiColor, shadowDarkColor.uiColor).getColor(surface)
let viewColor = SurfaceColorConfiguration(viewLightColor.uiColor, viewDarkColor.uiColor).getColor(surface)
secondView.backgroundColor = .red
thirdView.backgroundColor = .purple
component.layer.cornerRadius = CGFloat(viewRadiusRange.value)
component.layer.masksToBounds = false
component.backgroundColor = viewColor
component.layer.shadowColor = dropshadowColor.cgColor
component.layer.shadowOpacity = Float(opacityRange.value)
component.layer.shadowOffset = .init(width: CGFloat(offsetXRange.value), height: CGFloat(offsetYRange.value))
component.layer.shadowRadius = CGFloat(radiusRange.value)
}
func setupPicker(){
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.contentTopView.backgroundColor = item.color
self?.updateView()
}
dropShadowDarkColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.shadowDarkColor = item
}
dropShadowLightColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.shadowLightColor = item
}
viewLightColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.viewLightColor = item
}
viewDarkColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.viewDarkColor = item
}
}
}