Commit fbdef004 by Daniel Dahan

pr-848: updated pull request to simplify code changes

parent 415577d7
......@@ -90,17 +90,8 @@ 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
}
}
open var isAllDirectionSlideEnabled = true
/// A reference to the currently selected view controller index value.
@IBInspectable
......@@ -163,6 +154,43 @@ open class TabsController: TransitionController {
prepareTabBar()
prepareTabItems()
}
open override func transition(to viewController: UIViewController, completion: ((Bool) -> Void)?) {
guard let fvc = rootViewController else {
return
}
let tvc = viewController
tvc.view.isHidden = false
tvc.view.frame = container.bounds
let fvcIndex = viewControllers.index(of: fvc)
let tvcIndex = viewControllers.index(of: viewController)
var isAuto = false
switch tvc.motionModalTransitionType {
case .auto:
isAuto = true
tvc.motionModalTransitionType = fvcIndex! < tvcIndex! ? .slide(direction: .left) : .slide(direction: .right)
default:break
}
view.isUserInteractionEnabled = false
Motion.shared.transition(from: fvc, to: tvc, in: container) { [weak self, tvc = tvc, isAuto = isAuto, completion = completion] (isFinished) in
guard let s = self else {
return
}
if isAuto {
tvc.motionModalTransitionType = .auto
}
s.rootViewController = tvc
s.view.isUserInteractionEnabled = true
completion?(isFinished)
}
}
}
internal extension TabsController {
......@@ -273,7 +301,7 @@ fileprivate extension TabsController {
extension TabsController: TabBarDelegate {
@objc
open func tabBar(tabBar: TabBar, didSelect tabItem: TabItem) {
open func tabBar(tabBar: TabBar, willSelect tabItem: TabItem) {
guard !(false == tabBar.delegate?.tabBar?(tabBar: tabBar, shouldSelect: tabItem)) else {
return
}
......@@ -286,22 +314,12 @@ extension TabsController: TabBarDelegate {
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
}
self?.selectedIndex = i
transition(to: viewControllers[i]) { [weak self] (isFinished) in
guard isFinished else {
return
}
self?.selectedIndex = i
}
}
}
......@@ -128,60 +128,6 @@ 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