11import UIKit
22
33@objc ( HYPPagesControllerDelegate) public protocol PagesControllerDelegate {
4-
5- func pageViewController( _ pageViewController: UIPageViewController , setViewController viewController: UIViewController , atPage page: Int )
4+ func pageViewController( _ pageViewController: UIPageViewController ,
5+ setViewController viewController: UIViewController ,
6+ atPage page: Int )
67}
78
89@objc ( HYPPagesController) open class PagesController : UIPageViewController {
9-
10- struct Dimensions {
10+ private struct Dimensions {
1111 static let bottomLineHeight : CGFloat = 1.0
1212 static let bottomLineSideMargin : CGFloat = 40.0
1313 static let bottomLineBottomMargin : CGFloat = 36.0
1414 }
1515
16- open var startPage = 0
17- open var setNavigationTitle = true
16+ public var startPage = 0
17+ public var setNavigationTitle = true
1818
19- open var enableSwipe = true {
19+ public var enableSwipe = true {
2020 didSet {
2121 toggle ( )
2222 }
2323 }
2424
25- open var showBottomLine = false {
25+ public var showBottomLine = false {
2626 didSet {
2727 bottomLineView. isHidden = !showBottomLine
2828 }
2929 }
3030
31- open var showPageControl = true
31+ public var showPageControl = true
32+ private lazy var pages = Array < UIViewController > ( )
3233
33- lazy var pages = Array < UIViewController > ( )
34-
35- open var pagesCount : Int {
34+ public var pagesCount : Int {
3635 return pages. count
3736 }
3837
39- open fileprivate( set) var currentIndex = 0
40-
41- open weak var pagesDelegate : PagesControllerDelegate ?
38+ public private( set) var currentIndex = 0
39+ public weak var pagesDelegate : PagesControllerDelegate ?
4240
43- open fileprivate ( set) lazy var bottomLineView : UIView = {
41+ public private ( set) lazy var bottomLineView : UIView = {
4442 let view = UIView ( )
4543 view. translatesAutoresizingMaskIntoConstraints = false
4644 view. backgroundColor = UIColor . white
4745 view. alpha = 0.4
4846 view. isHidden = true
4947 return view
50- } ( )
48+ } ( )
5149
52- open fileprivate ( set) var pageControl : UIPageControl ?
50+ public private ( set) var pageControl : UIPageControl ?
5351
5452 public convenience init ( _ pages: [ UIViewController ] ,
55- transitionStyle: UIPageViewControllerTransitionStyle = . scroll,
56- navigationOrientation: UIPageViewControllerNavigationOrientation = . horizontal,
57- options: [ String : AnyObject ] ? = nil ) {
58- self . init ( transitionStyle: transitionStyle,
59- navigationOrientation: navigationOrientation,
60- options: options)
53+ transitionStyle: UIPageViewControllerTransitionStyle = . scroll,
54+ navigationOrientation: UIPageViewControllerNavigationOrientation = . horizontal,
55+ options: [ String : AnyObject ] ? = nil ) {
56+ self . init (
57+ transitionStyle: transitionStyle,
58+ navigationOrientation: navigationOrientation,
59+ options: options
60+ )
6161
62- add ( pages)
62+ add ( pages)
6363 }
6464
6565 open override func viewDidLoad( ) {
@@ -85,9 +85,9 @@ import UIKit
8585 }
8686}
8787
88- // MARK: Public methods
89- extension PagesController {
88+ // MARK: - Public methods
9089
90+ extension PagesController {
9191 open func goTo( _ index: Int ) {
9292 if index >= 0 && index < pages. count {
9393 let direction : UIPageViewControllerNavigationDirection = ( index > currentIndex) ? . forward : . reverse
@@ -122,16 +122,17 @@ extension PagesController {
122122 }
123123}
124124
125- // MARK: UIPageViewControllerDataSource
125+ // MARK: - UIPageViewControllerDataSource
126126
127127extension PagesController : UIPageViewControllerDataSource {
128-
129- open func pageViewController ( _ pageViewController : UIPageViewController , viewControllerBefore viewController: UIViewController ) -> UIViewController ? {
128+ open func pageViewController ( _ pageViewController : UIPageViewController ,
129+ viewControllerBefore viewController: UIViewController ) -> UIViewController ? {
130130 let index = prevIndex ( viewControllerIndex ( viewController) )
131131 return pages. at ( index)
132132 }
133133
134- open func pageViewController( _ pageViewController: UIPageViewController , viewControllerAfter viewController: UIViewController ) -> UIViewController ? {
134+ open func pageViewController( _ pageViewController: UIPageViewController ,
135+ viewControllerAfter viewController: UIViewController ) -> UIViewController ? {
135136 let index : Int ? = nextIndex ( viewControllerIndex ( viewController) )
136137 return pages. at ( index)
137138 }
@@ -145,40 +146,47 @@ extension PagesController : UIPageViewControllerDataSource {
145146 }
146147}
147148
148- // MARK: UIPageViewControllerDelegate
149+ // MARK: - UIPageViewControllerDelegate
149150
150151extension PagesController : UIPageViewControllerDelegate {
152+ open func pageViewController( _ pageViewController: UIPageViewController ,
153+ didFinishAnimating finished: Bool ,
154+ previousViewControllers: [ UIViewController ] ,
155+ transitionCompleted completed: Bool ) {
156+ guard completed else {
157+ return
158+ }
151159
152- open func pageViewController( _ pageViewController: UIPageViewController , didFinishAnimating finished: Bool ,
153- previousViewControllers: [ UIViewController ] , transitionCompleted completed: Bool ) {
154- if completed {
155- if let viewController = pageViewController. viewControllers? . last,
156- let index = viewControllerIndex ( viewController) {
157- currentIndex = index
160+ guard let viewController = pageViewController. viewControllers? . last else {
161+ return
162+ }
158163
159- if setNavigationTitle {
160- title = viewController . title
161- }
164+ guard let index = viewControllerIndex ( viewController ) else {
165+ return
166+ }
162167
163- if let pageControl = pageControl {
164- pageControl. currentPage = currentIndex
165- }
168+ currentIndex = index
166169
167- pagesDelegate? . pageViewController ( self , setViewController: pages [ currentIndex] , atPage: currentIndex)
168- }
170+ if setNavigationTitle {
171+ title = viewController. title
172+ }
173+
174+ if let pageControl = pageControl {
175+ pageControl. currentPage = currentIndex
169176 }
177+
178+ pagesDelegate? . pageViewController ( self , setViewController: pages [ currentIndex] , atPage: currentIndex)
170179 }
171180}
172181
173- // MARK: Private methods
182+ // MARK: - Private methods
174183
175184extension PagesController {
176-
177185 func viewControllerIndex( _ viewController: UIViewController ) -> Int ? {
178186 return pages. index ( of: viewController)
179187 }
180188
181- fileprivate func toggle( ) {
189+ private func toggle( ) {
182190 for subview in view. subviews {
183191 if let subview = subview as? UIScrollView {
184192 subview. isScrollEnabled = enableSwipe
@@ -187,7 +195,7 @@ extension PagesController {
187195 }
188196 }
189197
190- fileprivate func addViewController( _ viewController: UIViewController ) {
198+ private func addViewController( _ viewController: UIViewController ) {
191199 pages. append ( viewController)
192200
193201 if pages. count == 1 {
@@ -205,7 +213,7 @@ extension PagesController {
205213 }
206214 }
207215
208- fileprivate func addConstraints( ) {
216+ private func addConstraints( ) {
209217 view. addConstraint ( NSLayoutConstraint ( item: bottomLineView, attribute: . bottom,
210218 relatedBy: . equal, toItem: view, attribute: . bottom,
211219 multiplier: 1 , constant: - Dimensions. bottomLineBottomMargin) )
@@ -227,10 +235,8 @@ extension PagesController {
227235// MARK: Storyboard
228236
229237extension PagesController {
230-
231- public convenience init ( _ storyboardIds: [ String ] , storyboard: UIStoryboard = UIStoryboard . Main) {
238+ public convenience init ( _ storyboardIds: [ String ] , storyboard: UIStoryboard = . Main) {
232239 let pages = storyboardIds. map ( storyboard. instantiateViewController ( withIdentifier: ) )
233240 self . init ( pages)
234241 }
235242}
236-
0 commit comments