Commit 1888e455 by Daniel Dahan

ps-1019: Added swipe gesture handling to TabsController.

parent fc2556fc
## 2.13.5
* [pr-1019](https://github.com/CosmicMind/Material/pull/1019): Added swipe gesture handling to TabsController.
## 2.13.4
* [issue-1016](https://github.com/CosmicMind/Material/issues/1016): Updated hierarchy traversal for TransitionController types to no longer skip over non TransitionController types.
......
Pod::Spec.new do |s|
s.name = 'Material'
s.version = '2.13.4'
s.version = '2.13.5'
s.license = 'BSD-3-Clause'
s.summary = 'A UI/UX framework for creating beautiful applications.'
s.homepage = 'http://cosmicmind.com'
......
Subproject commit 0c04b36fd1da09d085c624163fd8c7d6a23f6dca
Subproject commit 8840fda209630cfaa986312702610ea877a15ae1
......@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>2.13.4</string>
<string>2.13.5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
......
......@@ -111,14 +111,15 @@ open class TabsController: TransitionController {
open let tabBar = TabBar()
/// A value that decide viewcontrollers swipeable. default value is false
open var isSwipeEnabled: Bool = false {
/// A Boolean that indicates if the swipe feature is enabled..
open var isSwipeEnabled = false {
didSet {
if isSwipeEnabled {
prepareSwipeGesture()
} else {
guard isSwipeEnabled else {
removeSwipeGesture()
return
}
prepareSwipeGesture()
}
}
......@@ -187,7 +188,9 @@ open class TabsController: TransitionController {
super.prepare()
view.backgroundColor = .white
view.contentScaleFactor = Screen.scale
isSwipeEnabled = true
prepareTabBar()
prepareTabItems()
prepareSelectedIndexViewController()
......@@ -274,6 +277,38 @@ fileprivate extension TabsController {
tabBar.tabItems = tabItems
tabBar.selectedTabItem = tabItems[selectedIndex]
}
/// Prepare Swipe Gesture.
func prepareSwipeGesture() {
removeSwipeGesture()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeGesture(gesture:)))
swipeRight.direction = .right
view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeGesture(gesture:)))
swipeLeft.direction = .left
view.addGestureRecognizer(swipeLeft)
}
}
fileprivate extension TabsController {
/// Remove Swipe Gesture.
func removeSwipeGesture() {
guard let v = view.gestureRecognizers else {
return
}
for gesture in v {
guard let recognizer = gesture as? UISwipeGestureRecognizer else {
continue
}
if .left == recognizer.direction || .right == recognizer.direction {
view.removeGestureRecognizer(recognizer)
}
}
}
}
fileprivate extension TabsController {
......@@ -326,6 +361,28 @@ fileprivate extension TabsController {
}
}
fileprivate extension TabsController {
/**
Handles the swipe gesture.
- Parameter gesture: A UIGestureRecognizer.
*/
@objc
func handleSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case .right:
guard (selectedIndex - 1) >= 0 else { return }
select(at: selectedIndex - 1)
case .left:
guard (selectedIndex + 1) < viewControllers.count else { return }
select(at: selectedIndex + 1)
default:
break
}
}
}
}
extension TabsController {
/**
Transitions to the view controller that is at the given index.
......@@ -352,48 +409,6 @@ extension TabsController {
}
}
}
/**
Prepare Swipe Gesture.
*/
fileprivate func prepareSwipeGesture() {
removeSwipeGesture()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture(gesture:)))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture(gesture:)))
swipeLeft.direction = .left
self.view.addGestureRecognizer(swipeLeft)
}
/**
Remove Swipe Gesture.
*/
fileprivate func removeSwipeGesture() {
if self.view.gestureRecognizers != nil {
for gesture in self.view.gestureRecognizers! {
guard let swipeGesture = gesture as? UISwipeGestureRecognizer else { continue }
if swipeGesture.direction == .left || swipeGesture.direction == .right {
self.view.removeGestureRecognizer(swipeGesture)
}
}
}
}
@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case .right:
guard (selectedIndex - 1) >= 0 else { return }
select(at: selectedIndex - 1)
case .left:
guard (selectedIndex + 1) < viewControllers.count else { return }
select(at: selectedIndex + 1)
default:
break
}
}
}
}
extension TabsController: TabBarDelegate, _TabBarDelegate {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment