From 0aae405bb868b2c7ddef347b197b27149101d970 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 5 Jul 2023 16:04:47 -0500 Subject: [PATCH] added fullscreen Signed-off-by: Matt Bruce --- .../LoaderViewController.swift | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/VDSSample/ViewControllers/LoaderViewController.swift b/VDSSample/ViewControllers/LoaderViewController.swift index cfe23d8..7644e9c 100644 --- a/VDSSample/ViewControllers/LoaderViewController.swift +++ b/VDSSample/ViewControllers/LoaderViewController.swift @@ -7,10 +7,12 @@ import Foundation import VDS +import UIKit -class LoaderViewController: BaseViewController { +class LoaderViewController: BaseViewController, LoaderLaunchable { var isActive = Toggle().with { $0.isOn = true } + var isFullscreen = Toggle().with { $0.isOn = false } override func viewDidLoad() { super.viewDidLoad() @@ -23,11 +25,30 @@ class LoaderViewController: BaseViewController { super.setupForm() addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Active", view: .makeWrapper(for: isActive)) - - isActive.publisher(for: .valueChanged) + addFormRow(label: "Fullscreen", view: .makeWrapper(for: isFullscreen)) + + isActive + .publisher(for: .valueChanged) .sink { [weak self] toggle in self?.component.isActive = toggle.isOn }.store(in: &subscribers) + + isFullscreen + .publisher(for: .valueChanged) + .sink { [weak self] toggle in + guard let self else { return } + self.showLoader(fullScreen: toggle.isOn) + }.store(in: &subscribers) + } + + func showLoader(fullScreen: Bool) { + if fullScreen { + component.isHidden = true + presentLoader(surface: self.component.surface) + } else { + dismissLoader() + component.isHidden = false + } } func setupPicker() { @@ -36,4 +57,25 @@ class LoaderViewController: BaseViewController { self?.contentTopView.backgroundColor = item.color } } + + public func presentLoader(surface: Surface, size: Int? = nil) { + if let presenting = UIApplication.topViewController() { + let viewController = VDS.LoaderViewController(nibName: nil, bundle: nil).with { + $0.surface = surface + if let size { + $0.size = size + } + $0.modalPresentationStyle = .overFullScreen + $0.modalTransitionStyle = .crossDissolve + } + viewController.view + .publisher(for: UITapGestureRecognizer()) + .sink {[weak self] tap in + guard let self else { return } + self.isFullscreen.isOn = false + self.showLoader(fullScreen: false) + }.store(in: &subscribers) + presenting.present(viewController, animated: true) + } + } }