当我翻到最后一页和第一页时,UIPageViewController崩溃 导入UIKit 导入核心文本 类DataViewController:UIViewController、UIExtViewDelegate、UIGestureRecognitizerDelegate{ @iAction func下一页(){ 让pageController=self.parentViewController作为?UIPageViewController 让modeController=pageController?.dataSource作为ModelController 如果let controller=modeController?.pageViewController(pageController!,viewControllerAfterViewController:pageController?.viewControllers[0]作为UIViewController){ pageController?.SetViewController([controller],方向:UIPageViewControllerNavigationDirection.Forward,动画:false,完成:nil) } } @IBVAR弱数据标签:UILabel! @IBOutlet弱var textView:UITextView! 重写func viewDidLoad(){ super.viewDidLoad() 如果让url=NSBundle.mainBundle().URLForResource(“数据”,带扩展名:“rtf”){ 让attributedString=NSMutableAttributedString(文件url:url,选项:nil,文档属性:nil,错误:nil) AttributeString?.addAttribute(NSUnderlineStyleAttributeName,值:18,范围:NSMakeRange(0,12)) AttributeString?.addAttribute(NSUnderlineColorAttributeName,值:UIColor.redColor(),范围:NSMakeRange(0,12)) textView.attributedText=attributedString } textView.layoutIfNeeded() } 变量偏移量:Int=0 var startCharacherIndex:Int{ 返回textView.layoutManager.CharacteristEndExorPoint(CGPoint(x:0,y:textView.contentOffset.y),inTextContainer:textView.textContainer,插入点之间距离的分数:nil) } var prevCharacherIndex:Int{ 变量y=textView.contentOffset.y-textView.bounds.height y=yBool{ //println(“1:\(手势识别器)\n2:\(其他手势识别器)” 返回错误 } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } var modelController:modelController{ //返回模型控制器对象,必要时创建它。 //在更复杂的实现中,可以将模型控制器传递给视图控制器。 如果_modelController==nil{ _modelController=modelController() } 返回模式控制器! } var _modelController:modelController?=nil //MARK:-UIPageViewController委托方法 func pageViewController(pag import UIKit class RootViewController: UIViewController, UIPageViewControllerDelegate, UIGestureRecognizerDelegate { var pageViewController: UIPageViewController? lazy var pageAnimationFinished:Bool = true override func viewDidLoad() { super.viewDidLoad() pageAnimationFinished = true self.pageViewController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation: .Horizontal, options: nil) self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers for gesRecog in self.pageViewController!.gestureRecognizers{ if (gesRecog is UIPanGestureRecognizer){ (gesRecog as UIPanGestureRecognizer).delegate = self break } } self.modelController.createCacheController(self.storyboard!) let startingViewController: DataViewController = self.modelController.viewControllerAtIndex(self.storyboard!,offset: 0)! let viewControllers: NSArray = [startingViewController] self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in }) self.pageViewController!.dataSource = self.modelController self.addChildViewController(self.pageViewController!) self.view.addSubview(self.pageViewController!.view) // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages. var pageViewRect = self.view.bounds if UIDevice.currentDevice().userInterfaceIdiom == .Pad { pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0) } self.pageViewController!.view.frame = pageViewRect self.pageViewController!.didMoveToParentViewController(self) // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily. } func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [AnyObject], transitionCompleted completed: Bool) { if(completed || finished){ pageAnimationFinished = false } } func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { //println("1:\(gestureRecognizer) \n2:\(otherGestureRecognizer)") return false } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } var modelController: ModelController { // Return the model controller object, creating it if necessary. // In more complex implementations, the model controller may be passed to the view controller. if _modelController == nil { _modelController = ModelController() } return _modelController! } var _modelController: ModelController? = nil // MARK: - UIPageViewController delegate methods func pageViewController(pageViewController: UIPageViewController, spineLocationForInterfaceOrientation orientation: UIInterfaceOrientation) -> UIPageViewControllerSpineLocation { //if (orientation == .Portrait) || (orientation == .PortraitUpsideDown) || (UIDevice.currentDevice().userInterfaceIdiom == .Phone) { // In portrait orientation or on iPhone: Set the spine position to "min" and the page view controller's view controllers array to contain just one view controller. Setting the spine position to 'UIPageViewControllerSpineLocationMid' in landscape orientation sets the doubleSided property to YES, so set it to NO here. let currentViewController = self.pageViewController!.viewControllers[0] as UIViewController let viewControllers: NSArray = [currentViewController] self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in }) self.pageViewController!.doubleSided = false return .Min //} // In landscape orientation: Set set the spine location to "mid" and the page view controller's view controllers array to contain two view controllers. If the current page is even, set it to contain the current and next view controllers; if it is odd, set the array to contain the previous and current view controllers. //let currentViewController = self.pageViewController!.viewControllers[0] as DataViewController //var viewControllers: NSArray //let indexOfCurrentViewController = currentViewController.index //self.modelController.indexOfViewController(currentViewController) //if (indexOfCurrentViewController == 0) || (indexOfCurrentViewController % 2 == 0) { // let nextViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerAfterViewController: currentViewController) //viewControllers = [currentViewController, nextViewController!] //} else { //let previousViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerBeforeViewController: currentViewController) //viewControllers = [previousViewController!, currentViewController] //} //self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in }) //return .Mid } func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) { pageAnimationFinished = false } //modelController.swift class ModelController: NSObject, UIPageViewControllerDataSource { // var pageData = NSArray() lazy var controllers:[DataViewController] = [] override init() { super.init() } func createCacheController(storyboard: UIStoryboard) { controllers = []; for i in 0..<2 { let controller = storyboard.instantiateViewControllerWithIdentifier("DataViewController") as DataViewController controllers.append(controller) } } func viewControllerAtIndex(storyboard: UIStoryboard, offset: Int) -> DataViewController? { println(" offset:\(offset)") let controller = controllers.removeAtIndex(0) controllers.append(controller) controller.offset = offset return controller } // MARK: - Page View Controller Data Source func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let controller = viewController as DataViewController if controller.offset == 0 { return nil } return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.prevCharacherIndex) } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let controller = viewController as DataViewController if controller.isScrollToEnd{ return nil } return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.nextCharacherIndex) }

当我翻到最后一页和第一页时,UIPageViewController崩溃 导入UIKit 导入核心文本 类DataViewController:UIViewController、UIExtViewDelegate、UIGestureRecognitizerDelegate{ @iAction func下一页(){ 让pageController=self.parentViewController作为?UIPageViewController 让modeController=pageController?.dataSource作为ModelController 如果let controller=modeController?.pageViewController(pageController!,viewControllerAfterViewController:pageController?.viewControllers[0]作为UIViewController){ pageController?.SetViewController([controller],方向:UIPageViewControllerNavigationDirection.Forward,动画:false,完成:nil) } } @IBVAR弱数据标签:UILabel! @IBOutlet弱var textView:UITextView! 重写func viewDidLoad(){ super.viewDidLoad() 如果让url=NSBundle.mainBundle().URLForResource(“数据”,带扩展名:“rtf”){ 让attributedString=NSMutableAttributedString(文件url:url,选项:nil,文档属性:nil,错误:nil) AttributeString?.addAttribute(NSUnderlineStyleAttributeName,值:18,范围:NSMakeRange(0,12)) AttributeString?.addAttribute(NSUnderlineColorAttributeName,值:UIColor.redColor(),范围:NSMakeRange(0,12)) textView.attributedText=attributedString } textView.layoutIfNeeded() } 变量偏移量:Int=0 var startCharacherIndex:Int{ 返回textView.layoutManager.CharacteristEndExorPoint(CGPoint(x:0,y:textView.contentOffset.y),inTextContainer:textView.textContainer,插入点之间距离的分数:nil) } var prevCharacherIndex:Int{ 变量y=textView.contentOffset.y-textView.bounds.height y=yBool{ //println(“1:\(手势识别器)\n2:\(其他手势识别器)” 返回错误 } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } var modelController:modelController{ //返回模型控制器对象,必要时创建它。 //在更复杂的实现中,可以将模型控制器传递给视图控制器。 如果_modelController==nil{ _modelController=modelController() } 返回模式控制器! } var _modelController:modelController?=nil //MARK:-UIPageViewController委托方法 func pageViewController(pag import UIKit class RootViewController: UIViewController, UIPageViewControllerDelegate, UIGestureRecognizerDelegate { var pageViewController: UIPageViewController? lazy var pageAnimationFinished:Bool = true override func viewDidLoad() { super.viewDidLoad() pageAnimationFinished = true self.pageViewController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation: .Horizontal, options: nil) self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers for gesRecog in self.pageViewController!.gestureRecognizers{ if (gesRecog is UIPanGestureRecognizer){ (gesRecog as UIPanGestureRecognizer).delegate = self break } } self.modelController.createCacheController(self.storyboard!) let startingViewController: DataViewController = self.modelController.viewControllerAtIndex(self.storyboard!,offset: 0)! let viewControllers: NSArray = [startingViewController] self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in }) self.pageViewController!.dataSource = self.modelController self.addChildViewController(self.pageViewController!) self.view.addSubview(self.pageViewController!.view) // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages. var pageViewRect = self.view.bounds if UIDevice.currentDevice().userInterfaceIdiom == .Pad { pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0) } self.pageViewController!.view.frame = pageViewRect self.pageViewController!.didMoveToParentViewController(self) // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily. } func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [AnyObject], transitionCompleted completed: Bool) { if(completed || finished){ pageAnimationFinished = false } } func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { //println("1:\(gestureRecognizer) \n2:\(otherGestureRecognizer)") return false } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } var modelController: ModelController { // Return the model controller object, creating it if necessary. // In more complex implementations, the model controller may be passed to the view controller. if _modelController == nil { _modelController = ModelController() } return _modelController! } var _modelController: ModelController? = nil // MARK: - UIPageViewController delegate methods func pageViewController(pageViewController: UIPageViewController, spineLocationForInterfaceOrientation orientation: UIInterfaceOrientation) -> UIPageViewControllerSpineLocation { //if (orientation == .Portrait) || (orientation == .PortraitUpsideDown) || (UIDevice.currentDevice().userInterfaceIdiom == .Phone) { // In portrait orientation or on iPhone: Set the spine position to "min" and the page view controller's view controllers array to contain just one view controller. Setting the spine position to 'UIPageViewControllerSpineLocationMid' in landscape orientation sets the doubleSided property to YES, so set it to NO here. let currentViewController = self.pageViewController!.viewControllers[0] as UIViewController let viewControllers: NSArray = [currentViewController] self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in }) self.pageViewController!.doubleSided = false return .Min //} // In landscape orientation: Set set the spine location to "mid" and the page view controller's view controllers array to contain two view controllers. If the current page is even, set it to contain the current and next view controllers; if it is odd, set the array to contain the previous and current view controllers. //let currentViewController = self.pageViewController!.viewControllers[0] as DataViewController //var viewControllers: NSArray //let indexOfCurrentViewController = currentViewController.index //self.modelController.indexOfViewController(currentViewController) //if (indexOfCurrentViewController == 0) || (indexOfCurrentViewController % 2 == 0) { // let nextViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerAfterViewController: currentViewController) //viewControllers = [currentViewController, nextViewController!] //} else { //let previousViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerBeforeViewController: currentViewController) //viewControllers = [previousViewController!, currentViewController] //} //self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in }) //return .Mid } func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) { pageAnimationFinished = false } //modelController.swift class ModelController: NSObject, UIPageViewControllerDataSource { // var pageData = NSArray() lazy var controllers:[DataViewController] = [] override init() { super.init() } func createCacheController(storyboard: UIStoryboard) { controllers = []; for i in 0..<2 { let controller = storyboard.instantiateViewControllerWithIdentifier("DataViewController") as DataViewController controllers.append(controller) } } func viewControllerAtIndex(storyboard: UIStoryboard, offset: Int) -> DataViewController? { println(" offset:\(offset)") let controller = controllers.removeAtIndex(0) controllers.append(controller) controller.offset = offset return controller } // MARK: - Page View Controller Data Source func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let controller = viewController as DataViewController if controller.offset == 0 { return nil } return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.prevCharacherIndex) } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let controller = viewController as DataViewController if controller.isScrollToEnd{ return nil } return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.nextCharacherIndex) },swift,Swift,//rootViewController.swift import UIKit import CoreText class DataViewController: UIViewController,UITextViewDelegate, UIGestureRecognizerDelegate{ @IBAction func nextPage() { let pageController = self.parentViewController as? UIPageViewCont

//rootViewController.swift

 import UIKit
 import CoreText

class DataViewController: UIViewController,UITextViewDelegate, UIGestureRecognizerDelegate{


@IBAction func nextPage() {
    let pageController = self.parentViewController as? UIPageViewController
    let modeController = pageController?.dataSource as? ModelController
    if let controller = modeController?.pageViewController(pageController!, viewControllerAfterViewController: pageController?.viewControllers[0] as UIViewController) {
        pageController?.setViewControllers([controller], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
    }

}

@IBOutlet weak var dataLabel: UILabel!

@IBOutlet weak var textView: UITextView!


override func viewDidLoad() {
    super.viewDidLoad()
    if let url = NSBundle.mainBundle().URLForResource("data", withExtension: "rtf") {
        let attributedString = NSMutableAttributedString(fileURL : url, options:nil, documentAttributes: nil, error: nil)
        attributedString?.addAttribute(NSUnderlineStyleAttributeName, value: 18, range: NSMakeRange(0,12))
        attributedString?.addAttribute(NSUnderlineColorAttributeName, value: UIColor.redColor(), range: NSMakeRange(0,12))

        textView.attributedText = attributedString
    }

    textView.layoutIfNeeded()

}

var offset:Int = 0

var startCharacherIndex:Int {
    return textView.layoutManager.characterIndexForPoint(CGPoint(x: 0, y: textView.contentOffset.y), inTextContainer: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
}

var prevCharacherIndex:Int {
    var y = textView.contentOffset.y - textView.bounds.height
    y = y < 0 ? 0 : y
    return textView.layoutManager.characterIndexForPoint(CGPoint(x: 0, y: y), inTextContainer: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
}

var nextCharacherIndex:Int {
    return textView.layoutManager.characterIndexForPoint(CGPoint(x: textView.bounds.width - 1, y: textView.contentOffset.y + textView.bounds.height - 1), inTextContainer: textView.textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    scrollIndex()

    //scrollIndex()
    //println("textView.contentOffset.y:\(textView.contentOffset.y)")
}


func scrollIndex(){
    if textView == nil{    return   }

    var range:NSRange = NSMakeRange(offset, 0)
    let glyphRange = textView.layoutManager.glyphRangeForCharacterRange(NSMakeRange(offset, 0), actualCharacterRange: &range)

    let rect = textView.layoutManager.boundingRectForGlyphRange(glyphRange, inTextContainer: textView.textContainer)

    textView.setContentOffset(CGPoint(x: 0, y: rect.minY), animated: false)
}


var isScrollToEnd:Bool{

    let count = textView.attributedText?.length ?? 0
    return nextCharacherIndex == count - 1
   }


}
导入UIKit
类RootViewController:UIViewController、UIPageViewControllerDelegate、,
UIgestureRecognitzerDelegate{
var pageViewController:UIPageViewController?
lazy var pageAnimationFinished:Bool=true
重写func viewDidLoad(){
super.viewDidLoad()
pageAnimationFinished=true
self.pageViewController=UIPageViewController(转换样式:.PageCurl,导航方向:.Horizontal,选项:nil)
self.view.gestureerecognizers=self.pageViewController!.gestureerecognizers
用于self.pageViewController!.gestureRecognitors中的gesRecog{
if(gesRecog是UIPangestureRecognitor){
(gesRecog作为UIPangestureRecognitor)。委托=自我
打破
}
}
self.modelController.createCacheController(self.storyboard!)
让startingViewController:DataViewController=self.modelController.viewControllerAtIndex(self.storyboard!,偏移量:0)!
让ViewController:NSArray=[startingViewController]
self.pageViewController!.setViewControllers(viewControllers,方向:。前进,动画:false,完成:{done in})
self.pageViewController!.dataSource=self.modelController
self.addChildViewController(self.pageViewController!)
self.view.addSubview(self.pageViewController!.view)
//使用inset-rect设置页面视图控制器的边界,以便在页面边缘周围可以看到self的视图。
var pageViewRect=self.view.bounds
如果UIDevice.currentDevice().userInterfaceIdiom==.Pad{
pageViewRect=CGRectInset(pageViewRect,40.0,40.0)
}
self.pageViewController!.view.frame=pageViewRect
self.pageViewController!.didMoveToParentViewController(self)
//将页面视图控制器的手势识别器添加到图书视图控制器的视图中,以便更轻松地启动手势。
}
func pageViewController(pageViewController:UIPageViewController,didFinishAnimating finished:Bool,PreviousViewController:[AnyObject],transitionCompleted completed:Bool){
如果(已完成| |已完成){
pageAnimationFinished=false
}
}
func gestureRecognizer(gestureRecognizer:UIGestureRecognizer,应要求gestureRecognizer的其他gestureRecognizer:UIGestureRecognizer)->Bool{
//println(“1:\(手势识别器)\n2:\(其他手势识别器)”
返回错误
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
var modelController:modelController{
//返回模型控制器对象,必要时创建它。
//在更复杂的实现中,可以将模型控制器传递给视图控制器。
如果_modelController==nil{
_modelController=modelController()
}
返回模式控制器!
}
var _modelController:modelController?=nil
//MARK:-UIPageViewController委托方法
func pageViewController(pag
  import UIKit

 class RootViewController: UIViewController, UIPageViewControllerDelegate,  
  UIGestureRecognizerDelegate {

var pageViewController: UIPageViewController?
lazy var pageAnimationFinished:Bool = true


override func viewDidLoad() {
    super.viewDidLoad()
    pageAnimationFinished = true

    self.pageViewController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation: .Horizontal, options: nil)
    self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers

    for gesRecog in self.pageViewController!.gestureRecognizers{
        if (gesRecog is UIPanGestureRecognizer){
          (gesRecog as UIPanGestureRecognizer).delegate = self
            break
        }
    }



    self.modelController.createCacheController(self.storyboard!)

    let startingViewController: DataViewController = self.modelController.viewControllerAtIndex(self.storyboard!,offset: 0)!
    let viewControllers: NSArray = [startingViewController]
    self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in })

    self.pageViewController!.dataSource = self.modelController

    self.addChildViewController(self.pageViewController!)
    self.view.addSubview(self.pageViewController!.view)

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
    var pageViewRect = self.view.bounds
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
        pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0)
    }
    self.pageViewController!.view.frame = pageViewRect

    self.pageViewController!.didMoveToParentViewController(self)


    // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
}




func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [AnyObject], transitionCompleted completed: Bool) {
    if(completed || finished){
        pageAnimationFinished = false
    }
}


func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    //println("1:\(gestureRecognizer) \n2:\(otherGestureRecognizer)")
    return false
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

var modelController: ModelController {
    // Return the model controller object, creating it if necessary.
    // In more complex implementations, the model controller may be passed to the view controller.
    if _modelController == nil {
        _modelController = ModelController()
    }
    return _modelController!
}


var _modelController: ModelController? = nil

// MARK: - UIPageViewController delegate methods

func pageViewController(pageViewController: UIPageViewController, spineLocationForInterfaceOrientation orientation: UIInterfaceOrientation) -> UIPageViewControllerSpineLocation {
    //if (orientation == .Portrait) || (orientation == .PortraitUpsideDown) || (UIDevice.currentDevice().userInterfaceIdiom == .Phone) {
        // In portrait orientation or on iPhone: Set the spine position to "min" and the page view controller's view controllers array to contain just one view controller. Setting the spine position to 'UIPageViewControllerSpineLocationMid' in landscape orientation sets the doubleSided property to YES, so set it to NO here.
        let currentViewController = self.pageViewController!.viewControllers[0] as UIViewController
        let viewControllers: NSArray = [currentViewController]
        self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in })

        self.pageViewController!.doubleSided = false
        return .Min
    //}

    // In landscape orientation: Set set the spine location to "mid" and the page view controller's view controllers array to contain two view controllers. If the current page is even, set it to contain the current and next view controllers; if it is odd, set the array to contain the previous and current view controllers.
    //let currentViewController = self.pageViewController!.viewControllers[0] as DataViewController
    //var viewControllers: NSArray

    //let indexOfCurrentViewController = currentViewController.index  //self.modelController.indexOfViewController(currentViewController)
    //if (indexOfCurrentViewController == 0) || (indexOfCurrentViewController % 2 == 0) {
      //  let nextViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerAfterViewController: currentViewController)
        //viewControllers = [currentViewController, nextViewController!]
    //} else {
        //let previousViewController = self.modelController.pageViewController(self.pageViewController!, viewControllerBeforeViewController: currentViewController)
        //viewControllers = [previousViewController!, currentViewController]
    //}
    //self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: true, completion: {done in })

    //return .Mid
}

func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) {
    pageAnimationFinished = false
}

//modelController.swift


    class ModelController: NSObject, UIPageViewControllerDataSource {

    // var pageData = NSArray()
    lazy var controllers:[DataViewController] = []


override init() {
    super.init()
}


func createCacheController(storyboard: UIStoryboard) {
    controllers = [];
    for i in 0..<2 {
        let controller = storyboard.instantiateViewControllerWithIdentifier("DataViewController") as DataViewController
        controllers.append(controller)
    }

}

func viewControllerAtIndex(storyboard: UIStoryboard, offset: Int) -> DataViewController? {

    println(" offset:\(offset)")
    let controller = controllers.removeAtIndex(0)
    controllers.append(controller)
    controller.offset = offset
    return controller

}


// MARK: - Page View Controller Data Source
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
    let controller = viewController as DataViewController
    if controller.offset == 0 {
        return nil
    }
    return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.prevCharacherIndex)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    let controller = viewController as DataViewController
    if controller.isScrollToEnd{
        return nil
    }

    return self.viewControllerAtIndex(viewController.storyboard!, offset: controller.nextCharacherIndex)
}