Add examples

This commit is contained in:
Shadowfacts 2020-01-01 12:23:09 -05:00
parent e804bf8f74
commit 60e90e7c5c
Signed by: shadowfacts
GPG Key ID: 94A5AB95422746E5
6 changed files with 269 additions and 13 deletions

View File

@ -3,7 +3,7 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 50; objectVersion = 52;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
@ -13,6 +13,8 @@
D6B0536323BD06D800A066FA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536123BD06D800A066FA /* Main.storyboard */; }; D6B0536323BD06D800A066FA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536123BD06D800A066FA /* Main.storyboard */; };
D6B0536523BD06DA00A066FA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536423BD06DA00A066FA /* Assets.xcassets */; }; D6B0536523BD06DA00A066FA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536423BD06DA00A066FA /* Assets.xcassets */; };
D6B0536823BD06DA00A066FA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536623BD06DA00A066FA /* LaunchScreen.storyboard */; }; D6B0536823BD06DA00A066FA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D6B0536623BD06DA00A066FA /* LaunchScreen.storyboard */; };
D6B0537123BD087000A066FA /* SheetController in Frameworks */ = {isa = PBXBuildFile; productRef = D6B0537023BD087000A066FA /* SheetController */; };
D6B0537423BD0AEE00A066FA /* ContentTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B0537323BD0AEE00A066FA /* ContentTableViewController.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@ -24,6 +26,7 @@
D6B0536423BD06DA00A066FA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; D6B0536423BD06DA00A066FA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
D6B0536723BD06DA00A066FA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; D6B0536723BD06DA00A066FA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
D6B0536923BD06DA00A066FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; D6B0536923BD06DA00A066FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D6B0537323BD0AEE00A066FA /* ContentTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentTableViewController.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -31,6 +34,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
D6B0537123BD087000A066FA /* SheetController in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -42,6 +46,7 @@
children = ( children = (
D6B0535A23BD06D800A066FA /* SheetControllerExamples */, D6B0535A23BD06D800A066FA /* SheetControllerExamples */,
D6B0535923BD06D800A066FA /* Products */, D6B0535923BD06D800A066FA /* Products */,
D6B0537223BD099000A066FA /* Frameworks */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@ -59,6 +64,7 @@
D6B0535B23BD06D800A066FA /* AppDelegate.swift */, D6B0535B23BD06D800A066FA /* AppDelegate.swift */,
D6B0535D23BD06D800A066FA /* SceneDelegate.swift */, D6B0535D23BD06D800A066FA /* SceneDelegate.swift */,
D6B0535F23BD06D800A066FA /* ViewController.swift */, D6B0535F23BD06D800A066FA /* ViewController.swift */,
D6B0537323BD0AEE00A066FA /* ContentTableViewController.swift */,
D6B0536123BD06D800A066FA /* Main.storyboard */, D6B0536123BD06D800A066FA /* Main.storyboard */,
D6B0536423BD06DA00A066FA /* Assets.xcassets */, D6B0536423BD06DA00A066FA /* Assets.xcassets */,
D6B0536623BD06DA00A066FA /* LaunchScreen.storyboard */, D6B0536623BD06DA00A066FA /* LaunchScreen.storyboard */,
@ -67,6 +73,13 @@
path = SheetControllerExamples; path = SheetControllerExamples;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
D6B0537223BD099000A066FA /* Frameworks */ = {
isa = PBXGroup;
children = (
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
@ -83,6 +96,9 @@
dependencies = ( dependencies = (
); );
name = SheetControllerExamples; name = SheetControllerExamples;
packageProductDependencies = (
D6B0537023BD087000A066FA /* SheetController */,
);
productName = SheetControllerExamples; productName = SheetControllerExamples;
productReference = D6B0535823BD06D800A066FA /* SheetControllerExamples.app */; productReference = D6B0535823BD06D800A066FA /* SheetControllerExamples.app */;
productType = "com.apple.product-type.application"; productType = "com.apple.product-type.application";
@ -111,6 +127,9 @@
Base, Base,
); );
mainGroup = D6B0534F23BD06D800A066FA; mainGroup = D6B0534F23BD06D800A066FA;
packageReferences = (
D6B0536F23BD087000A066FA /* XCRemoteSwiftPackageReference "SheetController" */,
);
productRefGroup = D6B0535923BD06D800A066FA /* Products */; productRefGroup = D6B0535923BD06D800A066FA /* Products */;
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
@ -140,6 +159,7 @@
files = ( files = (
D6B0536023BD06D800A066FA /* ViewController.swift in Sources */, D6B0536023BD06D800A066FA /* ViewController.swift in Sources */,
D6B0535C23BD06D800A066FA /* AppDelegate.swift in Sources */, D6B0535C23BD06D800A066FA /* AppDelegate.swift in Sources */,
D6B0537423BD0AEE00A066FA /* ContentTableViewController.swift in Sources */,
D6B0535E23BD06D800A066FA /* SceneDelegate.swift in Sources */, D6B0535E23BD06D800A066FA /* SceneDelegate.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -338,6 +358,25 @@
defaultConfigurationName = Release; defaultConfigurationName = Release;
}; };
/* End XCConfigurationList section */ /* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
D6B0536F23BD087000A066FA /* XCRemoteSwiftPackageReference "SheetController" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://git.shadowfacts.net/shadowfacts/SheetController.git";
requirement = {
branch = master;
kind = branch;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
D6B0537023BD087000A066FA /* SheetController */ = {
isa = XCSwiftPackageProductDependency;
package = D6B0536F23BD087000A066FA /* XCRemoteSwiftPackageReference "SheetController" */;
productName = SheetController;
};
/* End XCSwiftPackageProductDependency section */
}; };
rootObject = D6B0535023BD06D800A066FA /* Project object */; rootObject = D6B0535023BD06D800A066FA /* Project object */;
} }

