This repository was archived by the owner on Nov 26, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 784
/
Copy pathPageViewController.swift
138 lines (104 loc) · 4.75 KB
/
PageViewController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//
// PageViewController.swift
// FolioReaderKit
//
// Created by Heberti Almeida on 14/07/16.
// Copyright © 2016 FolioReader. All rights reserved.
//
import UIKit
class PageViewController: UIPageViewController {
var segmentedControl: UISegmentedControl!
var viewList = [UIViewController]()
var segmentedControlItems = [String]()
var viewControllerOne: UIViewController!
var viewControllerTwo: UIViewController!
var index: Int
fileprivate var readerConfig: FolioReaderConfig
fileprivate var folioReader: FolioReader
// MARK: Init
init(folioReader: FolioReader, readerConfig: FolioReaderConfig) {
self.folioReader = folioReader
self.readerConfig = readerConfig
self.index = self.folioReader.currentMenuIndex
super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = true
}
required init?(coder: NSCoder) {
fatalError("storyboards are incompatible with truth and beauty")
}
override func viewDidLoad() {
super.viewDidLoad()
segmentedControl = UISegmentedControl(items: segmentedControlItems)
segmentedControl.addTarget(self, action: #selector(PageViewController.didSwitchMenu(_:)), for: UIControl.Event.valueChanged)
segmentedControl.selectedSegmentIndex = index
segmentedControl.setWidth(100, forSegmentAt: 0)
segmentedControl.setWidth(100, forSegmentAt: 1)
self.navigationItem.titleView = segmentedControl
viewList = [viewControllerOne, viewControllerTwo]
viewControllerOne.didMove(toParent: self)
viewControllerTwo.didMove(toParent: self)
self.delegate = self
self.dataSource = self
self.view.backgroundColor = UIColor.white
self.setViewControllers([viewList[index]], direction: .forward, animated: false, completion: nil)
// FIXME: This disable scroll because of highlight swipe to delete, if you can fix this would be awesome
for view in self.view.subviews {
if view is UIScrollView {
let scroll = view as! UIScrollView
scroll.bounces = false
}
}
self.setCloseButton(withConfiguration: self.readerConfig)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
configureNavBar()
}
func configureNavBar() {
let navBackground = self.folioReader.isNight(self.readerConfig.nightModeMenuBackground,self.readerConfig.daysModeNavBackground)
let tintColor = self.readerConfig.tintColor
let navText = self.folioReader.isNight(UIColor.white, UIColor.black)
let font = UIFont(name: "Avenir-Light", size: 17)!
setTranslucentNavigation(false, color: navBackground, tintColor: tintColor, titleColor: navText, andFont: font)
}
// MARK: - Segmented control changes
@objc func didSwitchMenu(_ sender: UISegmentedControl) {
self.index = sender.selectedSegmentIndex
let direction: UIPageViewController.NavigationDirection = (index == 0 ? .reverse : .forward)
setViewControllers([viewList[index]], direction: direction, animated: true, completion: nil)
self.folioReader.currentMenuIndex = index
}
// MARK: - Status Bar
override var preferredStatusBarStyle : UIStatusBarStyle {
return self.folioReader.isNight(.lightContent, .default)
}
}
// MARK: UIPageViewControllerDelegate
extension PageViewController: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
if finished && completed {
let viewController = pageViewController.viewControllers?.last
segmentedControl.selectedSegmentIndex = viewList.index(of: viewController!)!
}
}
}
// MARK: UIPageViewControllerDataSource
extension PageViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let index = viewList.index(of: viewController)!
if index == viewList.count - 1 {
return nil
}
self.index = self.index + 1
return viewList[self.index]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let index = viewList.index(of: viewController)!
if index == 0 {
return nil
}
self.index = self.index - 1
return viewList[self.index]
}
}