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 ## 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. * [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| Pod::Spec.new do |s|
s.name = 'Material' s.name = 'Material'
s.version = '2.13.4' s.version = '2.13.5'
s.license = 'BSD-3-Clause' s.license = 'BSD-3-Clause'
s.summary = 'A UI/UX framework for creating beautiful applications.' s.summary = 'A UI/UX framework for creating beautiful applications.'
s.homepage = 'http://cosmicmind.com' s.homepage = 'http://cosmicmind.com'
......
Subproject commit 0c04b36fd1da09d085c624163fd8c7d6a23f6dca Subproject commit 8840fda209630cfaa986312702610ea877a15ae1
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.13.4</string> <string>2.13.5</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
......
...@@ -111,14 +111,15 @@ open class TabsController: TransitionController { ...@@ -111,14 +111,15 @@ open class TabsController: TransitionController {
open let tabBar = TabBar() open let tabBar = TabBar()
/// A value that decide viewcontrollers swipeable. default value is false /// A Boolean that indicates if the swipe feature is enabled..
open var isSwipeEnabled: Bool = false { open var isSwipeEnabled = false {
didSet { didSet {
if isSwipeEnabled { guard isSwipeEnabled else {
prepareSwipeGesture()
} else {
removeSwipeGesture() removeSwipeGesture()
return
} }
prepareSwipeGesture()
} }
} }
...@@ -188,6 +189,8 @@ open class TabsController: TransitionController { ...@@ -188,6 +189,8 @@ open class TabsController: TransitionController {
view.backgroundColor = .white view.backgroundColor = .white
view.contentScaleFactor = Screen.scale view.contentScaleFactor = Screen.scale
isSwipeEnabled = true
prepareTabBar() prepareTabBar()
prepareTabItems() prepareTabItems()
prepareSelectedIndexViewController() prepareSelectedIndexViewController()
...@@ -274,6 +277,38 @@ fileprivate extension TabsController { ...@@ -274,6 +277,38 @@ fileprivate extension TabsController {
tabBar.tabItems = tabItems tabBar.tabItems = tabItems
tabBar.selectedTabItem = tabItems[selectedIndex] 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 { fileprivate extension TabsController {
...@@ -326,6 +361,28 @@ 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 { extension TabsController {
/** /**
Transitions to the view controller that is at the given index. Transitions to the view controller that is at the given index.
...@@ -352,48 +409,6 @@ extension TabsController { ...@@ -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 { 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