Skip to content
This repository was archived by the owner on Jun 17, 2018. It is now read-only.

Commit 8615e8b

Browse files
authored
Merge pull request #286 from kitasuke/add_new_option_for_lazyLoadingPage
Add all for LazyLoadingPage option
2 parents 873fce9 + 731eb59 commit 8615e8b

File tree

5 files changed

+34
-13
lines changed

5 files changed

+34
-13
lines changed

Example/PagingMenuControllerDemo/PagingMenuControllerOptions.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ struct PagingMenuOptions1: PagingMenuControllerCustomizable {
2626
var componentType: ComponentType {
2727
return .all(menuOptions: MenuOptions(), pagingControllers: pagingControllers)
2828
}
29+
var lazyLoadingPage: LazyLoadingPage {
30+
return .all
31+
}
2932

3033
struct MenuOptions: MenuViewCustomizable {
3134
var displayMode: MenuDisplayMode {

Pod/Classes/PagingMenuController.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,12 +374,18 @@ extension PagingMenuController: PageDetectable {
374374
var nextPageFromCurrentPosition: Int {
375375
// set new page number according to current moving direction
376376
let page: Int
377-
switch (currentPagingViewPosition, options.componentType) {
378-
case (.left, .pagingController): page = previousPage
379-
case (.left, _): page = menuView?.previousPage ?? previousPage
380-
case (.right, .pagingController): page = nextPage
381-
case (.right, _): page = menuView?.nextPage ?? nextPage
382-
default: page = pagingViewController?.currentPage ?? currentPage
377+
switch options.lazyLoadingPage {
378+
case .all:
379+
guard let scrollView = pagingViewController?.contentScrollView else { return currentPage }
380+
page = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width)
381+
default:
382+
switch (currentPagingViewPosition, options.componentType) {
383+
case (.left, .pagingController): page = previousPage
384+
case (.left, _): page = menuView?.previousPage ?? previousPage
385+
case (.right, .pagingController): page = nextPage
386+
case (.right, _): page = menuView?.nextPage ?? nextPage
387+
default: page = pagingViewController?.currentPage ?? currentPage
388+
}
383389
}
384390

385391
return page

Pod/Classes/PagingViewController.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ open class PagingViewController: UIViewController {
145145
pagingView.trailingAnchor.constraint(equalTo: contentScrollView.trailingAnchor),
146146
])
147147
} else {
148-
if case .all(let menuOptions, _) = options.componentType, case .infinite = menuOptions.displayMode {
148+
if case .all(let menuOptions, _) = options.componentType,
149+
case .infinite = menuOptions.displayMode {
149150
if index == currentPage {
150151
guard let previousPagingView = controllers[previousPage].view,
151152
let nextPagingView = controllers[nextPage].view else { continue }
@@ -163,16 +164,24 @@ open class PagingViewController: UIViewController {
163164
pagingView.trailingAnchor.constraint(equalTo: contentScrollView.trailingAnchor).isActive = true
164165
}
165166
} else {
166-
if index == 0 || index == previousPage {
167+
switch (options.lazyLoadingPage, index) {
168+
case (.three, 0),
169+
(.three, previousPage),
170+
(.all, 0):
171+
// H:|[pagingView]
167172
pagingView.leadingAnchor.constraint(equalTo: contentScrollView.leadingAnchor).isActive = true
168-
} else {
169-
guard let previousPagingView = controllers[index - 1].view else { continue }
170-
if index == controllers.count - 1 || index == nextPage {
171-
// H:[pagingView]|
173+
case (.three, controllers.count - 1),
174+
(.three, nextPage),
175+
(.all, controllers.count - 1):
176+
guard let previousPagingView = controllers[index - 1].view else { continue }
177+
// H:[previousPagingView][pagingView]|
178+
previousPagingView.trailingAnchor.constraint(equalTo: pagingView.leadingAnchor, constant: 0).isActive = true
172179
pagingView.trailingAnchor.constraint(equalTo: contentScrollView.trailingAnchor).isActive = true
173-
}
180+
case (.three, _), (.all, _):
181+
guard let previousPagingView = controllers[index - 1].view else { continue }
174182
// H:[previousPagingView][pagingView]
175183
previousPagingView.trailingAnchor.constraint(equalTo: pagingView.leadingAnchor, constant: 0).isActive = true
184+
default: break
176185
}
177186
}
178187
}
@@ -258,6 +267,7 @@ extension PagingViewController: PageLoadable {
258267
guard page >= previousPage &&
259268
page <= nextPage else { return false }
260269
}
270+
case (_, .all): return true
261271
}
262272
return true
263273
}

Pod/Classes/Protocols/PagingMenuControllerCustomizable.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public extension PagingMenuControllerCustomizable {
4242
public enum LazyLoadingPage {
4343
case one
4444
case three
45+
case all
4546
}
4647

4748
public enum MenuControllerSet {

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ lazyLoadingPage: LazyLoadingPage
5757
public enum LazyLoadingPage {
5858
case one // Currently sets false to isScrollEnabled at this moment. Should be fixed in the future.
5959
case three
60+
case all // Currently not available for Infinite mode
6061
}
6162
```
6263

0 commit comments

Comments
 (0)