From 75d00f46923e1e3dac2224176f547896a952908c Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 16 Nov 2019 14:19:51 -0600 Subject: [PATCH] Add slide in/out transition for Add Feed / Add Folder. --- iOS/Add/Add.storyboard | 46 ++++++++++++++----- iOS/Add/AddContainerViewController.swift | 48 ++++++++++---------- iOS/Add/AddWebFeedFolderViewController.swift | 16 ++++++- iOS/Add/AddWebFeedViewController.swift | 6 ++- 4 files changed, 77 insertions(+), 39 deletions(-) diff --git a/iOS/Add/Add.storyboard b/iOS/Add/Add.storyboard index 89934d793..047e24941 100644 --- a/iOS/Add/Add.storyboard +++ b/iOS/Add/Add.storyboard @@ -17,7 +17,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -59,21 +59,21 @@ - + - + - - - + + @@ -116,6 +116,22 @@ + + + + + + + + + + + + + + + + @@ -198,11 +214,17 @@ - + + + + + + + - + @@ -410,7 +432,7 @@ - + diff --git a/iOS/Add/AddContainerViewController.swift b/iOS/Add/AddContainerViewController.swift index 5a9245c33..38aeaf2be 100644 --- a/iOS/Add/AddContainerViewController.swift +++ b/iOS/Add/AddContainerViewController.swift @@ -113,7 +113,6 @@ private extension AddContainerViewController { navigationItem.title = NSLocalizedString("Add Web Feed", comment: "Add Web Feed") resetUI() - hideCurrentController() let addFeedController = UIStoryboard.add.instantiateController(ofType: AddWebFeedViewController.self) addFeedController.initialFeed = initialFeed @@ -131,7 +130,6 @@ private extension AddContainerViewController { navigationItem.title = NSLocalizedString("Add Folder", comment: "Add Folder") resetUI() - hideCurrentController() displayContentController(UIStoryboard.add.instantiateController(ofType: AddFolderViewController.self)) } @@ -141,30 +139,32 @@ private extension AddContainerViewController { } func displayContentController(_ controller: AddContainerViewControllerChild) { + if let currentViewController = currentViewController { + + let transition = CATransition() + transition.type = .push + transition.subtype = currentViewController is AddWebFeedViewController ? .fromRight : .fromLeft + containerView.layer.add(transition, forKey: "transition") + + containerView.addSubview(controller.view) + addChild(controller) + controller.didMove(toParent: self) + + currentViewController.willMove(toParent: nil) + currentViewController.view.removeFromSuperview() + currentViewController.removeFromParent() + + } else { + + containerView.addSubview(controller.view) + addChild(controller) + controller.didMove(toParent: self) + + } currentViewController = controller - controller.delegate = self - - addChild(controller) - - containerView.addSubview(controller.view) - controller.view.translatesAutoresizingMaskIntoConstraints = false - controller.view.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true - controller.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true - controller.view.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true - controller.view.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true - - controller.didMove(toParent: self) + currentViewController?.delegate = self } - - func hideCurrentController() { - guard let currentViewController = currentViewController else { - return - } - currentViewController.willMove(toParent: nil) - currentViewController.view.removeFromSuperview() - currentViewController.removeFromParent() - } - + } diff --git a/iOS/Add/AddWebFeedFolderViewController.swift b/iOS/Add/AddWebFeedFolderViewController.swift index b90c55472..8ed6d0227 100644 --- a/iOS/Add/AddWebFeedFolderViewController.swift +++ b/iOS/Add/AddWebFeedFolderViewController.swift @@ -76,8 +76,22 @@ class AddWebFeedFolderViewController: UITableViewController { let cell = tableView.cellForRow(at: indexPath) cell?.accessoryType = .checkmark delegate?.didSelect(container: container) - navigationController?.popViewController(animated: true) + dismiss() } } + // MARK: Actions + + @IBAction func cancel(_ sender: Any) { + dismiss() + } + +} + +private extension AddWebFeedFolderViewController { + + func dismiss() { + dismiss(animated: true) + } + } diff --git a/iOS/Add/AddWebFeedViewController.swift b/iOS/Add/AddWebFeedViewController.swift index c915c0c1c..465fdaee2 100644 --- a/iOS/Add/AddWebFeedViewController.swift +++ b/iOS/Add/AddWebFeedViewController.swift @@ -121,10 +121,12 @@ class AddWebFeedViewController: UITableViewController, AddContainerViewControlle override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.row == 2 { - let folderViewController = UIStoryboard.add.instantiateController(ofType: AddWebFeedFolderViewController.self) + let navController = UIStoryboard.add.instantiateViewController(withIdentifier: "AddWebFeedFolderNavViewController") as! UINavigationController + navController.modalPresentationStyle = .currentContext + let folderViewController = navController.topViewController as! AddWebFeedFolderViewController folderViewController.delegate = self folderViewController.initialContainer = container - navigationController?.pushViewController(folderViewController, animated: true) + present(navController, animated: true) } }