polish code

This commit is contained in:
Martin Barreto 2016-01-21 14:45:43 -03:00
parent 2b620d9578
commit bc124e2068
2 changed files with 32 additions and 42 deletions

View File

@ -137,17 +137,18 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
}
public func moveToViewControllerAtIndex(index: Int, animated: Bool) {
if !isViewLoaded() || view.window == nil {
guard isViewLoaded() && view.window != nil else {
currentIndex = index
return
}
if animated && pagerOptions.contains(.SkipIntermediateViewControllers) && abs(currentIndex - index) > 1 {
var tmpChildViewControllers = viewControllers
var tmpViewControllers = viewControllers
let currentChildVC = viewControllers[currentIndex]
let fromIndex = currentIndex < index ? index - 1 : index + 1
let fromChildVC = viewControllers[fromIndex]
tmpChildViewControllers[currentIndex] = fromChildVC
tmpChildViewControllers[fromIndex] = currentChildVC
pagerTabStripChildViewControllersForScrolling = tmpChildViewControllers
tmpViewControllers[currentIndex] = fromChildVC
tmpViewControllers[fromIndex] = currentChildVC
pagerTabStripChildViewControllersForScrolling = tmpViewControllers
containerView.setContentOffset(CGPointMake(pageOffsetForChildIndex(index: fromIndex), 0), animated: false)
(navigationController?.view ?? view).userInteractionEnabled = false
containerView.setContentOffset(CGPointMake(pageOffsetForChildIndex(index: index), 0), animated: true)
@ -188,11 +189,11 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
}
}
public func canMoveToIndex(index index: Int) -> Bool{
public func canMoveToIndex(index index: Int) -> Bool {
return currentIndex != index && viewControllers.count > index
}
public func pageOffsetForChildIndex(index index: Int) -> CGFloat{
public func pageOffsetForChildIndex(index index: Int) -> CGFloat {
return CGFloat(index) * CGRectGetWidth(containerView.bounds)
}
@ -220,25 +221,23 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
if virtualPage < 0 {
return 0
}
if virtualPage > viewControllers.count - 1 { return viewControllers.count - 1 }
if virtualPage > viewControllers.count - 1 {
return viewControllers.count - 1
}
return virtualPage
}
public func updateContent() {
if !CGSizeEqualToSize(lastSize, containerView.bounds.size) {
if lastSize.width != containerView.bounds.size.width {
lastSize = containerView.bounds.size
containerView.contentOffset = CGPointMake(pageOffsetForChildIndex(index: currentIndex), 0)
}
else {
lastSize = containerView.bounds.size
}
if lastSize.width != containerView.bounds.size.width {
lastSize = containerView.bounds.size
containerView.contentOffset = CGPointMake(pageOffsetForChildIndex(index: currentIndex), 0)
}
lastSize = containerView.bounds.size
let childViewControllers = getPagerTabStripChildViewControllersForScrolling
containerView.contentSize = CGSizeMake(CGRectGetWidth(containerView.bounds) * CGFloat(childViewControllers.count), containerView.contentSize.height)
let pagerViewControllers = pagerTabStripChildViewControllersForScrolling ?? viewControllers
containerView.contentSize = CGSizeMake(CGRectGetWidth(containerView.bounds) * CGFloat(pagerViewControllers.count), containerView.contentSize.height)
for (index, childController) in childViewControllers.enumerate(){
for (index, childController) in pagerViewControllers.enumerate(){
let pageOffsetForChild = pageOffsetForChildIndex(index: index)
if fabs(containerView.contentOffset.x - pageOffsetForChild) < CGRectGetWidth(containerView.bounds) {
if childController.parentViewController == nil {
@ -287,9 +286,9 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
let direction = swipeDirection
if direction == .Left {
if virtualPage > getPagerTabStripChildViewControllersForScrolling.count - 1 {
fromIndex = getPagerTabStripChildViewControllersForScrolling.count - 1
toIndex = getPagerTabStripChildViewControllersForScrolling.count
if virtualPage > pagerViewControllers.count - 1 {
fromIndex = pagerViewControllers.count - 1
toIndex = pagerViewControllers.count
}
else {
if scrollPercentage >= 0.5 {
@ -307,7 +306,7 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
}
else {
if scrollPercentage > 0.5 {
fromIndex = min(toIndex + 1, getPagerTabStripChildViewControllersForScrolling.count - 1)
fromIndex = min(toIndex + 1, pagerViewControllers.count - 1)
}
else {
toIndex = fromIndex - 1
@ -315,11 +314,11 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
}
}
try! delegate?.pagerTabStripViewController(self, updateIndicatorFromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: Float(pagerOptions.contains(.IsElasticIndicatorLimit) ? scrollPercentage : (toIndex < 0 || toIndex >= getPagerTabStripChildViewControllersForScrolling.count ? CGFloat(0) : scrollPercentage)), indexWasChanged: changeCurrentIndex)
try! delegate?.pagerTabStripViewController(self, updateIndicatorFromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: Float(pagerOptions.contains(.IsElasticIndicatorLimit) ? scrollPercentage : (toIndex < 0 || toIndex >= pagerViewControllers.count ? CGFloat(0) : scrollPercentage)), indexWasChanged: changeCurrentIndex)
}
}
else{
try! delegate?.pagerTabStripViewController(self, updateIndicatorFromIndex: min(oldCurrentIndex, getPagerTabStripChildViewControllersForScrolling.count - 1), toIndex: newCurrentIndex)
try! delegate?.pagerTabStripViewController(self, updateIndicatorFromIndex: min(oldCurrentIndex, pagerViewControllers.count - 1), toIndex: newCurrentIndex)
}
}
@ -361,12 +360,7 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
public func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) {
if containerView == scrollView {
pagerTabStripChildViewControllersForScrolling = nil
if let navigationController = navigationController {
navigationController.view.userInteractionEnabled = true
}
else{
view.userInteractionEnabled = true
}
(navigationController?.view ?? view).userInteractionEnabled = true
updateContent()
}
}
@ -376,21 +370,17 @@ public class PagerTabStripViewController: UIViewController, UIScrollViewDelegate
public override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
pageBeforeRotate = currentIndex
coordinator.animateAlongsideTransition(nil) { (context) -> Void in
self.currentIndex = self.pageBeforeRotate
self.updateIfNeeded()
coordinator.animateAlongsideTransition(nil) { [weak self] _ in
guard let me = self else { return }
me.currentIndex = me.pageBeforeRotate
me.updateIfNeeded()
}
}
public override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
pageBeforeRotate = currentIndex
}
//MARK: Private
private var pagerTabStripChildViewControllersForScrolling : [UIViewController]?
private var getPagerTabStripChildViewControllersForScrolling : [UIViewController] {
return pagerTabStripChildViewControllersForScrolling ?? viewControllers
}
private var lastPageNumber = 0
private var lastContentOffset: CGFloat = 0.0
private var pageBeforeRotate = 0

View File

@ -47,7 +47,7 @@ public class SegmentedPagerTabStripViewController: PagerTabStripViewController {
}
}
func reloadSegmentedControl() throws -> Void {
func reloadSegmentedControl() throws {
segmentedControl.removeAllSegments()
for (index, item) in viewControllers.enumerate(){
guard let child = item as? PagerTabStripChildItem else {
@ -70,7 +70,7 @@ public class SegmentedPagerTabStripViewController: PagerTabStripViewController {
}
}
func segmentedControlChanged(sender: UISegmentedControl) -> Void{
func segmentedControlChanged(sender: UISegmentedControl) {
let index = sender.selectedSegmentIndex
try! pagerTabStripViewController(self, updateIndicatorFromIndex: currentIndex, toIndex: index)
shouldUpdateSegmentedControl = false