// // ViewController.swift // SheetImagePickerTest // // Created by Shadowfacts on 9/23/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import UIKit import SheetImagePicker class ViewController: UIViewController { var sheet: SheetContainerViewController! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. view.backgroundColor = .green } @IBAction func plainPressed(_ sender: Any) { let content = UIViewController() content.view.translatesAutoresizingMaskIntoConstraints = false let blurEffect = UIBlurEffect(style: .systemChromeMaterial) let blurView = UIVisualEffectView(effect: blurEffect) blurView.translatesAutoresizingMaskIntoConstraints = false let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.text = "Hello, sheet!" blurView.contentView.addSubview(label) content.view.addSubview(blurView) NSLayoutConstraint.activate([ content.view.leadingAnchor.constraint(equalTo: blurView.contentView.leadingAnchor), content.view.trailingAnchor.constraint(equalTo: blurView.contentView.trailingAnchor), content.view.topAnchor.constraint(equalTo: blurView.contentView.topAnchor), content.view.bottomAnchor.constraint(equalTo: blurView.contentView.bottomAnchor), label.centerXAnchor.constraint(equalTo: blurView.contentView.centerXAnchor), label.centerYAnchor.constraint(equalTo: blurView.contentView.centerYAnchor) ]) sheet = SheetContainerViewController(content: content) sheet.delegate = self sheet.detents = [.bottom, .middle, .top] present(sheet, animated: true) } @IBAction func tablePressed(_ sender: Any) { let content = ContentTableViewController() content.view.translatesAutoresizingMaskIntoConstraints = false content.view.layer.masksToBounds = true content.view.layer.cornerRadius = view.bounds.width * 0.02 sheet = SheetContainerViewController(content: content) sheet.delegate = self sheet.detents = [.bottom, .middle, .top] present(sheet, animated: true) } @IBAction func navPressed(_ sender: Any) { let root = UIViewController() root.view.backgroundColor = .systemBackground let label = UILabel() label.text = "Root VC" label.translatesAutoresizingMaskIntoConstraints = false root.view.addSubview(label) NSLayoutConstraint.activate([ label.centerXAnchor.constraint(equalTo: root.view.centerXAnchor), label.centerYAnchor.constraint(equalTo: root.view.centerYAnchor) ]) let nav = UINavigationController(rootViewController: root) nav.view.translatesAutoresizingMaskIntoConstraints = false nav.view.layer.masksToBounds = true nav.view.layer.cornerRadius = view.bounds.width * 0.02 sheet = SheetContainerViewController(content: nav) sheet.delegate = self sheet.detents = [.bottom, .middle, .top] present(sheet, animated: true) } @IBAction func navTablePressed(_ sender: Any) { let table = ContentTableViewController() let nav = UINavigationController(rootViewController: table) nav.delegate = self nav.view.translatesAutoresizingMaskIntoConstraints = false nav.view.layer.masksToBounds = true nav.view.layer.cornerRadius = view.bounds.width * 0.02 sheet = SheetContainerViewController(content: nav) sheet.delegate = self sheet.detents = [.bottom, .middle, .top] present(sheet, animated: true) } } extension ViewController: SheetContainerViewControllerDelegate { func sheetContainer(_ sheetContainer: SheetContainerViewController, willSnapToDetent detent: Detent) -> Bool { if detent == .bottom { sheetContainer.dismiss(animated: true) return false } return true } func sheetContainerContentScrollView(_ sheetContainer: SheetContainerViewController) -> UIScrollView? { if let navController = sheetContainer.content as? UINavigationController, let scrollView = navController.visibleViewController?.view as? UIScrollView { return scrollView } else { return nil } } func sheetContainer(_ sheetContainer: SheetContainerViewController, topContentOffsetForScrollView scrollView: UIScrollView) -> CGFloat { if let navController = sheetContainer.content as? UINavigationController, navController.visibleViewController?.view is UIScrollView { return -navController.navigationBar.bounds.height } else { return 0 } } } extension ViewController: UINavigationControllerDelegate { func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { sheet.contentScrollViewChanged() } }