mirror of
https://github.com/SoPat712/YTLitePlus.git
synced 2025-08-22 02:58:45 -04:00
322 lines
12 KiB
Swift
322 lines
12 KiB
Swift
//
|
|
// FirstViewController.swift
|
|
// Alderis Demo
|
|
//
|
|
// Created by Adam Demasi on 15/4/20.
|
|
// Copyright © 2020 HASHBANG Productions. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
import Alderis
|
|
|
|
class FirstViewController: UIViewController {
|
|
|
|
private var color = UIColor(hue: 0.939614, saturation: 0.811765, brightness: 0.333333, alpha: 1)
|
|
|
|
private var colorWell: ColorWell!
|
|
private var uikitWell: UIView?
|
|
|
|
// swiftlint:disable:next function_body_length
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
title = "Alderis Demo"
|
|
if #available(iOS 13, *) {
|
|
view.backgroundColor = .systemBackground
|
|
} else {
|
|
view.backgroundColor = .white
|
|
}
|
|
|
|
#if targetEnvironment(macCatalyst)
|
|
navigationController?.isNavigationBarHidden = true
|
|
#endif
|
|
|
|
let stackView = UIStackView()
|
|
stackView.translatesAutoresizingMaskIntoConstraints = false
|
|
stackView.axis = .vertical
|
|
stackView.alignment = .center
|
|
stackView.spacing = 10
|
|
view.addSubview(stackView)
|
|
|
|
let mainButton = UIButton(type: .system)
|
|
if #available(iOS 15, *) {
|
|
var config = UIButton.Configuration.filled()
|
|
config.buttonSize = .large
|
|
mainButton.configuration = config
|
|
} else {
|
|
mainButton.titleLabel!.font = UIFont.systemFont(ofSize: 34, weight: .semibold)
|
|
}
|
|
mainButton.setTitle("Present", for: .normal)
|
|
mainButton.addTarget(self, action: #selector(self.presentColorPicker), for: .touchUpInside)
|
|
stackView.addArrangedSubview(mainButton)
|
|
|
|
// swiftlint:disable comma
|
|
let buttons: [(title: String, action: Selector)] = [
|
|
("Present with customised title", #selector(presentColorPickerCustomisedTitle)),
|
|
("Present with customised initial tab", #selector(presentColorPickerCustomisedInitialTab)),
|
|
("Present with customised tabs", #selector(presentColorPickerCustomisedTabs)),
|
|
("Present with tabs hidden", #selector(presentColorPickerNoTabs)),
|
|
("Present with customised title, tabs hidden", #selector(presentColorPickerCustomisedTitleNoTabs)),
|
|
("Present without alpha", #selector(presentColorPickerNoAlpha)),
|
|
("Present without overriding Smart Invert", #selector(presentColorPickerNoOverrideSmartInvert)),
|
|
("Present using deprecated API", #selector(presentColorPickerDeprecatedAPI)),
|
|
("Present UIKit Color Picker", #selector(presentUIKitColorPicker))
|
|
]
|
|
// swiftlint:enable comma
|
|
|
|
for item in buttons {
|
|
let button = UIButton(type: .system)
|
|
if #available(iOS 15, *) {
|
|
var config = UIButton.Configuration.plain()
|
|
config.buttonSize = .mini
|
|
config.macIdiomStyle = .borderlessTinted
|
|
button.configuration = config
|
|
}
|
|
button.setTitle(item.title, for: .normal)
|
|
button.addTarget(self, action: item.action, for: .touchUpInside)
|
|
stackView.addArrangedSubview(button)
|
|
}
|
|
|
|
let spacerView = UIView()
|
|
stackView.addArrangedSubview(spacerView)
|
|
|
|
let wellsLabel = UILabel()
|
|
wellsLabel.font = UIFont.preferredFont(forTextStyle: .headline)
|
|
wellsLabel.textAlignment = .center
|
|
wellsLabel.text = "Color wells (try out drag and drop!)"
|
|
stackView.addArrangedSubview(wellsLabel)
|
|
|
|
colorWell = ColorWell()
|
|
colorWell.isDragInteractionEnabled = true
|
|
colorWell.isDropInteractionEnabled = true
|
|
colorWell.addTarget(self, action: #selector(self.colorWellValueChanged(_:)), for: .valueChanged)
|
|
colorWell.addTarget(self, action: #selector(self.presentColorPicker), for: .touchUpInside)
|
|
|
|
let dragOrDropColorWell = ColorWell()
|
|
dragOrDropColorWell.isDragInteractionEnabled = true
|
|
dragOrDropColorWell.isDropInteractionEnabled = true
|
|
dragOrDropColorWell.color = .systemPurple
|
|
|
|
let nonDraggableWell = ColorWell()
|
|
nonDraggableWell.isDragInteractionEnabled = false
|
|
nonDraggableWell.isDropInteractionEnabled = true
|
|
nonDraggableWell.color = .systemOrange
|
|
|
|
let nonDroppableWell = ColorWell()
|
|
nonDroppableWell.isDragInteractionEnabled = true
|
|
nonDroppableWell.isDropInteractionEnabled = false
|
|
nonDroppableWell.color = .systemTeal
|
|
|
|
let nonDragOrDropWell = ColorWell()
|
|
nonDragOrDropWell.isDragInteractionEnabled = false
|
|
nonDragOrDropWell.isDropInteractionEnabled = false
|
|
nonDragOrDropWell.color = .systemGreen
|
|
|
|
let wellsStackView = UIStackView(arrangedSubviews: [colorWell,
|
|
dragOrDropColorWell,
|
|
nonDraggableWell,
|
|
nonDroppableWell,
|
|
nonDragOrDropWell])
|
|
wellsStackView.translatesAutoresizingMaskIntoConstraints = false
|
|
wellsStackView.axis = .horizontal
|
|
wellsStackView.alignment = .center
|
|
wellsStackView.spacing = 10
|
|
|
|
if #available(iOS 14, *) {
|
|
let uikitWell = UIColorWell()
|
|
uikitWell.addTarget(self, action: #selector(self.uikitColorWellValueChanged(_:)), for: .valueChanged)
|
|
wellsStackView.addArrangedSubview(uikitWell)
|
|
self.uikitWell = uikitWell
|
|
}
|
|
|
|
stackView.addArrangedSubview(wellsStackView)
|
|
|
|
NSLayoutConstraint.activate([
|
|
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15),
|
|
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15),
|
|
stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
|
|
|
|
spacerView.heightAnchor.constraint(equalToConstant: 0)
|
|
])
|
|
|
|
var isMac = false
|
|
if #available(iOS 14, *) {
|
|
isMac = UIDevice.current.userInterfaceIdiom == .mac
|
|
}
|
|
|
|
NSLayoutConstraint.activate(wellsStackView.arrangedSubviews.flatMap { view in
|
|
[
|
|
view.widthAnchor.constraint(equalToConstant: isMac ? 24 : 32),
|
|
view.heightAnchor.constraint(equalTo: view.widthAnchor)
|
|
]
|
|
})
|
|
}
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
super.viewDidAppear(animated)
|
|
|
|
view.window!.tintColor = color
|
|
colorWell.color = color
|
|
if #available(iOS 14, *),
|
|
let uikitWell = uikitWell as? UIColorWell {
|
|
uikitWell.selectedColor = color
|
|
}
|
|
}
|
|
|
|
@objc func colorWellValueChanged(_ sender: ColorWell) {
|
|
NSLog("Color well value changed with value %@", String(describing: sender.color))
|
|
view.window!.tintColor = sender.color
|
|
if #available(iOS 14, *),
|
|
let uikitWell = uikitWell as? UIColorWell {
|
|
uikitWell.selectedColor = sender.color
|
|
}
|
|
}
|
|
|
|
@available(iOS 14, *)
|
|
@objc func uikitColorWellValueChanged(_ sender: UIColorWell) {
|
|
NSLog("UIKit color well value changed with value %@", String(describing: sender.selectedColor))
|
|
view.window!.tintColor = sender.selectedColor
|
|
colorWell.color = sender.selectedColor
|
|
}
|
|
|
|
@objc func presentColorPicker(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerCustomisedTitle(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.title = "Select an Awesome Color"
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerCustomisedInitialTab(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.initialTab = .map
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerCustomisedTabs(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.visibleTabs = [.map, .sliders]
|
|
configuration.initialTab = .sliders
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerNoAlpha(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color.withAlphaComponent(0.5))
|
|
configuration.supportsAlpha = false
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerNoTabs(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.showTabs = false
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerCustomisedTitleNoTabs(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.title = "Select an Awesome Color"
|
|
configuration.showTabs = false
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerNoOverrideSmartInvert(_ sender: UIView) {
|
|
let configuration = ColorPickerConfiguration(color: color)
|
|
configuration.overrideSmartInvert = false
|
|
|
|
let colorPickerViewController = ColorPickerViewController(configuration: configuration)
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentColorPickerDeprecatedAPI(_ sender: UIView) {
|
|
let colorPickerViewController = ColorPickerViewController()
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.color = color
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
}
|
|
|
|
@objc func presentUIKitColorPicker(_ sender: UIView) {
|
|
if #available(iOS 14, *) {
|
|
let colorPickerViewController = UIColorPickerViewController()
|
|
colorPickerViewController.delegate = self
|
|
colorPickerViewController.selectedColor = color
|
|
colorPickerViewController.popoverPresentationController?.sourceView = sender
|
|
tabBarController!.present(colorPickerViewController, animated: true)
|
|
} else {
|
|
fatalError("UIColorPickerViewController is only available as of iOS 14")
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension FirstViewController: ColorPickerDelegate {
|
|
|
|
func colorPicker(_ colorPicker: ColorPickerViewController, didSelect color: UIColor) {
|
|
NSLog("User selected color %@ (%@)", color.propertyListValue, String(describing: color))
|
|
self.color = color
|
|
view.window!.tintColor = color
|
|
colorWell.color = color
|
|
}
|
|
|
|
func colorPicker(_ colorPicker: ColorPickerViewController, didAccept color: UIColor) {
|
|
NSLog("User accepted color %@ (%@)", color.propertyListValue, String(describing: color))
|
|
}
|
|
|
|
func colorPickerDidCancel(_ colorPicker: ColorPickerViewController) {
|
|
NSLog("Color picker cancelled")
|
|
}
|
|
|
|
}
|
|
|
|
@available(iOS 14, *)
|
|
extension FirstViewController: UIColorPickerViewControllerDelegate {
|
|
|
|
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
|
|
NSLog("UIKit color picker value changed with color %@ (%@)",
|
|
viewController.selectedColor.propertyListValue,
|
|
String(describing: viewController.selectedColor))
|
|
color = viewController.selectedColor
|
|
view.window!.tintColor = viewController.selectedColor
|
|
if let uikitWell = uikitWell as? UIColorWell {
|
|
uikitWell.selectedColor = viewController.selectedColor
|
|
}
|
|
}
|
|
|
|
func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
|
|
NSLog("UIKit color picker finished")
|
|
}
|
|
|
|
}
|