View File

@ -0,0 +1,16 @@
{
"object": {
"pins": [
{
"package": "SheetController",
"repositoryURL": "https://git.shadowfacts.net/shadowfacts/SheetController.git",
"state": {
"branch": "master",
"revision": "ca374422db48f381f46be8b5dae52c944e51daf0",
"version": null
}
}
]
},
"version": 1
}

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies> </dependencies>
@ -9,16 +10,56 @@
<!--View Controller--> <!--View Controller-->
<scene sceneID="tne-QT-ifu"> <scene sceneID="tne-QT-ifu">
<objects> <objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController"> <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="SheetControllerExamples" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/> <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> <subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="zrK-bD-apM">
<rect key="frame" x="173" y="388" width="68" height="120"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3JC-zs-cVL">
<rect key="frame" x="0.0" y="0.0" width="68" height="30"/>
<state key="normal" title="Plain"/>
<connections>
<action selector="plainPressed:" destination="BYZ-38-t0r" eventType="touchUpInside" id="5ex-MR-MbN"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N4f-c5-Nt3">
<rect key="frame" x="0.0" y="30" width="68" height="30"/>
<state key="normal" title="Table"/>
<connections>
<action selector="tablePressed:" destination="BYZ-38-t0r" eventType="touchUpInside" id="0Eg-vT-oaG"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bqv-3e-HFh">
<rect key="frame" x="0.0" y="60" width="68" height="30"/>
<state key="normal" title="Nav"/>
<connections>
<action selector="navPressed:" destination="BYZ-38-t0r" eventType="touchUpInside" id="cWx-NQ-YlW"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vKD-FG-w52">
<rect key="frame" x="0.0" y="90" width="68" height="30"/>
<state key="normal" title="Nav Table"/>
<connections>
<action selector="navTablePressed:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ECd-TP-H0P"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" systemColor="systemYellowColor" red="1" green="0.80000000000000004" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="zrK-bD-apM" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="F2B-yb-fxd"/>
<constraint firstItem="zrK-bD-apM" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="PAc-uh-sPe"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view> </view>
</viewController> </viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects> </objects>
<point key="canvasLocation" x="133" y="139"/>
</scene> </scene>
</scenes> </scenes>
</document> </document>

View File

@ -0,0 +1,65 @@
//
// ContentTableViewController.swift
// SheetControllerExamples
//
// Created by Shadowfacts on 1/1/20.
// Copyright © 2020 Shadowfacts. All rights reserved.
//
import UIKit
class ContentTableViewController: UITableViewController {
init() {
super.init(style: .plain)
}
required init?(coder: NSCoder) {
fatalError()
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "testCell")
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 40
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "testCell", for: indexPath)
cell.textLabel!.text = "\(indexPath.row)"
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let navController = navigationController else { return }
navController.pushViewController(ContentTableViewController(), animated: true)
return
let vc = UIViewController()
vc.view.backgroundColor = .systemBackground
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "\(indexPath.row)"
vc.view.addSubview(label)
NSLayoutConstraint.activate([
label.centerXAnchor.constraint(equalTo: vc.view.centerXAnchor),
label.centerYAnchor.constraint(equalTo: vc.view.centerYAnchor)
])
navController.pushViewController(vc, animated: true)
}
}

View File

@ -50,8 +50,6 @@
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array> </array>
<key>UISupportedInterfaceOrientations~ipad</key> <key>UISupportedInterfaceOrientations~ipad</key>
<array> <array>

View File

@ -7,14 +7,111 @@
// //
import UIKit import UIKit
import SheetController
class ViewController: UIViewController { class ViewController: UIViewController {
override func viewDidLoad() { var sheet: SheetContainerViewController!
super.viewDidLoad()
// Do any additional setup after loading the view. func showSheet(content: UIViewController) {
sheet = SheetContainerViewController(content: content)
sheet.delegate = self
sheet.detents = [.bottom, .middle, .top]
present(sheet, animated: true)
} }
@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)
])
showSheet(content: content)
}
@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
showSheet(content: content)
}
@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
showSheet(content: nav)
}
@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
showSheet(content: nav)
}
} }
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 {
return -navController.navigationBar.bounds.height
} else {
return 0
}
}
}
extension ViewController: UINavigationControllerDelegate {
func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
sheet.contentScrollViewChanged()
}
}