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

Commit c84e892

Browse files
authored
Merge pull request #297 from kitasuke/delete_unnecessary_protocols
Delete unnecessary protocols
2 parents 3d4e5cc + 941fc19 commit c84e892

11 files changed

+113
-207
lines changed

Pod/Classes/MenuItemView.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ open class MenuItemView: UIView {
273273
}
274274
}
275275

276-
extension MenuItemView: ViewCleanable {
276+
extension MenuItemView {
277277
func cleanup() {
278278
switch menuItemOptions.displayMode {
279279
case .text:
@@ -291,20 +291,22 @@ extension MenuItemView: ViewCleanable {
291291
}
292292
}
293293

294-
extension MenuItemView: LabelSizeCalculatable {
295-
func labelWidth(_ widthMode: MenuItemWidthMode, estimatedSize: CGSize) -> CGFloat {
294+
// MARK: Lable Size
295+
296+
extension MenuItemView {
297+
fileprivate func labelWidth(_ widthMode: MenuItemWidthMode, estimatedSize: CGSize) -> CGFloat {
296298
switch widthMode {
297299
case .flexible: return ceil(estimatedSize.width)
298300
case .fixed(let width): return width
299301
}
300302
}
301303

302-
func estimatedLabelSize(_ label: UILabel) -> CGSize {
304+
fileprivate func estimatedLabelSize(_ label: UILabel) -> CGSize {
303305
guard let text = label.text else { return .zero }
304306
return NSString(string: text).boundingRect(with: CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: label.font], context: nil).size
305307
}
306308

307-
func calculateLabelSize(_ label: UILabel, maxWidth: CGFloat) -> CGSize {
309+
fileprivate func calculateLabelSize(_ label: UILabel, maxWidth: CGFloat) -> CGSize {
308310
guard let _ = label.text else { return .zero }
309311

310312
let itemWidth: CGFloat

Pod/Classes/MenuView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ extension MenuView: Pagable {
358358
}
359359
}
360360

361-
extension MenuView: ViewCleanable {
361+
extension MenuView {
362362
func cleanup() {
363363
contentView.removeFromSuperview()
364364
switch menuOptions.focusMode {
@@ -376,14 +376,14 @@ extension MenuView: ViewCleanable {
376376
}
377377
}
378378

379-
extension MenuView: MenuItemMultipliable {
379+
extension MenuView {
380380
var menuItemCount: Int {
381381
switch menuOptions.displayMode {
382382
case .infinite: return menuOptions.itemsOptions.count * menuOptions.dummyItemViewsSet
383383
default: return menuOptions.itemsOptions.count
384384
}
385385
}
386-
func rawPage(_ page: Int) -> Int {
386+
fileprivate func rawPage(_ page: Int) -> Int {
387387
let startIndex = currentPage - menuItemCount / 2
388388
return (startIndex + page + menuItemCount) % menuItemCount
389389
}

Pod/Classes/PagingMenuController.swift

Lines changed: 95 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public extension PagingMenuControllerDelegate {
2525
internal let MinimumSupportedViewCount = 1
2626
internal let VisiblePagingViewNumber = 3
2727

28-
open class PagingMenuController: UIViewController, PagingValidator {
28+
open class PagingMenuController: UIViewController {
2929
weak public var delegate: PagingMenuControllerDelegate? {
3030
didSet {
3131
guard let menuView = menuView else { return }
@@ -355,8 +355,23 @@ extension PagingMenuController: Pagable {
355355
}
356356
}
357357

358-
extension PagingMenuController: PageDetectable {
359-
var currentPagingViewPosition: PagingViewPosition {
358+
// MARK: Page Control
359+
360+
extension PagingMenuController {
361+
fileprivate enum PagingViewPosition {
362+
case left, center, right, unknown
363+
364+
init(order: Int) {
365+
switch order {
366+
case 0: self = .left
367+
case 1: self = .center
368+
case 2: self = .right
369+
default: self = .unknown
370+
}
371+
}
372+
}
373+
374+
fileprivate var currentPagingViewPosition: PagingViewPosition {
360375
guard let pagingViewController = pagingViewController else { return .unknown }
361376
let pageWidth = pagingViewController.contentScrollView.frame.width
362377
let order = Int(ceil((pagingViewController.contentScrollView.contentOffset.x - pageWidth / 2) / pageWidth))
@@ -371,7 +386,7 @@ extension PagingMenuController: PageDetectable {
371386
return PagingViewPosition(order: order + 1)
372387
}
373388

374-
var nextPageFromCurrentPosition: Int {
389+
fileprivate var nextPageFromCurrentPosition: Int {
375390
// set new page number according to current moving direction
376391
let page: Int
377392
switch options.lazyLoadingPage {
@@ -391,7 +406,7 @@ extension PagingMenuController: PageDetectable {
391406
return page
392407
}
393408

394-
var nextPageFromCurrentPoint: Int {
409+
fileprivate var nextPageFromCurrentPoint: Int {
395410
guard let menuView = menuView else { return 0 }
396411

397412
let point = CGPoint(x: menuView.contentOffset.x + menuView.frame.width / 2, y: 0)
@@ -403,14 +418,34 @@ extension PagingMenuController: PageDetectable {
403418
}
404419
}
405420

406-
extension PagingMenuController: GestureHandler {
407-
func addTapGestureHandler() {
421+
// MARK: - GestureRecognizer
422+
423+
extension PagingMenuController {
424+
fileprivate var tapGestureRecognizer: UITapGestureRecognizer {
425+
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
426+
gestureRecognizer.numberOfTapsRequired = 1
427+
return gestureRecognizer
428+
}
429+
430+
fileprivate var leftSwipeGestureRecognizer: UISwipeGestureRecognizer {
431+
let gestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeGesture))
432+
gestureRecognizer.direction = .left
433+
return gestureRecognizer
434+
}
435+
436+
fileprivate var rightSwipeGestureRecognizer: UISwipeGestureRecognizer {
437+
let gestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeGesture))
438+
gestureRecognizer.direction = .right
439+
return gestureRecognizer
440+
}
441+
442+
fileprivate func addTapGestureHandler() {
408443
menuView?.menuItemViews.forEach {
409444
$0.addGestureRecognizer(tapGestureRecognizer)
410445
}
411446
}
412447

413-
func addSwipeGestureHandler() {
448+
fileprivate func addSwipeGestureHandler() {
414449
guard let menuOptions = menuOptions else { return }
415450

416451
switch menuOptions.displayMode {
@@ -471,7 +506,7 @@ extension PagingMenuController: GestureHandler {
471506
}
472507
}
473508

474-
extension PagingMenuController: ViewCleanable {
509+
extension PagingMenuController {
475510
func cleanup() {
476511
if let menuView = self.menuView {
477512
menuView.cleanup()
@@ -485,3 +520,54 @@ extension PagingMenuController: ViewCleanable {
485520
}
486521
}
487522
}
523+
524+
// MARK: Validator
525+
526+
extension PagingMenuController {
527+
fileprivate func validate(_ options: PagingMenuControllerCustomizable) {
528+
validateDefaultPage(options)
529+
validateContentsCount(options)
530+
validateInfiniteMenuItemNumbers(options)
531+
}
532+
533+
fileprivate func validateContentsCount(_ options: PagingMenuControllerCustomizable) {
534+
switch options.componentType {
535+
case .all(let menuOptions, let pagingControllers):
536+
guard menuOptions.itemsOptions.count == pagingControllers.count else {
537+
raise("number of menu items and view controllers doesn't match")
538+
return
539+
}
540+
default: break
541+
}
542+
}
543+
544+
fileprivate func validateDefaultPage(_ options: PagingMenuControllerCustomizable) {
545+
let maxCount: Int
546+
switch options.componentType {
547+
case .pagingController(let pagingControllers): maxCount = pagingControllers.count
548+
case .all(_, let pagingControllers):
549+
maxCount = pagingControllers.count
550+
case .menuView(let menuOptions): maxCount = menuOptions.itemsOptions.count
551+
}
552+
553+
guard options.defaultPage >= maxCount || options.defaultPage < 0 else { return }
554+
555+
raise("default page is invalid")
556+
}
557+
558+
fileprivate func validateInfiniteMenuItemNumbers(_ options: PagingMenuControllerCustomizable) {
559+
guard case .all(let menuOptions, _) = options.componentType,
560+
case .infinite = menuOptions.displayMode else { return }
561+
guard menuOptions.itemsOptions.count < VisiblePagingViewNumber else { return }
562+
563+
raise("number of view controllers should be more than three with Infinite display mode")
564+
}
565+
566+
fileprivate var exceptionName: String {
567+
return "PMCException"
568+
}
569+
570+
fileprivate func raise(_ reason: String) {
571+
NSException(name: NSExceptionName(rawValue: exceptionName), reason: reason, userInfo: nil).raise()
572+
}
573+
}

Pod/Classes/PagingViewController.swift

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ extension PagingViewController: Pagable {
237237
}
238238
}
239239

240-
extension PagingViewController: ViewCleanable {
240+
extension PagingViewController {
241241
func cleanup() {
242242
visibleControllers.removeAll(keepingCapacity: true)
243243
currentViewController = nil
@@ -252,8 +252,10 @@ extension PagingViewController: ViewCleanable {
252252
}
253253
}
254254

255-
extension PagingViewController: PageLoadable {
256-
func shouldLoad(page: Int) -> Bool {
255+
// MARK: Page Control
256+
257+
extension PagingViewController {
258+
fileprivate func shouldLoad(page: Int) -> Bool {
257259
switch (options.menuControllerSet, options.lazyLoadingPage) {
258260
case (.single, _),
259261
(_, .one):
@@ -273,16 +275,16 @@ extension PagingViewController: PageLoadable {
273275
return true
274276
}
275277

276-
func isVisible(controller: UIViewController) -> Bool {
278+
fileprivate func isVisible(controller: UIViewController) -> Bool {
277279
return self.childViewControllers.contains(controller)
278280
}
279281

280-
func hideVisibleControllers() {
282+
fileprivate func hideVisibleControllers() {
281283
guard shouldWaitForLayout() else { return }
282284
visibleControllers.forEach { $0.view.alpha = 0 }
283285
}
284286

285-
func showVisibleControllers() {
287+
fileprivate func showVisibleControllers() {
286288
guard shouldWaitForLayout() else { return }
287289
visibleControllers.forEach { $0.view.alpha = 1 }
288290
}

Pod/Classes/Protocols/GestureHandler.swift

Lines changed: 0 additions & 36 deletions
This file was deleted.

Pod/Classes/Protocols/LabelSizeCalculatable.swift

Lines changed: 0 additions & 15 deletions
This file was deleted.

Pod/Classes/Protocols/MenuItemMultipliable.swift

Lines changed: 0 additions & 14 deletions
This file was deleted.

Pod/Classes/Protocols/PageDetectable.swift

Lines changed: 0 additions & 28 deletions
This file was deleted.

Pod/Classes/Protocols/PageLoadable.swift

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)