Commit 6e8dcb6e by seubseub

Add tabs naturalslide option

parent 112992a8
......@@ -90,6 +90,18 @@ open class TabsController: TransitionController {
}
}
fileprivate var _isAllDirectionSlideEnable: Bool = false
/// user can slide views left, right naturally.
open var isAllDirectionSlideEnabled: Bool {
get {
return _isAllDirectionSlideEnable
}
set(newVal) {
_isAllDirectionSlideEnable = newVal
}
}
/// A reference to the currently selected view controller index value.
@IBInspectable
open fileprivate(set) var selectedIndex = 0
......@@ -276,6 +288,15 @@ fileprivate extension TabsController {
return
}
if(_isAllDirectionSlideEnable) {
tabsTransition(tabsController: self, to: viewControllers[i], completion: { [weak self] (isFinished) in
guard isFinished else {
return
}
self?.selectedIndex = i
})
} else {
transition(to: viewControllers[i]) { [weak self] (isFinished) in
guard isFinished else {
return
......@@ -284,4 +305,5 @@ fileprivate extension TabsController {
self?.selectedIndex = i
}
}
}
}
......@@ -161,6 +161,60 @@ open class TransitionController: UIViewController {
}
/**
A method to swap rootViewController objects specially in tabsController.
- Parameter tabsController: indicate tabsController. if tabsController nil then default transition method will be executed.
- Parameter toViewController: The UIViewController to swap
with the active rootViewController.
- Parameter completion: A completion block that is execited after
the transition animation from the active rootViewController
to the toViewController has completed.
*/
open func tabsTransition(tabsController: TabsController?, to viewController: UIViewController, completion: ((Bool) -> Void)? = nil) {
guard let fvc = rootViewController else {
return
}
let tvc = viewController
tvc.view.isHidden = false
tvc.view.frame = container.bounds
if(tabsController == nil) {
tvc.motionModalTransitionType = motionTransitionType
view.isUserInteractionEnabled = false
Motion.shared.transition(from: fvc, to: tvc, in: container) { [weak self, tvc = tvc, completion = completion] (isFinished) in
guard let s = self else {
return
}
s.rootViewController = tvc
s.view.isUserInteractionEnabled = true
completion?(isFinished)
}
}
let fvcIndex = tabsController?.viewControllers.index(of: fvc)
let tvcIndex = tabsController?.viewControllers.index(of: viewController)
if(fvcIndex! < tvcIndex!) {
tvc.motionModalTransitionType = .slide(direction: .left)
} else {
tvc.motionModalTransitionType = .slide(direction: .right)
}
view.isUserInteractionEnabled = false
Motion.shared.transition(from: fvc, to: tvc, in: container) { [weak self, tvc = tvc, completion = completion] (isFinished) in
guard let s = self else {
return
}
s.rootViewController = tvc
s.view.isUserInteractionEnabled = true
completion?(isFinished)
}
}
/**
To execute in the order of the layout chain, override this
method. `layoutSubviews` should be called immediately, unless you
have a certain need.
......
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