NewsBlur/clients/ios/Classes/HorizontalPageDelegate.swift

77 lines
3.5 KiB
Swift
Raw Normal View History

//
// HorizontalPageDelegate.swift
// NewsBlur
//
// Created by David Sinclair on 2020-09-24.
// Copyright © 2020 NewsBlur. All rights reserved.
//
import UIKit
//#warning("hack: this function is just for testing")
//func storyViewController() -> OriginalStoryViewController {
// let viewController = OriginalStoryViewController()
//
// if let appDelegate = UIApplication.shared.delegate as? NewsBlurAppDelegate {
// let urls = ["https://dejal.com/", "https://dejus.com/", "https://yellowcottagehomestead.com/", "https://apple.com", "https://amazon.com"]
//
// appDelegate.activeOriginalStoryURL = URL(string: urls.randomElement() ?? "https://dejal.com/")
// }
//
// _ = viewController.view
// viewController.loadInitialStory()
//
// return viewController
//}
/// Delegate and data source of the story horizontal page view controller.
class HorizontalPageDelegate: NSObject {
}
extension HorizontalPageDelegate: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let pageViewController = pageViewController as? HorizontalPageViewController, let currentViewController = viewController as? VerticalPageViewController, let detailViewController = pageViewController.detailViewController else {
return nil
}
let pageIndex = (currentViewController.pageIndex ?? -1) - 1
let previousViewController = detailViewController.pageIndexIsValid(pageIndex) ? Storyboards.shared.controller(withIdentifier: .verticalPages) as? VerticalPageViewController : nil
pageViewController.previousController = previousViewController
previousViewController?.horizontalPageViewController = pageViewController
previousViewController?.currentController = detailViewController.makeStoryController(for: pageIndex)
return previousViewController
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let pageViewController = pageViewController as? HorizontalPageViewController, let currentViewController = viewController as? VerticalPageViewController, let detailViewController = pageViewController.detailViewController else {
return nil
}
var pageIndex = (currentViewController.pageIndex ?? -1) + 1
if pageIndex == -1 {
pageIndex = 0
}
let nextViewController = detailViewController.pageIndexIsValid(pageIndex) ? Storyboards.shared.controller(withIdentifier: .verticalPages) as? VerticalPageViewController : nil
pageViewController.nextController = nextViewController
nextViewController?.horizontalPageViewController = pageViewController
nextViewController?.currentController = detailViewController.makeStoryController(for: pageIndex)
return nextViewController
}
}
extension HorizontalPageDelegate: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
guard let pageViewController = pageViewController as? HorizontalPageViewController, let detailViewController = pageViewController.detailViewController else {
return
}
detailViewController.setStoryFromScroll(false)
}
}