SheetImagePicker/SheetImagePickerTest/ViewController.swift

132 lines
5.1 KiB
Swift

//
// 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()
}
}