[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n#\n# Pods/\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: objective-c\nosx_image: xcode7.3\nxcode_project: WMPageController-Swift.xcodeproj\nxcode_scheme: WMPageControllerSwiftFramework\nxcode_sdk: iphonesimulator9.3\nenv:\n  global:\n  - FRAMEWORK_NAME=WMPageControllerSwiftFramework\nbefore_install:\n- brew update\n- brew outdated carthage || brew upgrade carthage\nbefore_script: \nbefore_deploy:\n- carthage build --no-skip-current\n- carthage archive WMPageControllerSwift\ndeploy:\n  provider: releases\n  api_key:\n    secure: hxnNtDAGGZFHRMxJF02POFZfDZq7mjYd+B1osAtCXPmf7wE+Twk3+Ax4VuFR3bGrtYCbegaSWFsrxwG7JOtqTzDQ6eIJvvK85N6+//MX3iyloO/sbtljgDEdDDdjwKiIK3pQhnL9F7Rd+3fz5JAVPYIkNEO5E7BnwvDIWQOxK/QtW5fhBmuGM1+YacvsQX8f+MrHjKslIsZp5DRaXXLtyDlV8eKwHef127+nRmnvkPBHVA/ZQhVMLAdcuNvzl64XXryDgNQxCDCqNw60IiIFnMNtaN1G1H9JwF0mQBWm4Pn8Yua+KV8rVOyW3F39YXFCrfcBIfgqJpeB7bzJr7WD2p2G4y1x2yAiXn1Dc5TpCrhnLffoJ3MtyD2KbgD/kVsKOtnfWAdAHyKIbSTQIEpHfRLcr7beucANxoDK4VMtARPsz1WGyzNqUU+Chguj32B6IXKB3NMifXy7syBBT59ZJzUCbyp1Om/CAJDCChP8EsByFD8AhDSYfZKvfO3NK/x+qZdgxV3EOiCrcF9q7rACA32yyxXTa75J+LzcsgN/ESd9GPOC8E8t0I86JdwwRlROGUNjcSRFOcGZ50Rrdd2c5L42rD1OOkTzUCAnacj2U2ewnyDREQ0SQ7EYsrVl8Mtzglb1VNISrsgscx2gJwCZXtbWIitMdcGCv6K1mMB9HNg=\n  file: WMPageControllerSwift.framework.zip\n  on:\n    repo: wangmchn/WMPageController-Swift\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Wang Ming\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "PageController/FloodView.swift",
    "content": "//\n//  FooldView.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass FloodView: ProgressView {\n\n    // MARK: - Vars\n    var hollow = false\n    fileprivate var margin: CGFloat = 0.0\n    fileprivate var radius: CGFloat = 0.0\n    fileprivate var height: CGFloat = 0.0\n\n    // MARK: - Private funcs\n    override func willMove(toSuperview newSuperview: UIView?) {\n        height = frame.size.height\n        margin = height * 0.15\n        radius = (height - margin * 2.0) / 2.0\n    }\n    \n    override func draw(_ rect: CGRect) {\n        // Drawing code\n        let currentIndex = Int(progress)\n        let rate = progress - CGFloat(currentIndex)\n        let nextIndex = (currentIndex + 1) >= itemFrames.count ? currentIndex : currentIndex + 1\n        let currentFrame = itemFrames[currentIndex]\n        let currentWidth = currentFrame.size.width\n        let currentX = currentFrame.origin.x\n        let nextWidth = itemFrames[nextIndex].size.width\n        let nextX = self.itemFrames[nextIndex].origin.x\n        let startX = currentX + (nextX - currentX) * rate\n        let endX = startX + currentWidth + (nextWidth - currentWidth) * rate\n        let ctx = UIGraphicsGetCurrentContext()\n        ctx?.translateBy(x: 0.0, y: height)\n        ctx?.scaleBy(x: 1.0, y: -1.0)\n        ctx?.addArc(center: CGPoint(x: startX + radius, y: height / 2.0), radius: radius, startAngle: CGFloat(Double.pi / 2), endAngle: CGFloat(Double.pi / 2) * 3, clockwise: false)\n        // CGContextAddArc(ctx, startX + radius, height / 2.0, radius, CGFloat(M_PI_2), CGFloat(M_PI_2) * 3, 0)\n        ctx?.addLine(to: CGPoint(x: endX - radius, y: margin))\n        ctx?.addArc(center: CGPoint(x: endX - radius, y: height / 2.0), radius: radius, startAngle: CGFloat(-Double.pi / 2), endAngle: CGFloat(Double.pi / 2), clockwise: false)\n        // CGContextAddArc(ctx, endX - radius, height / 2.0, radius, CGFloat(-M_PI_2), CGFloat(M_PI_2), 0)\n        ctx?.closePath()\n        if hollow == true {\n            ctx?.setStrokeColor(color)\n            ctx?.strokePath()\n            return\n        }\n        ctx?.closePath()\n        ctx?.setFillColor(color)\n        ctx?.fillPath()\n    }\n    \n}\n"
  },
  {
    "path": "PageController/MenuItem.swift",
    "content": "//\n//  MenuItem.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nprotocol MenuItemDelegate: NSObjectProtocol {\n    func didSelectedMenuItem(_ menuItem: MenuItem)\n}\n\nclass MenuItem: UILabel {\n    \n    // MARK: - Public vars\n    var normalSize: CGFloat = 15.0\n    var selectedSize: CGFloat = 18.0\n    weak var delegate: MenuItemDelegate?\n    \n    var selected = false {\n        didSet { rate = (selected == false) ? 0.0 : 1.0 }\n    }\n    \n    var rate: CGFloat = 0.0 {\n        didSet {\n            let red = normalComponents.red + (selectedComponets.red - normalComponents.red) * rate\n            let green = normalComponents.green + (selectedComponets.green - normalComponents.green) * rate\n            let blue = normalComponents.blue + (selectedComponets.blue - normalComponents.blue) * rate\n            let alpha = normalComponents.alpha + (selectedComponets.alpha - normalComponents.alpha) * rate\n            let minScale = normalSize / selectedSize\n            let trueScale = minScale + (1 - minScale) * rate\n            textColor = UIColor(red: red, green: green, blue: blue, alpha: alpha)\n            transform = CGAffineTransform(scaleX: trueScale, y: trueScale)\n        }\n    }\n    \n    var normalColor: UIColor? {\n        didSet {\n            normalColor?.getRed(&normalComponents.red, green: &normalComponents.green, blue: &normalComponents.blue, alpha: &normalComponents.alpha)\n        }\n    }\n    \n    var selectedColor: UIColor? {\n        didSet {\n            selectedColor?.getRed(&selectedComponets.red, green: &selectedComponets.green, blue: &selectedComponets.blue, alpha: &selectedComponets.alpha)\n        }\n    }\n    \n    // MARK: - Private vars\n    fileprivate var normalComponents: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) = (0.0, 0.0, 0.0, 0.0)\n    fileprivate var selectedComponets: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) = (0.0, 0.0, 0.0, 0.0)\n    \n    // MARK: - Public funcs\n    func selectWithAnimation(_ select: Bool) -> Void {\n        if selected == select { return }\n        UIView.animate(withDuration: 0.3, animations: { () -> Void in\n            if self.selected == true {\n                self.rate = 0.0\n            } else {\n                self.rate = 1.0\n            }\n            self.selected = select\n        }) \n    }\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setup()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setup()\n    }\n\n    // MARK: - Private funcs\n    fileprivate func setup() {\n        textAlignment = NSTextAlignment.center\n        isUserInteractionEnabled = true\n        backgroundColor = .clear\n        numberOfLines = 0\n    }\n    \n    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {\n        delegate?.didSelectedMenuItem(self)\n    }\n}\n"
  },
  {
    "path": "PageController/MenuView.swift",
    "content": "//\n//  MenuView.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\n@objc public protocol MenuViewDelegate: NSObjectProtocol {\n    func menuView(_ menuView: MenuView, widthForItemAtIndex index: Int) -> CGFloat\n    @objc optional func menuView(_ menuView: MenuView, didSelectedIndex index: Int, fromIndex currentIndex: Int)\n    @objc optional func menuView(_ menuView: MenuView, itemMarginAtIndex index: Int) -> CGFloat\n}\n\n@objc public protocol MenuViewDataSource: NSObjectProtocol {\n    func menuView(_ menuView: MenuView, titleAtIndex index: Int) -> String\n    func numbersOfTitlesInMenuView(_ menuView: MenuView) -> Int\n}\n\npublic enum MenuViewStyle {\n    case `default`, line, flood, fooldHollow\n}\n\nopen class MenuView: UIView, MenuItemDelegate {\n\n    // MARK: - Public vars\n    override open var frame: CGRect {\n        didSet {\n            guard contentView != nil else { return }\n\n            let rightMargin = (rightView == nil) ? contentMargin : contentMargin + rightView!.frame.width\n            let leftMargin  = (leftView == nil) ? contentMargin : contentMargin + leftView!.frame.width\n            let contentWidth = contentView.frame.width + leftMargin + rightMargin\n            \n            let startX = (leftView != nil) ? leftView!.frame.origin.x : (contentView.frame.origin.x - contentMargin)\n            \n            // Make the contentView center, because system will change menuView's frame if it's a titleView.\n            if (startX + contentWidth / 2 != bounds.width / 2) {\n                let xOffset = (contentWidth - bounds.width) / 2\n                contentView.frame.origin.x -= xOffset\n                rightView?.frame.origin.x -= xOffset\n                leftView?.frame.origin.x -= xOffset\n            }\n            \n        }\n    }\n    \n    open weak var leftView: UIView? {\n        willSet {\n            leftView?.removeFromSuperview()\n        }\n        didSet {\n            if let lView = leftView {\n                addSubview(lView)\n            }\n            resetFrames()\n        }\n    }\n    \n    open weak var rightView: UIView? {\n        willSet {\n            rightView?.removeFromSuperview()\n        }\n        didSet {\n            if let rView = rightView {\n                addSubview(rView)\n            }\n            resetFrames()\n        }\n    }\n    \n    open var contentMargin: CGFloat = 0.0 {\n        didSet {\n            guard contentView != nil else { return }\n            resetFrames()\n        }\n    }\n    \n    open var style = MenuViewStyle.default\n    open var fontName: String?\n    open var progressHeight: CGFloat = 2.0\n    open var normalSize: CGFloat = 15.0\n    open var selectedSize: CGFloat = 18.0\n    open var progressColor: UIColor?\n    \n    open weak var delegate: MenuViewDelegate?\n    open weak var dataSource: MenuViewDataSource!\n    open lazy var normalColor = UIColor.black\n    open lazy var selectedColor = UIColor(red: 168.0/255.0, green: 20.0/255.0, blue: 4/255.0, alpha: 1.0)\n    \n    // MARK: - Private vars\n    fileprivate weak var contentView: UIScrollView!\n    fileprivate weak var progressView: ProgressView?\n    fileprivate weak var selectedItem: MenuItem!\n    fileprivate var itemFrames = [CGRect]()\n    fileprivate let tagGap = 6250\n    fileprivate var itemsCount: Int {\n        return dataSource.numbersOfTitlesInMenuView(self)\n    }\n    \n    open func reload() {\n        itemFrames.removeAll()\n        progressView?.removeFromSuperview()\n        for subview in contentView.subviews {\n            subview.removeFromSuperview()\n        }\n\n        addMenuItems()\n        addProgressView()\n    }\n    \n    // MARK: - Public funcs\n    open func slideMenuAtProgress(_ progress: CGFloat) {\n        progressView?.progress = progress\n        let tag = Int(progress) + tagGap\n        let rate = progress - CGFloat(tag - tagGap)\n        let currentItem = viewWithTag(tag) as? MenuItem\n        let nextItem = viewWithTag(tag + 1) as? MenuItem\n        if rate == 0.0 {\n            selectedItem.selected = false\n            selectedItem = currentItem\n            selectedItem.selected = true\n            refreshContentOffset()\n            return\n        }\n        currentItem?.rate = 1.0 - rate\n        nextItem?.rate = rate\n    }\n    \n    open func selectItemAtIndex(_ index: Int) {\n        let tag = index + tagGap\n        let currentIndex = selectedItem.tag - tagGap\n        guard currentIndex != index && selectedItem != nil else { return }\n        \n        let menuItem = viewWithTag(tag) as! MenuItem\n        selectedItem.selected = false\n        selectedItem = menuItem\n        selectedItem.selected = true\n        progressView?.moveToPosition(index, animation: false)\n        delegate?.menuView?(self, didSelectedIndex: index, fromIndex: currentIndex)\n        refreshContentOffset()\n    }\n    \n    // MARK: - Update Title\n    open func updateTitle(_ title: String, atIndex index: Int, andWidth update: Bool) {\n        guard index >= 0 && index < itemsCount else { return }\n        let item = viewWithTag(tagGap + index) as? MenuItem\n        item?.text = title\n        guard update else { return }\n        resetFrames()\n    }\n    \n    // MARK: - Update Frames\n    open func resetFrames() {\n\n        var contentFrame = bounds\n        if let rView = rightView {\n            var rightFrame = rView.frame\n            rightFrame.origin.x = contentFrame.width - rightFrame.width\n            rightView?.frame = rightFrame\n            contentFrame.size.width -= rightFrame.width\n        }\n        \n        if let lView = leftView {\n            var leftFrame = lView.frame\n            leftFrame.origin.x = 0\n            leftView?.frame = leftFrame\n            contentFrame.origin.x += leftFrame.width\n            contentFrame.size.width -= leftFrame.width\n        }\n        \n        contentFrame.origin.x += contentMargin\n        contentFrame.size.width -= contentMargin * 2\n        contentView.frame = contentFrame\n        resetFramesFromIndex(0)\n        refreshContentOffset()\n    }\n    \n    open func resetFramesFromIndex(_ index: Int) {\n        itemFrames.removeAll()\n        calculateFrames()\n        for i in index ..< itemsCount {\n            let item = viewWithTag(tagGap + i) as? MenuItem\n            item?.frame = itemFrames[i]\n        }\n        if let progress = progressView {\n            var pFrame = progress.frame\n            pFrame.size.width = contentView.contentSize.width\n            if progress.isKind(of: FloodView.self) {\n                pFrame.origin.y = 0\n            } else {\n                pFrame.origin.y = frame.size.height - progressHeight\n            }\n            progress.frame = pFrame\n            progress.itemFrames = itemFrames\n            progress.setNeedsDisplay()\n        }\n    }\n    \n    // MARK: - Private funcs\n    override open func willMove(toSuperview newSuperview: UIView?) {\n        super.willMove(toSuperview: newSuperview)\n        guard contentView == nil else { return }\n        addScollView()\n        addMenuItems()\n        addProgressView()\n    }\n    \n    fileprivate func refreshContentOffset() {\n        let itemFrame = selectedItem.frame\n        let itemX = itemFrame.origin.x\n        let width = contentView.frame.size.width\n        let contentWidth = contentView.contentSize.width\n        if itemX > (width / 2) {\n            var targetX: CGFloat = itemFrame.origin.x - width/2 + itemFrame.size.width/2\n            if (contentWidth - itemX) <= (width / 2) {\n                targetX = contentWidth - width\n            }\n            if (targetX + width) > contentWidth {\n                targetX = contentWidth - width\n            }\n            contentView.setContentOffset(CGPoint(x: targetX, y: 0), animated: true)\n        } else {\n            contentView.setContentOffset(CGPoint.zero, animated: true)\n        }\n    }\n    \n    // MARK: - Create Views\n    fileprivate func addScollView() {\n        let scrollViewFrame = CGRect(x: contentMargin, y: 0, width: frame.size.width - contentMargin * 2, height: frame.size.height)\n        let scrollView = UIScrollView(frame: scrollViewFrame)\n        scrollView.showsVerticalScrollIndicator = false\n        scrollView.showsHorizontalScrollIndicator = false\n        scrollView.backgroundColor = .clear\n        scrollView.scrollsToTop = false\n        addSubview(scrollView)\n        contentView = scrollView\n    }\n    \n    fileprivate func addMenuItems() {\n        calculateFrames()\n        for index in 0 ..< itemsCount {\n            let menuItemFrame = itemFrames[index]\n            let menuItem = MenuItem(frame: menuItemFrame)\n            menuItem.tag = index + tagGap\n            menuItem.delegate = self\n            menuItem.text = dataSource.menuView(self, titleAtIndex: index)\n            menuItem.textColor = normalColor\n            if let optionalFontName = fontName {\n                menuItem.font = UIFont(name: optionalFontName, size: selectedSize)\n            } else {\n                menuItem.font = UIFont.systemFont(ofSize: selectedSize)\n            }\n            menuItem.normalSize    = normalSize\n            menuItem.selectedSize  = selectedSize\n            menuItem.normalColor   = normalColor\n            menuItem.selectedColor = selectedColor\n            menuItem.selected = (index == 0) ? true : false\n            if index == 0 { selectedItem = menuItem }\n            contentView.addSubview(menuItem)\n        }\n    }\n    \n    fileprivate func addProgressView() {\n        var optionalType: ProgressView.Type?\n        var hollow = false\n        switch style {\n            case .default: break\n            case .line: optionalType = ProgressView.self\n            case .fooldHollow:\n                optionalType = FloodView.self\n                hollow = true\n            case .flood: optionalType = FloodView.self\n        }\n        if let viewType = optionalType {\n            let pView = viewType.init()\n            let height = (style == .line) ? progressHeight : frame.size.height\n            let progressY = (style == .line) ? (frame.size.height - progressHeight) : 0\n            pView.frame = CGRect(x: 0, y: progressY, width: contentView.contentSize.width, height: height)\n            pView.itemFrames = itemFrames\n            if (progressColor == nil) {\n                progressColor = selectedColor\n            }\n            pView.color = (progressColor?.cgColor)!\n            pView.backgroundColor = .clear\n            if let fooldView = pView as? FloodView {\n                fooldView.hollow = hollow\n            }\n            contentView.insertSubview(pView, at: 0)\n            progressView = pView\n        }\n    }\n    \n    // MARK: - Calculate Frames\n    fileprivate func calculateFrames() {\n        var contentWidth: CGFloat = itemMarginAtIndex(0)\n        for index in 0 ..< itemsCount {\n            let itemWidth = delegate!.menuView(self, widthForItemAtIndex: index)\n            let itemFrame = CGRect(x: contentWidth, y: 0, width: itemWidth, height: frame.size.height)\n            itemFrames.append(itemFrame)\n            contentWidth += itemWidth + itemMarginAtIndex(index + 1)\n        }\n        if contentWidth < contentView.frame.size.width {\n            let distance = contentView.frame.size.width - contentWidth\n            let itemMargin = distance / CGFloat(itemsCount + 1)\n            for index in 0 ..< itemsCount {\n                var itemFrame = itemFrames[index]\n                itemFrame.origin.x += itemMargin * CGFloat(index + 1)\n                itemFrames[index] = itemFrame\n            }\n            contentWidth = contentView.frame.size.width\n        }\n        contentView.contentSize = CGSize(width: contentWidth, height: frame.size.height)\n    }\n    \n    fileprivate func itemMarginAtIndex(_ index: Int) -> CGFloat {\n        if let itemMargin = delegate?.menuView?(self, itemMarginAtIndex: index) {\n            return itemMargin\n        }\n        return 0.0\n    }\n    \n    // MARK: - MenuItemDelegate\n    func didSelectedMenuItem(_ menuItem: MenuItem) {\n        if selectedItem == menuItem { return }\n        let position = menuItem.tag - tagGap\n        let currentIndex = selectedItem.tag - tagGap\n        progressView?.moveToPosition(position, animation: true)\n        delegate?.menuView?(self, didSelectedIndex: position, fromIndex: currentIndex)\n        \n        menuItem.selectWithAnimation(true)\n        selectedItem.selectWithAnimation(false)\n        selectedItem = menuItem\n        refreshContentOffset()\n    }\n    \n}\n"
  },
  {
    "path": "PageController/PageController.swift",
    "content": "//\n//  PageController.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\npublic enum CachePolicy: Int {\n    case noLimit    = 0\n    case lowMemory  = 1\n    case balanced   = 3\n    case high       = 5\n}\n\npublic enum PreloadPolicy: Int {\n    case never      = 0\n    case neighbour  = 1\n    case near       = 2\n}\n\npublic let WMPageControllerDidMovedToSuperViewNotification = \"WMPageControllerDidMovedToSuperViewNotification\"\npublic let WMPageControllerDidFullyDisplayedNotification = \"WMPageControllerDidFullyDisplayedNotification\"\n\n@objc public protocol PageControllerDataSource: NSObjectProtocol {\n    @objc optional func numberOfControllersInPageController(_ pageController: PageController) -> Int\n    @objc optional func pageController(_ pageController: PageController, viewControllerAtIndex index: Int) -> UIViewController\n    @objc optional func pageController(_ pageController: PageController, titleAtIndex index: Int) -> String\n}\n\n@objc public protocol PageControllerDelegate: NSObjectProtocol {\n    @objc optional func pageController(_ pageController: PageController, lazyLoadViewController viewController: UIViewController, withInfo info: NSDictionary)\n    @objc optional func pageController(_ pageController: PageController, willCachedViewController viewController: UIViewController, withInfo info: NSDictionary)\n    @objc optional func pageController(_ pageController: PageController, willEnterViewController viewController: UIViewController, withInfo info: NSDictionary)\n    @objc optional func pageController(_ pageController: PageController, didEnterViewController viewController: UIViewController, withInfo info: NSDictionary)\n}\n\nopen class ContentView: UIScrollView, UIGestureRecognizerDelegate {\n    \n    open func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {\n        \n        guard let wrapperView = NSClassFromString(\"UITableViewWrapperView\"), let otherGestureView = otherGestureRecognizer.view else { return false }\n        \n        if otherGestureView.isKind(of: wrapperView) && (otherGestureRecognizer is UIPanGestureRecognizer) {\n            return true\n        }\n        return false\n    }\n    \n}\n\nopen class PageController: UIViewController, UIScrollViewDelegate, MenuViewDelegate, MenuViewDataSource, PageControllerDelegate, PageControllerDataSource {\n    \n    // MARK: - Public vars\n    open weak var dataSource: PageControllerDataSource?\n    open weak var delegate: PageControllerDelegate?\n    \n    open var viewControllerClasses: [UIViewController.Type]?\n    open var titles: [String]?\n    open var values: NSArray?\n    open var keys: [String]?\n    open var progressColor: UIColor?\n    open var progressHeight: CGFloat = 2.0\n    open var itemMargin: CGFloat = 0.0\n    open var menuViewStyle = MenuViewStyle.default\n    open var titleFontName: String?\n    open var pageAnimatable   = false\n    open var postNotification = false\n    open var bounces = false\n    open var showOnNavigationBar = false\n    open var startDragging = false\n    open var titleSizeSelected: CGFloat  = 18.0\n    open var titleSizeNormal: CGFloat    = 15.0\n    open var menuHeight: CGFloat         = 30.0\n    open var menuItemWidth: CGFloat      = 65.0\n    open weak var contentView: ContentView?\n    open weak var menuView: MenuView?\n\n    open var itemsWidths: [CGFloat]?\n    \n    open fileprivate(set) var currentViewController: UIViewController?\n    \n    open var selectedIndex: Int {\n        set {\n            _selectedIndex = newValue\n            menuView?.selectItemAtIndex(newValue)\n        }\n        get { return _selectedIndex }\n    }\n    \n    open var menuViewContentMargin: CGFloat = 0.0 {\n        didSet {\n            guard let menu = menuView else { return }\n            menu.contentMargin = oldValue\n        }\n    }\n    \n    open var viewFrame = CGRect() {\n        didSet {\n            if let _ = menuView {\n                hasInit = false\n                viewDidLayoutSubviews()\n            }\n        }\n    }\n    \n    open var itemsMargins: [CGFloat]?\n    open var preloadPolicy: PreloadPolicy = .never\n    \n    open var cachePolicy: CachePolicy = .noLimit {\n        didSet { memCache.countLimit = cachePolicy.rawValue }\n    }\n    \n    open lazy var titleColorSelected = UIColor(red: 168.0/255.0, green: 20.0/255.0, blue: 4/255.0, alpha: 1.0)\n    open lazy var titleColorNormal = UIColor.black\n    open lazy var menuBGColor = UIColor(red: 244.0/255.0, green: 244.0/255.0, blue: 244.0/255.0, alpha: 1.0)\n    \n    override open var edgesForExtendedLayout: UIRectEdge {\n        didSet {\n            hasInit = false\n            viewDidLayoutSubviews()\n        }\n    }\n    \n    // MARK: - Private vars\n    fileprivate var memoryWarningCount = 0\n    fileprivate var viewHeight: CGFloat = 0.0\n    fileprivate var viewWidth: CGFloat = 0.0\n    fileprivate var viewX: CGFloat = 0.0\n    fileprivate var viewY: CGFloat = 0.0\n    fileprivate var _selectedIndex = 0\n    fileprivate var targetX: CGFloat = 0.0\n    fileprivate var superviewHeight: CGFloat = 0.0\n    fileprivate var hasInit = false\n    fileprivate var shouldNotScroll = false\n    fileprivate var initializedIndex = -1\n    fileprivate var controllerCount  = -1\n    \n    fileprivate var childControllersCount: Int {\n        if controllerCount == -1 {\n            if let count = dataSource?.numberOfControllersInPageController?(self) {\n                controllerCount = count\n            } else {\n                controllerCount = (viewControllerClasses?.count ?? 0)\n            }\n        }\n        return controllerCount\n    }\n    \n    lazy fileprivate var displayingControllers = NSMutableDictionary()\n    lazy fileprivate var memCache = NSCache<NSNumber, UIViewController>()\n    lazy fileprivate var childViewFrames = [CGRect]()\n    \n    // MARK: - Life cycle\n    public convenience init(vcClasses: [UIViewController.Type], theirTitles: [String]) {\n        self.init()\n        assert(vcClasses.count == theirTitles.count, \"`vcClasses.count` must equal to `titles.count`\")\n        titles = theirTitles\n        viewControllerClasses = vcClasses\n    }\n    \n    override open func viewDidLoad() {\n        super.viewDidLoad()\n        view.backgroundColor = .white\n        guard childControllersCount > 0 else { return }\n\n        calculateSize()\n        addScrollView()\n        addViewControllerAtIndex(_selectedIndex)\n        currentViewController = displayingControllers[_selectedIndex] as? UIViewController\n        addMenuView()\n    }\n\n    override open func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        guard childControllersCount > 0 else { return }\n        \n        let oldSuperviewHeight = superviewHeight\n        superviewHeight = view.frame.size.height\n        guard (!hasInit || superviewHeight != oldSuperviewHeight) && (view.window != nil) else { return }\n        \n        calculateSize()\n        adjustScrollViewFrame()\n        adjustMenuViewFrame()\n        removeSuperfluousViewControllersIfNeeded()\n        currentViewController?.view.frame = childViewFrames[_selectedIndex]\n        hasInit = true\n        view.layoutIfNeeded()\n    }\n    \n    override open func viewDidAppear(_ animated: Bool) {\n        super.viewDidAppear(animated)\n        guard childControllersCount > 0 else { return }\n        postFullyDisplayedNotificationWithIndex(_selectedIndex)\n        didEnterController(currentViewController!, atIndex: _selectedIndex)\n    }\n    \n    override open func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n\n        memoryWarningCount += 1\n        cachePolicy = CachePolicy.lowMemory\n        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(PageController.growCachePolicyAfterMemoryWarning), object: nil)\n        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(PageController.growCachePolicyToHigh), object: nil)\n        memCache.removeAllObjects()\n        if memoryWarningCount < 3 {\n            perform(#selector(PageController.growCachePolicyAfterMemoryWarning), with: nil, afterDelay: 3.0, inModes: [RunLoopMode.commonModes])\n        }\n    }\n    \n    // MARK: - Reload\n    open func reloadData() {\n        clearDatas()\n        resetScrollView()\n        memCache.removeAllObjects()\n        viewDidLayoutSubviews()\n        resetMenuView()\n    }\n    \n    // MARK: - Update Title\n    open func updateTitle(_ title: String, atIndex index: Int) {\n        menuView?.updateTitle(title, atIndex: index, andWidth: false)\n    }\n    \n    open func updateTitle(_ title: String, atIndex index: Int, andWidth width: CGFloat) {\n        if var widths = itemsWidths {\n            guard index < widths.count else { return }\n            widths[index] = width\n            itemsWidths = widths\n        } else {\n            var widths = [CGFloat]()\n            for i in 0 ..< childControllersCount {\n                let newWidth = (i == index) ? width : menuItemWidth\n                widths.append(newWidth)\n            }\n            itemsWidths = widths\n        }\n        menuView?.updateTitle(title, atIndex: index, andWidth: true)\n    }\n    \n    // MARK: - Data Source\n    fileprivate func initializeViewControllerAtIndex(_ index: Int) -> UIViewController {\n        if let viewController = dataSource?.pageController?(self, viewControllerAtIndex: index) {\n            return viewController\n        }\n        return viewControllerClasses![index].init()\n    }\n    \n    fileprivate func titleAtIndex(_ index: Int) -> String {\n        if let titleAtIndex = dataSource?.pageController?(self, titleAtIndex: index) {\n            return titleAtIndex\n        }\n        return titles![index]\n    }\n    \n    // MARK: - Delegate\n    fileprivate func infoWithIndex(_ index: Int) -> NSDictionary {\n        let title = titleAtIndex(index)\n        return [\"title\": title, \"index\": index]\n    }\n    \n    fileprivate func willCachedController(_ vc: UIViewController, atIndex index: Int) {\n        guard childControllersCount > 0 else { return }\n        delegate?.pageController?(self, willCachedViewController: vc, withInfo: infoWithIndex(index))\n    }\n    \n    fileprivate func willEnterController(_ vc: UIViewController, atIndex index: Int) {\n        guard childControllersCount > 0 else { return }\n        delegate?.pageController?(self, willEnterViewController: vc, withInfo: infoWithIndex(index))\n    }\n    \n    fileprivate func didEnterController(_ vc: UIViewController, atIndex index: Int) {\n       \n        guard childControllersCount > 0 else { return }\n        \n        let info = infoWithIndex(index)\n\n        delegate?.pageController?(self, didEnterViewController: vc, withInfo: info)\n        \n        if initializedIndex == index {\n            delegate?.pageController?(self, lazyLoadViewController: vc, withInfo: info)\n            initializedIndex = -1\n        }\n        \n        if preloadPolicy == .never { return }\n        var start = 0\n        var end = childControllersCount - 1\n        if index > preloadPolicy.rawValue {\n            start = index - preloadPolicy.rawValue\n        }\n        \n        if childControllersCount - 1 > preloadPolicy.rawValue + index {\n            end = index + preloadPolicy.rawValue\n        }\n        \n        for i in start ... end {\n            if memCache.object(forKey: NSNumber(integerLiteral: i)) == nil && displayingControllers[i] == nil {\n                addViewControllerAtIndex(i)\n                postMovedToSuperViewNotificationWithIndex(i)\n            }\n        }\n        _selectedIndex = index\n    }\n    \n    // MARK: - Private funcs\n    fileprivate func clearDatas() {\n        controllerCount = -1\n        hasInit = false\n        _selectedIndex = _selectedIndex < childControllersCount ? _selectedIndex : childControllersCount - 1\n        for viewController in displayingControllers.allValues {\n            if let vc = viewController as? UIViewController {\n                vc.view.removeFromSuperview()\n                vc.willMove(toParentViewController: nil)\n                vc.removeFromParentViewController()\n            }\n        }\n        memoryWarningCount = 0\n        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(PageController.growCachePolicyAfterMemoryWarning), object: nil)\n        NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(PageController.growCachePolicyToHigh), object: nil)\n        currentViewController = nil\n        displayingControllers.removeAllObjects()\n        calculateSize()\n    }\n    \n    fileprivate func resetScrollView() {\n        contentView?.removeFromSuperview()\n        addScrollView()\n        addViewControllerAtIndex(_selectedIndex)\n        currentViewController = displayingControllers[_selectedIndex] as? UIViewController\n    }\n    \n    fileprivate func calculateSize() {\n        var navBarHeight = (navigationController != nil) ? navigationController!.navigationBar.frame.maxY : 0\n        let tabBar = tabBarController?.tabBar ?? (navigationController?.toolbar ?? nil)\n        let height = (tabBar != nil && tabBar?.isHidden != true) ? tabBar!.frame.height : 0\n        var tabBarHeight = (hidesBottomBarWhenPushed == true) ? 0 : height\n        \n        let mainWindow = UIApplication.shared.delegate?.window!\n        let absoluteRect = view.superview?.convert(view.frame, to: mainWindow)\n        if let rect = absoluteRect {\n            navBarHeight -= rect.origin.y;\n            tabBarHeight -= mainWindow!.frame.height - rect.maxY;\n        }\n        \n        viewX = viewFrame.origin.x\n        viewY = viewFrame.origin.y\n        if viewFrame == CGRect.zero {\n            viewWidth  = view.frame.size.width\n            viewHeight = view.frame.size.height - menuHeight - navBarHeight - tabBarHeight\n            viewY += navBarHeight\n        } else {\n            viewWidth = viewFrame.size.width\n            viewHeight = viewFrame.size.height - menuHeight\n        }\n        if showOnNavigationBar && (navigationController?.navigationBar != nil) {\n            viewHeight += menuHeight\n        }\n        childViewFrames.removeAll()\n        for index in 0 ..< childControllersCount {\n            let viewControllerFrame = CGRect(x: CGFloat(index) * viewWidth, y: 0, width: viewWidth, height: viewHeight)\n            childViewFrames.append(viewControllerFrame)\n        }\n    }\n    \n    fileprivate func addScrollView() {\n        let scrollView = ContentView()\n        scrollView.scrollsToTop = false\n        scrollView.isPagingEnabled = true\n        scrollView.delegate = self\n        scrollView.showsVerticalScrollIndicator = false\n        scrollView.showsHorizontalScrollIndicator = false\n        scrollView.bounces = bounces\n        view.addSubview(scrollView)\n        contentView = scrollView\n    }\n    \n    fileprivate func addMenuView() {\n        var menuY = viewY\n        if showOnNavigationBar && (navigationController?.navigationBar != nil) {\n            let naviHeight = navigationController!.navigationBar.frame.height\n            let realMenuHeight = menuHeight > naviHeight ? naviHeight : menuHeight\n            menuY = (naviHeight - realMenuHeight) / 2\n        }\n        \n        let menuViewFrame = CGRect(x: viewX, y: menuY, width: viewWidth, height: menuHeight)\n        let menu = MenuView(frame: menuViewFrame)\n        menu.delegate = self\n        menu.dataSource = self\n        menu.backgroundColor = menuBGColor\n        menu.normalSize = titleSizeNormal\n        menu.selectedSize = titleSizeSelected\n        menu.normalColor = titleColorNormal\n        menu.selectedColor = titleColorSelected\n        menu.style = menuViewStyle\n        menu.progressHeight = progressHeight\n        menu.progressColor = progressColor\n        menu.fontName = titleFontName\n        menu.contentMargin = menuViewContentMargin\n        if showOnNavigationBar && (navigationController?.navigationBar != nil) {\n            navigationItem.titleView = menu\n        } else {\n            view.addSubview(menu)\n        }\n        menuView = menu\n    }\n    \n    fileprivate func postMovedToSuperViewNotificationWithIndex(_ index: Int) {\n        guard postNotification else { return }\n        let info = [\"index\": index, \"title\": titleAtIndex(index)] as [String : Any]\n        NotificationCenter.default.post(name: Notification.Name(rawValue: WMPageControllerDidMovedToSuperViewNotification), object: info)\n    }\n    \n    fileprivate func postFullyDisplayedNotificationWithIndex(_ index: Int) {\n        guard postNotification else { return }\n        let info = [\"index\": index, \"title\": titleAtIndex(index)] as [String : Any]\n        NotificationCenter.default.post(name: Notification.Name(rawValue: WMPageControllerDidFullyDisplayedNotification), object: info)\n    }\n    \n    fileprivate func layoutChildViewControllers() {\n        let currentPage = Int(contentView!.contentOffset.x / viewWidth)\n        let start = currentPage == 0 ? currentPage : (currentPage - 1)\n        let end = (currentPage == childControllersCount - 1) ? currentPage : (currentPage + 1)\n        for index in start ... end {\n            let viewControllerFrame = childViewFrames[index]\n            var vc = displayingControllers.object(forKey: index)\n            if inScreen(viewControllerFrame) {\n                if vc == nil {\n                    vc = memCache.object(forKey: NSNumber(integerLiteral: index))\n                    if let viewController = vc as? UIViewController {\n                        addCachedViewController(viewController, atIndex: index)\n                    } else {\n                        addViewControllerAtIndex(index)\n                    }\n                    postMovedToSuperViewNotificationWithIndex(index)\n                }\n            } else {\n                if let viewController = vc as? UIViewController {\n                    removeViewController(viewController, atIndex: index)\n                }\n            }\n        }\n    }\n    \n    fileprivate func removeSuperfluousViewControllersIfNeeded() {\n        for (index, vc) in displayingControllers {\n            \n            let frame = childViewFrames[(index as AnyObject).intValue]\n            if (inScreen(frame) == false) {\n                removeViewController(vc as! UIViewController, atIndex: (index as AnyObject).intValue)\n            }\n        }\n    }\n    \n    fileprivate func addCachedViewController(_ viewController: UIViewController, atIndex index: Int) {\n        addChildViewController(viewController)\n        viewController.view.frame = childViewFrames[index]\n        viewController.didMove(toParentViewController: self)\n        contentView?.addSubview(viewController.view)\n        willEnterController(viewController, atIndex: index)\n        displayingControllers.setObject(viewController, forKey: index as NSCopying)\n    }\n    \n    fileprivate func addViewControllerAtIndex(_ index: Int) {\n        initializedIndex = index\n        let viewController = initializeViewControllerAtIndex(index)\n        if let optionalKeys = keys {\n            viewController.setValue(values?[index], forKey: optionalKeys[index])\n        }\n        addChildViewController(viewController)\n        viewController.view.frame = childViewFrames.count > 0 ? childViewFrames[index] : view.frame\n        viewController.didMove(toParentViewController: self)\n        contentView?.addSubview(viewController.view)\n        willEnterController(viewController, atIndex: index)\n        displayingControllers.setObject(viewController, forKey: index as NSCopying)\n    }\n    \n    fileprivate func removeViewController(_ viewController: UIViewController, atIndex index: Int) {\n        viewController.view.removeFromSuperview()\n        viewController.willMove(toParentViewController: nil)\n        viewController.removeFromParentViewController()\n        displayingControllers.removeObject(forKey: index)\n        if memCache.object(forKey: NSNumber(integerLiteral: index)) == nil {\n            willCachedController(viewController, atIndex: index)\n            memCache.setObject(viewController, forKey: NSNumber(integerLiteral: index))\n        }\n    }\n    \n    fileprivate func inScreen(_ frame: CGRect) -> Bool {\n        let x = frame.origin.x\n        let ScreenWidth = contentView!.frame.size.width\n        let contentOffsetX = contentView!.contentOffset.x\n        if (frame.maxX > contentOffsetX) && (x - contentOffsetX < ScreenWidth) {\n            return true\n        }\n        return false\n    }\n    \n    fileprivate func resetMenuView() {\n        if menuView == nil {\n            addMenuView()\n            return\n        }\n        menuView?.reload()\n        guard selectedIndex != 0 else { return }\n        menuView?.selectItemAtIndex(selectedIndex)\n        view.bringSubview(toFront: menuView!)\n    }\n    \n    @objc fileprivate func growCachePolicyAfterMemoryWarning() {\n        cachePolicy = CachePolicy.balanced\n        perform(#selector(PageController.growCachePolicyToHigh), with: nil, afterDelay: 2.0, inModes: [RunLoopMode.commonModes])\n    }\n    \n    @objc fileprivate func growCachePolicyToHigh() {\n        cachePolicy = CachePolicy.high\n    }\n    \n    // MARK: - Adjust Frame\n    fileprivate func adjustScrollViewFrame() {\n        shouldNotScroll = true\n        var scrollFrame = CGRect(x: viewX, y: viewY + menuHeight, width: viewWidth, height: viewHeight)\n        scrollFrame.origin.y -= showOnNavigationBar && (navigationController?.navigationBar != nil) ? menuHeight : 0\n        contentView?.frame = scrollFrame\n        contentView?.contentSize = CGSize(width: CGFloat(childControllersCount) * viewWidth, height: 0)\n        contentView?.contentOffset = CGPoint(x: CGFloat(_selectedIndex) * viewWidth, y: 0)\n        shouldNotScroll = false\n    }\n    \n    fileprivate func adjustMenuViewFrame() {\n        var realMenuHeight = menuHeight\n        var menuX = viewX\n        var menuY = viewY\n        \n        var rightWidth: CGFloat = 0.0\n        if showOnNavigationBar && (navigationController?.navigationBar != nil) {\n            for subview in (navigationController?.navigationBar.subviews)! {\n                guard let UINavigationBarBackgroundClass = NSClassFromString(\"_UINavigationBarBackground\") else {\n                    continue\n                }\n                \n                guard !subview.isKind(of: UINavigationBarBackgroundClass) && !subview.isKind(of: MenuView.self) && (subview.alpha != 0) && (subview.isHidden == false) else { continue }\n                \n                let maxX = subview.frame.maxX\n                if maxX < viewWidth / 2 {\n                    let leftWidth = maxX\n                    menuX = menuX > leftWidth ? menuX : leftWidth\n                }\n                let minX = subview.frame.minX\n                if minX > viewWidth / 2 {\n                    let width = viewWidth - minX\n                    rightWidth = rightWidth > width ? rightWidth : width\n                }\n                \n            }\n            let naviHeight = navigationController!.navigationBar.frame.height\n            realMenuHeight = menuHeight > naviHeight ? naviHeight : realMenuHeight\n            menuY = (naviHeight - realMenuHeight) / 2\n        }\n        let menuWidth = viewWidth - menuX - rightWidth\n        menuView?.frame = CGRect(x: menuX, y: menuY, width: menuWidth, height: realMenuHeight)\n        menuView?.resetFrames()\n        \n        if _selectedIndex != 0 {\n            menuView?.selectItemAtIndex(_selectedIndex)\n        }\n    }\n    \n    // MARK: - UIScrollView Delegate\n    open func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        if shouldNotScroll || !hasInit { return }\n        \n        layoutChildViewControllers()\n        guard startDragging else { return }\n        var contentOffsetX = contentView!.contentOffset.x\n        if contentOffsetX < 0.0 {\n            contentOffsetX = 0.0\n        }\n        if contentOffsetX > (scrollView.contentSize.width - viewWidth) {\n            contentOffsetX = scrollView.contentSize.width - viewWidth\n        }\n        let rate = contentOffsetX / viewWidth\n        menuView?.slideMenuAtProgress(rate)\n        \n        if scrollView.contentOffset.y == 0 { return }\n        var contentOffset = scrollView.contentOffset\n        contentOffset.y = 0.0\n        scrollView.contentOffset = contentOffset\n    }\n    \n    open func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {\n        startDragging = true\n        menuView?.isUserInteractionEnabled = false\n    }\n    \n    open func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {\n        menuView?.isUserInteractionEnabled = true\n        _selectedIndex = Int(contentView!.contentOffset.x / viewWidth)\n        removeSuperfluousViewControllersIfNeeded()\n        currentViewController = displayingControllers[_selectedIndex] as? UIViewController\n        postFullyDisplayedNotificationWithIndex(_selectedIndex)\n        didEnterController(currentViewController!, atIndex: _selectedIndex)\n    }\n    \n    open func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {\n        _selectedIndex = Int(contentView!.contentOffset.x / viewWidth)\n        removeSuperfluousViewControllersIfNeeded()\n        currentViewController = displayingControllers[_selectedIndex] as? UIViewController\n        postFullyDisplayedNotificationWithIndex(_selectedIndex)\n        didEnterController(currentViewController!, atIndex: _selectedIndex)\n    }\n    \n    open func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {\n        guard decelerate == false else { return }\n        menuView?.isUserInteractionEnabled = true\n        let rate = targetX / viewWidth\n        menuView?.slideMenuAtProgress(rate)\n    }\n    \n    open func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {\n        targetX = targetContentOffset.pointee.x\n    }\n    \n    // MARK: - MenuViewDelegate\n    open func menuView(_ menuView: MenuView, didSelectedIndex index: Int, fromIndex currentIndex: Int) {\n        guard hasInit else { return }\n        startDragging = false\n        let targetPoint = CGPoint(x: CGFloat(index) * viewWidth, y: 0)\n        contentView?.setContentOffset(targetPoint, animated: pageAnimatable)\n        if !pageAnimatable {\n            removeSuperfluousViewControllersIfNeeded()\n            if let viewController = displayingControllers[index] as? UIViewController {\n                removeViewController(viewController, atIndex: index)\n            }\n            layoutChildViewControllers()\n            currentViewController = displayingControllers[index] as? UIViewController\n            postFullyDisplayedNotificationWithIndex(index)\n            _selectedIndex = index\n            didEnterController(currentViewController!, atIndex: _selectedIndex)\n        }\n    }\n    \n    open func menuView(_ menuView: MenuView, widthForItemAtIndex index: Int) -> CGFloat {\n        if let widths = itemsWidths {\n            return widths[index]\n        }\n        return menuItemWidth\n    }\n    \n    open func menuView(_ menuView: MenuView, itemMarginAtIndex index: Int) -> CGFloat {\n        if let margins = itemsMargins {\n            return margins[index]\n        }\n        return itemMargin\n    }\n    \n    // MARK: - MenuViewDataSource\n    open func numbersOfTitlesInMenuView(_ menuView: MenuView) -> Int {\n        return childControllersCount\n    }\n    \n    open func menuView(_ menuView: MenuView, titleAtIndex index: Int) -> String {\n        return titleAtIndex(index)\n    }\n    \n}\n"
  },
  {
    "path": "PageController/ProgressView.swift",
    "content": "//\n//  ProgressView.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass ProgressView: UIView {\n    \n    // MARK: - Public vars\n    var itemFrames = [CGRect]()\n    var progress: CGFloat = 0.0 {\n        didSet { setNeedsDisplay() }\n    }\n    lazy var color: CGColor = UIColor.brown.cgColor\n    \n    // MARK: - Private vars\n    weak fileprivate var link: CADisplayLink?\n    fileprivate var gap: CGFloat = 0.0\n    fileprivate var step: CGFloat = 0.0\n    fileprivate var sign = 1\n    \n    // MARK: - Public funcs\n    func moveToPosition(_ position: Int, animation: Bool) {\n        if animation == false {\n            progress = CGFloat(position)\n            return\n        }\n        let pos = CGFloat(position)\n        gap = fabs(progress - pos)\n        sign = progress > pos ? -1 : 1\n        step = gap / 15.0\n        link?.remove(from: RunLoop.main, forMode: RunLoopMode.commonModes)\n        let tempLink = CADisplayLink(target: self, selector: #selector(ProgressView.progressChanged))\n        tempLink.add(to: RunLoop.main, forMode: RunLoopMode.commonModes)\n        link = tempLink\n    }\n    \n    func progressChanged() {\n        if gap > 0.000001 {\n            gap -= step\n            if gap < 0.0 {\n                progress = blurredCeil(progress + CGFloat(sign) * step )\n                return\n            }\n            progress += CGFloat(sign) * step\n        } else {\n            progress = blurredCeil(progress)\n            link?.invalidate()\n            link = nil\n        }\n    }\n    \n    fileprivate func blurredCeil(_ num: CGFloat) -> CGFloat {\n        let p = num + 0.5 \n        return floor(p)\n    }\n    \n    // MARK: - Private funcs\n    override func draw(_ rect: CGRect) {\n        // Drawing code\n        let ctx = UIGraphicsGetCurrentContext()\n        let index = Int(progress)\n        let rate = progress - CGFloat(index)\n        let currentFrame = itemFrames[index]\n        let currentWidth = currentFrame.size.width\n        let nextIndex = (index + 1 < itemFrames.count) ? index + 1 : index\n        let nextWidth = itemFrames[nextIndex].size.width\n        let height = frame.size.height\n        let constY = height / 2\n        let currentX = currentFrame.origin.x\n        let nextX = itemFrames[nextIndex].origin.x\n        let startX = currentX + (nextX - currentX) * rate\n        let endX = startX + currentWidth + (nextWidth - currentWidth) * rate\n        ctx?.move(to: CGPoint(x: startX, y: constY))\n        ctx?.addLine(to: CGPoint(x: endX, y: constY))\n        ctx?.setLineWidth(height)\n        ctx?.setStrokeColor(color)\n        ctx?.strokePath()\n    }\n    \n}\n"
  },
  {
    "path": "README.md",
    "content": "# WMPageController-Swift\n[![Build Status](https://travis-ci.org/wangmchn/WMPageController-Swift.svg?branch=master)](https://travis-ci.org/wangmchn/WMPageController-Swift)\n[![Platform](http://img.shields.io/badge/platform-iOS-blue.svg?style=flat\n)](https://developer.apple.com/iphone/index.action)\n[![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat\n)](http://mit-license.org)\n![CocoaPods Version](https://img.shields.io/badge/pod-v0.36.4-brightgreen.svg)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\nAn easy solution to page controllers like NetEase News.(Swift Implementation)<br>\n## Objective-C Version\nClick here: https://github.com/wangmchn/WMPageController\n## How to use\n[Objective-C README](https://github.com/wangmchn/WMPageController/blob/master/README.md)\n## CocoaPods\n```\npod 'WMPageController-Swift', '~> 1.3.3'\n```\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  StoryboardExample\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n        // Override point for customization after application launch.\n        self.window?.backgroundColor = .whiteColor()\n        return true\n    }\n\n    func applicationWillResignActive(application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "StoryboardExample/StoryboardExample/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"8150\" systemVersion=\"15A204g\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8122\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <animations/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10116\" systemVersion=\"15E65\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"riQ-5R-hbg\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Storyboard Test-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"CustomPageController\" customModule=\"StoryboardExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"Storyboard Test\" id=\"Ty8-iq-NF6\"/>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"844\" y=\"453\"/>\n        </scene>\n        <!--View Controller-->\n        <scene sceneID=\"u1u-7t-AXR\">\n            <objects>\n                <viewController storyboardIdentifier=\"ViewController\" id=\"w6x-mN-PN7\" customClass=\"ViewController\" customModule=\"StoryboardExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"b2X-h6-sdH\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"LAc-ne-R49\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"FDd-Q4-KmZ\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"It is a ViewController from Storyboard\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"MyO-h4-dxy\">\n                                <rect key=\"frame\" x=\"157\" y=\"289\" width=\"287\" height=\"21\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"MyO-h4-dxy\" firstAttribute=\"centerY\" secondItem=\"FDd-Q4-KmZ\" secondAttribute=\"centerY\" id=\"CHp-7Z-UNP\"/>\n                            <constraint firstItem=\"MyO-h4-dxy\" firstAttribute=\"centerX\" secondItem=\"FDd-Q4-KmZ\" secondAttribute=\"centerX\" id=\"Q6W-hi-wiF\"/>\n                            <constraint firstItem=\"MyO-h4-dxy\" firstAttribute=\"top\" secondItem=\"b2X-h6-sdH\" secondAttribute=\"bottom\" constant=\"269\" id=\"y59-pe-X39\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"NXO-BF-CPZ\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1487\" y=\"209\"/>\n        </scene>\n        <!--Table View Controller-->\n        <scene sceneID=\"flR-sr-zDH\">\n            <objects>\n                <tableViewController storyboardIdentifier=\"TableViewController\" id=\"Ca8-j7-wcJ\" customClass=\"TableViewController\" customModule=\"StoryboardExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"Kse-Nb-T6z\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <sections/>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"Ca8-j7-wcJ\" id=\"8Lv-l2-gEp\"/>\n                            <outlet property=\"delegate\" destination=\"Ca8-j7-wcJ\" id=\"l7A-FZ-35v\"/>\n                        </connections>\n                    </tableView>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"J0n-Dy-9G7\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"1487\" y=\"986\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"Izb-KV-RFs\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"riQ-5R-hbg\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"d7C-nr-Dxn\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"BYZ-38-t0r\" kind=\"relationship\" relationship=\"rootViewController\" id=\"lRN-zl-3vj\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"POT-7M-ujc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"32\" y=\"453\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/ParentController/CustomPageController.swift",
    "content": "//\n//  CustomPageController.swift\n//  StoryboardExample\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass CustomPageController: PageController {\n\n    var vcTitles = [\"use\", \"storyboard\", \"xib\"]\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        dataSource = self\n        delegate = self\n        preloadPolicy = PreloadPolicy.Neighbour\n        menuViewContentMargin = 10\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // Do any additional setup after loading the view.\n        menuView?.leftView = customButtonWithTitle(\"Left\")\n        menuView?.rightView = customButtonWithTitle(\"Right\")\n        \n        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(5.0 * Double(NSEC_PER_SEC)))\n        dispatch_after(delayTime, dispatch_get_main_queue()) {\n            self.vcTitles = [\"Test\", \"Test\", \"Test\", \"Test\", \"Test\", \"Test\"]\n            self.reloadData()\n        }\n    }\n\n    private func customButtonWithTitle(title: String) -> UIButton {\n        let button = UIButton(frame: CGRect(x: 0, y: 0, width: 60, height: menuHeight))\n        button.addTarget(self, action: #selector(CustomPageController.buttonPressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)\n        button.setTitle(title, forState: UIControlState.Normal)\n        button.setTitleColor(.blueColor(), forState: UIControlState.Normal)\n        return button\n    }\n    \n    @objc private func buttonPressed(sender: UIButton) {\n        print(sender)\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n    // MARK: - PageController DataSource\n    func numberOfControllersInPageController(pageController: PageController) -> Int {\n        return vcTitles.count\n    }\n    \n    func pageController(pageController: PageController, titleAtIndex index: Int) -> String {\n        return vcTitles[index]\n    }\n    \n    func pageController(pageController: PageController, viewControllerAtIndex index: Int) -> UIViewController {\n        let sb = UIStoryboard(name: \"Main\", bundle: nil)\n        switch index {\n            case 0: return sb.instantiateViewControllerWithIdentifier(\"ViewController\")\n            case 1: return sb.instantiateViewControllerWithIdentifier(\"TableViewController\")\n            default: return UIViewController()\n        }\n    }\n    \n    func pageController(pageController: PageController, lazyLoadViewController viewController: UIViewController, withInfo info: NSDictionary) {\n        print(info)\n    }\n    \n    override func menuView(menuView: MenuView, widthForItemAtIndex index: Int) -> CGFloat {\n        if index == 1 {\n            return 100\n        }\n        return 60\n    }\n    \n}\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/TableViewController.swift",
    "content": "//\n//  TableViewController.swift\n//  StoryboardExample\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass TableViewController: UITableViewController {\n\n    let reuseIdentifier = \"reuseIdentifier\"\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifier)\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n    // MARK: - Table view data source\n\n    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {\n        return 1\n    }\n\n    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return 100\n    }\n\n    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath)\n        cell.textLabel?.text = \"This is a TableViewController from Storyboard\"\n        cell.textLabel?.font = UIFont.systemFontOfSize(15)\n        return cell\n    }\n\n}\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  StoryboardExample\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view, typically from a nib.\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n\n}\n\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t4DCCF83D1CE8558A00C31A07 /* FooldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8381CE8558A00C31A07 /* FooldView.swift */; };\n\t\t4DCCF83E1CE8558A00C31A07 /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8391CE8558A00C31A07 /* MenuItem.swift */; };\n\t\t4DCCF83F1CE8558A00C31A07 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF83A1CE8558A00C31A07 /* MenuView.swift */; };\n\t\t4DCCF8401CE8558A00C31A07 /* PageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF83B1CE8558A00C31A07 /* PageController.swift */; };\n\t\t4DCCF8411CE8558A00C31A07 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF83C1CE8558A00C31A07 /* ProgressView.swift */; };\n\t\t4DF0A9781C39847100731373 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A9771C39847100731373 /* AppDelegate.swift */; };\n\t\t4DF0A97A1C39847100731373 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A9791C39847100731373 /* ViewController.swift */; };\n\t\t4DF0A97D1C39847100731373 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4DF0A97B1C39847100731373 /* Main.storyboard */; };\n\t\t4DF0A97F1C39847100731373 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4DF0A97E1C39847100731373 /* Assets.xcassets */; };\n\t\t4DF0A9821C39847100731373 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4DF0A9801C39847100731373 /* LaunchScreen.storyboard */; };\n\t\t4DF0A98D1C39847100731373 /* StoryboardExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A98C1C39847100731373 /* StoryboardExampleTests.swift */; };\n\t\t4DF0A9981C39847100731373 /* StoryboardExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A9971C39847100731373 /* StoryboardExampleUITests.swift */; };\n\t\t4DF0A9B21C3984EB00731373 /* CustomPageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A9B11C3984EB00731373 /* CustomPageController.swift */; };\n\t\t4DF0A9B51C3986D600731373 /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF0A9B41C3986D600731373 /* TableViewController.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t4DF0A9891C39847100731373 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4DF0A96C1C39847100731373 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4DF0A9731C39847100731373;\n\t\t\tremoteInfo = StoryboardExample;\n\t\t};\n\t\t4DF0A9941C39847100731373 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4DF0A96C1C39847100731373 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4DF0A9731C39847100731373;\n\t\t\tremoteInfo = StoryboardExample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t4DCCF8381CE8558A00C31A07 /* FooldView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FooldView.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF8391CE8558A00C31A07 /* MenuItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF83A1CE8558A00C31A07 /* MenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF83B1CE8558A00C31A07 /* PageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageController.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF83C1CE8558A00C31A07 /* ProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressView.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A9741C39847100731373 /* StoryboardExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StoryboardExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4DF0A9771C39847100731373 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A9791C39847100731373 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A97C1C39847100731373 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t4DF0A97E1C39847100731373 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t4DF0A9811C39847100731373 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t4DF0A9831C39847100731373 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4DF0A9881C39847100731373 /* StoryboardExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StoryboardExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4DF0A98C1C39847100731373 /* StoryboardExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryboardExampleTests.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A98E1C39847100731373 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4DF0A9931C39847100731373 /* StoryboardExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StoryboardExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4DF0A9971C39847100731373 /* StoryboardExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoryboardExampleUITests.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A9991C39847100731373 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4DF0A9B11C3984EB00731373 /* CustomPageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CustomPageController.swift; path = ParentController/CustomPageController.swift; sourceTree = \"<group>\"; };\n\t\t4DF0A9B41C3986D600731373 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t4DF0A9711C39847100731373 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A9851C39847100731373 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A9901C39847100731373 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t4DCCF8371CE8558A00C31A07 /* PageController */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DCCF8381CE8558A00C31A07 /* FooldView.swift */,\n\t\t\t\t4DCCF8391CE8558A00C31A07 /* MenuItem.swift */,\n\t\t\t\t4DCCF83A1CE8558A00C31A07 /* MenuView.swift */,\n\t\t\t\t4DCCF83B1CE8558A00C31A07 /* PageController.swift */,\n\t\t\t\t4DCCF83C1CE8558A00C31A07 /* ProgressView.swift */,\n\t\t\t);\n\t\t\tname = PageController;\n\t\t\tpath = ../../PageController;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A96B1C39847100731373 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9761C39847100731373 /* StoryboardExample */,\n\t\t\t\t4DF0A98B1C39847100731373 /* StoryboardExampleTests */,\n\t\t\t\t4DF0A9961C39847100731373 /* StoryboardExampleUITests */,\n\t\t\t\t4DF0A9751C39847100731373 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9751C39847100731373 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9741C39847100731373 /* StoryboardExample.app */,\n\t\t\t\t4DF0A9881C39847100731373 /* StoryboardExampleTests.xctest */,\n\t\t\t\t4DF0A9931C39847100731373 /* StoryboardExampleUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9761C39847100731373 /* StoryboardExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DCCF8371CE8558A00C31A07 /* PageController */,\n\t\t\t\t4DF0A9B31C3986B800731373 /* ChildControllers */,\n\t\t\t\t4DF0A9B01C3984BA00731373 /* ParentController */,\n\t\t\t\t4DF0A9771C39847100731373 /* AppDelegate.swift */,\n\t\t\t\t4DF0A97B1C39847100731373 /* Main.storyboard */,\n\t\t\t\t4DF0A97E1C39847100731373 /* Assets.xcassets */,\n\t\t\t\t4DF0A9801C39847100731373 /* LaunchScreen.storyboard */,\n\t\t\t\t4DF0A9831C39847100731373 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = StoryboardExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A98B1C39847100731373 /* StoryboardExampleTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A98C1C39847100731373 /* StoryboardExampleTests.swift */,\n\t\t\t\t4DF0A98E1C39847100731373 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = StoryboardExampleTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9961C39847100731373 /* StoryboardExampleUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9971C39847100731373 /* StoryboardExampleUITests.swift */,\n\t\t\t\t4DF0A9991C39847100731373 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = StoryboardExampleUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9B01C3984BA00731373 /* ParentController */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9B11C3984EB00731373 /* CustomPageController.swift */,\n\t\t\t);\n\t\t\tname = ParentController;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9B31C3986B800731373 /* ChildControllers */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9791C39847100731373 /* ViewController.swift */,\n\t\t\t\t4DF0A9B41C3986D600731373 /* TableViewController.swift */,\n\t\t\t);\n\t\t\tname = ChildControllers;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t4DF0A9731C39847100731373 /* StoryboardExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4DF0A99C1C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4DF0A9701C39847100731373 /* Sources */,\n\t\t\t\t4DF0A9711C39847100731373 /* Frameworks */,\n\t\t\t\t4DF0A9721C39847100731373 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = StoryboardExample;\n\t\t\tproductName = StoryboardExample;\n\t\t\tproductReference = 4DF0A9741C39847100731373 /* StoryboardExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t4DF0A9871C39847100731373 /* StoryboardExampleTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4DF0A99F1C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExampleTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4DF0A9841C39847100731373 /* Sources */,\n\t\t\t\t4DF0A9851C39847100731373 /* Frameworks */,\n\t\t\t\t4DF0A9861C39847100731373 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4DF0A98A1C39847100731373 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = StoryboardExampleTests;\n\t\t\tproductName = StoryboardExampleTests;\n\t\t\tproductReference = 4DF0A9881C39847100731373 /* StoryboardExampleTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t4DF0A9921C39847100731373 /* StoryboardExampleUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4DF0A9A21C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExampleUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4DF0A98F1C39847100731373 /* Sources */,\n\t\t\t\t4DF0A9901C39847100731373 /* Frameworks */,\n\t\t\t\t4DF0A9911C39847100731373 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4DF0A9951C39847100731373 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = StoryboardExampleUITests;\n\t\t\tproductName = StoryboardExampleUITests;\n\t\t\tproductReference = 4DF0A9931C39847100731373 /* StoryboardExampleUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t4DF0A96C1C39847100731373 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0720;\n\t\t\t\tLastUpgradeCheck = 0720;\n\t\t\t\tORGANIZATIONNAME = \"Wecan Studio\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t4DF0A9731C39847100731373 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t\t4DF0A9871C39847100731373 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t\tTestTargetID = 4DF0A9731C39847100731373;\n\t\t\t\t\t};\n\t\t\t\t\t4DF0A9921C39847100731373 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t\tTestTargetID = 4DF0A9731C39847100731373;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 4DF0A96F1C39847100731373 /* Build configuration list for PBXProject \"StoryboardExample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 4DF0A96B1C39847100731373;\n\t\t\tproductRefGroup = 4DF0A9751C39847100731373 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t4DF0A9731C39847100731373 /* StoryboardExample */,\n\t\t\t\t4DF0A9871C39847100731373 /* StoryboardExampleTests */,\n\t\t\t\t4DF0A9921C39847100731373 /* StoryboardExampleUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t4DF0A9721C39847100731373 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4DF0A9821C39847100731373 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t4DF0A97F1C39847100731373 /* Assets.xcassets in Resources */,\n\t\t\t\t4DF0A97D1C39847100731373 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A9861C39847100731373 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A9911C39847100731373 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t4DF0A9701C39847100731373 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4DCCF83F1CE8558A00C31A07 /* MenuView.swift in Sources */,\n\t\t\t\t4DF0A9B21C3984EB00731373 /* CustomPageController.swift in Sources */,\n\t\t\t\t4DCCF83D1CE8558A00C31A07 /* FooldView.swift in Sources */,\n\t\t\t\t4DCCF8401CE8558A00C31A07 /* PageController.swift in Sources */,\n\t\t\t\t4DF0A97A1C39847100731373 /* ViewController.swift in Sources */,\n\t\t\t\t4DF0A9B51C3986D600731373 /* TableViewController.swift in Sources */,\n\t\t\t\t4DCCF83E1CE8558A00C31A07 /* MenuItem.swift in Sources */,\n\t\t\t\t4DCCF8411CE8558A00C31A07 /* ProgressView.swift in Sources */,\n\t\t\t\t4DF0A9781C39847100731373 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A9841C39847100731373 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4DF0A98D1C39847100731373 /* StoryboardExampleTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4DF0A98F1C39847100731373 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4DF0A9981C39847100731373 /* StoryboardExampleUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t4DF0A98A1C39847100731373 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4DF0A9731C39847100731373 /* StoryboardExample */;\n\t\t\ttargetProxy = 4DF0A9891C39847100731373 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4DF0A9951C39847100731373 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4DF0A9731C39847100731373 /* StoryboardExample */;\n\t\t\ttargetProxy = 4DF0A9941C39847100731373 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t4DF0A97B1C39847100731373 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A97C1C39847100731373 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DF0A9801C39847100731373 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4DF0A9811C39847100731373 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t4DF0A99A1C39847100731373 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4DF0A99B1C39847100731373 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4DF0A99D1C39847100731373 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = StoryboardExample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4DF0A99E1C39847100731373 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = StoryboardExample/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4DF0A9A01C39847100731373 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = StoryboardExampleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExampleTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/StoryboardExample.app/StoryboardExample\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4DF0A9A11C39847100731373 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = StoryboardExampleTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExampleTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/StoryboardExample.app/StoryboardExample\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4DF0A9A31C39847100731373 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = StoryboardExampleUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = StoryboardExample;\n\t\t\t\tUSES_XCTRUNNER = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4DF0A9A41C39847100731373 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = StoryboardExampleUITests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.StoryboardExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_TARGET_NAME = StoryboardExample;\n\t\t\t\tUSES_XCTRUNNER = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t4DF0A96F1C39847100731373 /* Build configuration list for PBXProject \"StoryboardExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4DF0A99A1C39847100731373 /* Debug */,\n\t\t\t\t4DF0A99B1C39847100731373 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4DF0A99C1C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4DF0A99D1C39847100731373 /* Debug */,\n\t\t\t\t4DF0A99E1C39847100731373 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4DF0A99F1C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExampleTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4DF0A9A01C39847100731373 /* Debug */,\n\t\t\t\t4DF0A9A11C39847100731373 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4DF0A9A21C39847100731373 /* Build configuration list for PBXNativeTarget \"StoryboardExampleUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4DF0A9A31C39847100731373 /* Debug */,\n\t\t\t\t4DF0A9A41C39847100731373 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 4DF0A96C1C39847100731373 /* Project object */;\n}\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:StoryboardExample.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExample.xcodeproj/xcshareddata/xcschemes/StoryboardExample.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0720\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4DF0A9731C39847100731373\"\n               BuildableName = \"StoryboardExample.app\"\n               BlueprintName = \"StoryboardExample\"\n               ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4DF0A9871C39847100731373\"\n               BuildableName = \"StoryboardExampleTests.xctest\"\n               BlueprintName = \"StoryboardExampleTests\"\n               ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4DF0A9921C39847100731373\"\n               BuildableName = \"StoryboardExampleUITests.xctest\"\n               BlueprintName = \"StoryboardExampleUITests\"\n               ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4DF0A9731C39847100731373\"\n            BuildableName = \"StoryboardExample.app\"\n            BlueprintName = \"StoryboardExample\"\n            ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4DF0A9731C39847100731373\"\n            BuildableName = \"StoryboardExample.app\"\n            BlueprintName = \"StoryboardExample\"\n            ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4DF0A9731C39847100731373\"\n            BuildableName = \"StoryboardExample.app\"\n            BlueprintName = \"StoryboardExample\"\n            ReferencedContainer = \"container:StoryboardExample.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExampleTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExampleTests/StoryboardExampleTests.swift",
    "content": "//\n//  StoryboardExampleTests.swift\n//  StoryboardExampleTests\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport XCTest\n@testable import StoryboardExample\n\nclass StoryboardExampleTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measureBlock {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "StoryboardExample/StoryboardExampleUITests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "StoryboardExample/StoryboardExampleUITests/StoryboardExampleUITests.swift",
    "content": "//\n//  StoryboardExampleUITests.swift\n//  StoryboardExampleUITests\n//\n//  Created by Mark on 16/1/4.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport XCTest\n\nclass StoryboardExampleUITests: XCTestCase {\n        \n    override func setUp() {\n        super.setUp()\n        \n        // Put setup code here. This method is called before the invocation of each test method in the class.\n        \n        // In UI tests it is usually best to stop immediately when a failure occurs.\n        continueAfterFailure = false\n        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n        XCUIApplication().launch()\n\n        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // Use recording to get started writing UI tests.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n}\n"
  },
  {
    "path": "WMPageController-Swift/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Example\n//\n//  Created by Mark on 15/12/1.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        let pageController = customedPageController()\n        window?.rootViewController = UINavigationController(rootViewController: pageController)\n//        reloadPageController(pageController, afterDelay: 5.0)\n//        updatePageController(pageController, title: \"hahahahaha\", afterDelay: 5.0)\n        return true\n    }\n\n    func applicationWillResignActive(_ application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n    \n    // MARK: - An example of `PageController`\n    fileprivate func customedPageController() -> PageController {\n        let vcClasses: [UIViewController.Type] = [ViewController.self, TableViewController.self]\n        let titles = [\"Hello\", \"World\"]\n        let pageController = PageController(vcClasses: vcClasses, theirTitles: titles)\n        pageController.pageAnimatable = true\n        pageController.menuViewStyle = MenuViewStyle.line\n        pageController.bounces = true\n        pageController.menuHeight = 44\n        pageController.titleSizeSelected = 15\n        pageController.values = [\"Hello\", \"I'm Mark\"] // pass values\n        pageController.keys = [\"type\", \"text\"] // keys\n        pageController.title = \"Test\"\n        pageController.menuBGColor = .clear\n        pageController.showOnNavigationBar = true\n        //        pageController.selectedIndex = 1\n        //        pageController.progressColor = .blackColor()\n        //        pageController.viewFrame = CGRect(x: 50, y: 100, width: 320, height: 500)\n        //        pageController.itemsWidths = [100, 50]\n        //        pageController.itemsMargins = [100, 10, 100]\n        //        pageController.titleSizeNormal = 12\n        //        pageController.titleSizeSelected = 14\n        //        pageController.titleColorNormal = UIColor.brownColor()\n        //        pageController.titleColorSelected = UIColor.blackColor()\n        return pageController\n    }\n\n    fileprivate func reloadPageController(_ pageController: PageController, afterDelay delay: TimeInterval) {\n        let delayTime = DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)\n        DispatchQueue.main.asyncAfter(deadline: delayTime) {\n            pageController.titles = [\"Hello\", \"World\", \"Reload\"]\n            pageController.viewControllerClasses = [ViewController.self, TableViewController.self, ViewController.self]\n            pageController.values = [\"Hello\", \"I'm Mark\", \"Reload\"]\n            pageController.keys = [\"type\", \"text\", \"type\"]\n            pageController.reloadData()\n        }\n    }\n    \n    fileprivate func updatePageController(_ pageController: PageController, title: String, afterDelay delay: TimeInterval) {\n        let delayTime = DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)\n        DispatchQueue.main.asyncAfter(deadline: delayTime) {\n            pageController.updateTitle(title, atIndex: 1, andWidth: 150)\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "WMPageController-Swift/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WMPageController-Swift/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"8150\" systemVersion=\"15A204g\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8122\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <animations/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WMPageController-Swift/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"6211\" systemVersion=\"14A298i\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6204\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WMPageController-Swift/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "WMPageController-Swift/TableViewController.swift",
    "content": "//\n//  TableViewController.swift\n//  PageController\n//\n//  Created by Mark on 15/10/31.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass TableViewController: UITableViewController {\n\n    var text = \"\"\n    fileprivate let cellReuseIdentifier = \"cellReuseIdentifier\"\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)\n        tableView.rowHeight = 60\n    }\n\n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n    // MARK: - Table view data source\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        return 1\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return 20\n    }\n \n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath)\n        cell.selectionStyle = UITableViewCellSelectionStyle.none\n        cell.imageView?.image = UIImage(named: \"github\")\n        cell.textLabel?.text = text\n\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n//        let vc = ViewController()\n        let vc = customedPageController()\n        vc.title = \"Push\"\n//        vc.type = \"Bye bye\"\n        navigationController?.pushViewController(vc, animated: true)\n    }\n    \n    // MARK: - An example of `PageController`\n    fileprivate func customedPageController() -> PageController {\n        let vcClasses: [UIViewController.Type] = [ViewController.self, TableViewController.self]\n        let titles = [\"Hello\", \"World\"]\n        let pageController = PageController(vcClasses: vcClasses, theirTitles: titles)\n        pageController.pageAnimatable = true\n        pageController.menuViewStyle = MenuViewStyle.line\n        pageController.bounces = true\n        pageController.menuHeight = 44\n        pageController.titleSizeSelected = 15\n        pageController.values = [\"Hello\", \"I'm Mark\"] // pass values\n        pageController.keys = [\"type\", \"text\"] // keys\n        pageController.title = \"Test\"\n        pageController.menuBGColor = .clear\n        //        pageController.selectedIndex = 1\n        //        pageController.progressColor = .blackColor()\n        //        pageController.viewFrame = CGRect(x: 50, y: 100, width: 320, height: 500)\n        //        pageController.itemsWidths = [100, 50]\n        //        pageController.itemsMargins = [50, 10, 100]\n        //        pageController.titleSizeNormal = 12\n        //        pageController.titleSizeSelected = 14\n        //        pageController.titleColorNormal = UIColor.brownColor()\n        //        pageController.titleColorSelected = UIColor.blackColor()\n        return pageController\n    }\n   \n    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        if (indexPath as NSIndexPath).row % 2 == 0 {\n            return true\n        }\n        return false\n    }\n    \n    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        \n    }\n    \n}\n"
  },
  {
    "path": "WMPageController-Swift/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  PageController\n//\n//  Created by Mark on 15/10/20.\n//  Copyright © 2015年 Wecan Studio. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController, UITableViewDelegate {\n\n    var type = \"\"\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        view.backgroundColor = .white\n        createLabel()\n    }\n    \n    fileprivate func createLabel() {\n        let label = UILabel(frame: CGRect(x: 0, y: 100, width: view.bounds.size.width, height: 100))\n        label.text = type\n        label.font = UIFont.systemFont(ofSize: 22)\n        label.textAlignment = .center\n        view.addSubview(label)\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n}\n\n"
  },
  {
    "path": "WMPageController-Swift.podspec",
    "content": "Pod::Spec.new do |s|\n   s.name         = \"WMPageController-Swift\"\n   s.version      = \"1.4.0\"\n   s.summary      = \"An easy solution to page controllers like NetEase News.(Swift Implementation)\"\n   s.homepage     = \"https://github.com/wangmchn/WMPageController-Swift\"\n   s.license      = 'MIT (LICENSE)'\n   s.author       = { \"wangmchn\" => \"wangmchn@163.com\" }\n   s.source       = { :git => \"https://github.com/wangmchn/WMPageController-Swift.git\", :tag => \"1.4.0\" }\n   s.platform     = :ios, '8.0'\n\n   s.source_files = 'PageController', 'PageController/**/*.{swift}'\n   s.exclude_files = 'Example'\n\n   s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'\n   s.requires_arc = true\n end"
  },
  {
    "path": "WMPageController-Swift.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t4D45BF191CC7A10B003F0151 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45BF181CC7A10B003F0151 /* AppDelegate.swift */; };\n\t\t4D45BF1B1CC7A10B003F0151 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45BF1A1CC7A10B003F0151 /* ViewController.swift */; };\n\t\t4D45BF1E1CC7A10B003F0151 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4D45BF1C1CC7A10B003F0151 /* Main.storyboard */; };\n\t\t4D45BF201CC7A10B003F0151 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4D45BF1F1CC7A10B003F0151 /* Assets.xcassets */; };\n\t\t4D45BF231CC7A10B003F0151 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4D45BF211CC7A10B003F0151 /* LaunchScreen.storyboard */; };\n\t\t4D45BF2E1CC7A10B003F0151 /* WMPageController_SwiftTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45BF2D1CC7A10B003F0151 /* WMPageController_SwiftTests.swift */; };\n\t\t4D45BF391CC7A10B003F0151 /* WMPageController_SwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45BF381CC7A10B003F0151 /* WMPageController_SwiftUITests.swift */; };\n\t\t4D45BF521CC7A1EB003F0151 /* TableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D45BF511CC7A1EB003F0151 /* TableViewController.swift */; };\n\t\t4D45BF661CC7BC12003F0151 /* WMPageControllerSwiftFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D45BF651CC7BC12003F0151 /* WMPageControllerSwiftFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t4D45BF6A1CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D45BF631CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework */; };\n\t\t4D45BF6B1CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4D45BF631CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t4DCCF8481CE855F200C31A07 /* FloodView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8431CE855F200C31A07 /* FloodView.swift */; };\n\t\t4DCCF8491CE855F200C31A07 /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8441CE855F200C31A07 /* MenuItem.swift */; };\n\t\t4DCCF84A1CE855F200C31A07 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8451CE855F200C31A07 /* MenuView.swift */; };\n\t\t4DCCF84B1CE855F200C31A07 /* PageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8461CE855F200C31A07 /* PageController.swift */; };\n\t\t4DCCF84C1CE855F200C31A07 /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8471CE855F200C31A07 /* ProgressView.swift */; };\n\t\tF73DD37B1F403F3500FAC00A /* FloodView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8431CE855F200C31A07 /* FloodView.swift */; };\n\t\tF73DD37C1F403F3500FAC00A /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8441CE855F200C31A07 /* MenuItem.swift */; };\n\t\tF73DD37D1F403F3500FAC00A /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8451CE855F200C31A07 /* MenuView.swift */; };\n\t\tF73DD37E1F403F3500FAC00A /* PageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8461CE855F200C31A07 /* PageController.swift */; };\n\t\tF73DD37F1F403F3500FAC00A /* ProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DCCF8471CE855F200C31A07 /* ProgressView.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t4D45BF2A1CC7A10B003F0151 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4D45BF0D1CC7A10B003F0151 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4D45BF141CC7A10B003F0151;\n\t\t\tremoteInfo = \"WMPageController-Swift\";\n\t\t};\n\t\t4D45BF351CC7A10B003F0151 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4D45BF0D1CC7A10B003F0151 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4D45BF141CC7A10B003F0151;\n\t\t\tremoteInfo = \"WMPageController-Swift\";\n\t\t};\n\t\t4D45BF681CC7BC12003F0151 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 4D45BF0D1CC7A10B003F0151 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 4D45BF621CC7BC12003F0151;\n\t\t\tremoteInfo = WMPageControllerSwiftFramework;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t4D45BF6F1CC7BC12003F0151 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t4D45BF6B1CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t4D45BF151CC7A10B003F0151 /* WMPageController-Swift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"WMPageController-Swift.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4D45BF181CC7A10B003F0151 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t4D45BF1A1CC7A10B003F0151 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t4D45BF1D1CC7A10B003F0151 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t4D45BF1F1CC7A10B003F0151 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t4D45BF221CC7A10B003F0151 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t4D45BF241CC7A10B003F0151 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4D45BF291CC7A10B003F0151 /* WMPageController-SwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"WMPageController-SwiftTests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4D45BF2D1CC7A10B003F0151 /* WMPageController_SwiftTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WMPageController_SwiftTests.swift; sourceTree = \"<group>\"; };\n\t\t4D45BF2F1CC7A10B003F0151 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4D45BF341CC7A10B003F0151 /* WMPageController-SwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"WMPageController-SwiftUITests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4D45BF381CC7A10B003F0151 /* WMPageController_SwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WMPageController_SwiftUITests.swift; sourceTree = \"<group>\"; };\n\t\t4D45BF3A1CC7A10B003F0151 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4D45BF511CC7A1EB003F0151 /* TableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewController.swift; sourceTree = \"<group>\"; };\n\t\t4D45BF631CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WMPageControllerSwiftFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4D45BF651CC7BC12003F0151 /* WMPageControllerSwiftFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WMPageControllerSwiftFramework.h; sourceTree = \"<group>\"; };\n\t\t4D45BF671CC7BC12003F0151 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t4DCCF8431CE855F200C31A07 /* FloodView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FloodView.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF8441CE855F200C31A07 /* MenuItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF8451CE855F200C31A07 /* MenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF8461CE855F200C31A07 /* PageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageController.swift; sourceTree = \"<group>\"; };\n\t\t4DCCF8471CE855F200C31A07 /* ProgressView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProgressView.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t4D45BF121CC7A10B003F0151 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF6A1CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF261CC7A10B003F0151 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF311CC7A10B003F0151 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF5F1CC7BC12003F0151 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t4D45BF0C1CC7A10B003F0151 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF171CC7A10B003F0151 /* WMPageController-Swift */,\n\t\t\t\t4D45BF2C1CC7A10B003F0151 /* WMPageController-SwiftTests */,\n\t\t\t\t4D45BF371CC7A10B003F0151 /* WMPageController-SwiftUITests */,\n\t\t\t\t4D45BF641CC7BC12003F0151 /* WMPageControllerSwiftFramework */,\n\t\t\t\t4D45BF161CC7A10B003F0151 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF161CC7A10B003F0151 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF151CC7A10B003F0151 /* WMPageController-Swift.app */,\n\t\t\t\t4D45BF291CC7A10B003F0151 /* WMPageController-SwiftTests.xctest */,\n\t\t\t\t4D45BF341CC7A10B003F0151 /* WMPageController-SwiftUITests.xctest */,\n\t\t\t\t4D45BF631CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF171CC7A10B003F0151 /* WMPageController-Swift */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DCCF8421CE855F200C31A07 /* PageController */,\n\t\t\t\t4D45BF181CC7A10B003F0151 /* AppDelegate.swift */,\n\t\t\t\t4D45BF1A1CC7A10B003F0151 /* ViewController.swift */,\n\t\t\t\t4D45BF511CC7A1EB003F0151 /* TableViewController.swift */,\n\t\t\t\t4D45BF1C1CC7A10B003F0151 /* Main.storyboard */,\n\t\t\t\t4D45BF1F1CC7A10B003F0151 /* Assets.xcassets */,\n\t\t\t\t4D45BF211CC7A10B003F0151 /* LaunchScreen.storyboard */,\n\t\t\t\t4D45BF241CC7A10B003F0151 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"WMPageController-Swift\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF2C1CC7A10B003F0151 /* WMPageController-SwiftTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF2D1CC7A10B003F0151 /* WMPageController_SwiftTests.swift */,\n\t\t\t\t4D45BF2F1CC7A10B003F0151 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"WMPageController-SwiftTests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF371CC7A10B003F0151 /* WMPageController-SwiftUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF381CC7A10B003F0151 /* WMPageController_SwiftUITests.swift */,\n\t\t\t\t4D45BF3A1CC7A10B003F0151 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"WMPageController-SwiftUITests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF641CC7BC12003F0151 /* WMPageControllerSwiftFramework */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF651CC7BC12003F0151 /* WMPageControllerSwiftFramework.h */,\n\t\t\t\t4D45BF671CC7BC12003F0151 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = WMPageControllerSwiftFramework;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4DCCF8421CE855F200C31A07 /* PageController */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4DCCF8431CE855F200C31A07 /* FloodView.swift */,\n\t\t\t\t4DCCF8441CE855F200C31A07 /* MenuItem.swift */,\n\t\t\t\t4DCCF8451CE855F200C31A07 /* MenuView.swift */,\n\t\t\t\t4DCCF8461CE855F200C31A07 /* PageController.swift */,\n\t\t\t\t4DCCF8471CE855F200C31A07 /* ProgressView.swift */,\n\t\t\t);\n\t\t\tpath = PageController;\n\t\t\tsourceTree = SOURCE_ROOT;\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t4D45BF601CC7BC12003F0151 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF661CC7BC12003F0151 /* WMPageControllerSwiftFramework.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t4D45BF141CC7A10B003F0151 /* WMPageController-Swift */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4D45BF3D1CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-Swift\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4D45BF111CC7A10B003F0151 /* Sources */,\n\t\t\t\t4D45BF121CC7A10B003F0151 /* Frameworks */,\n\t\t\t\t4D45BF131CC7A10B003F0151 /* Resources */,\n\t\t\t\t4D45BF6F1CC7BC12003F0151 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4D45BF691CC7BC12003F0151 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"WMPageController-Swift\";\n\t\t\tproductName = \"WMPageController-Swift\";\n\t\t\tproductReference = 4D45BF151CC7A10B003F0151 /* WMPageController-Swift.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t4D45BF281CC7A10B003F0151 /* WMPageController-SwiftTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4D45BF401CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-SwiftTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4D45BF251CC7A10B003F0151 /* Sources */,\n\t\t\t\t4D45BF261CC7A10B003F0151 /* Frameworks */,\n\t\t\t\t4D45BF271CC7A10B003F0151 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4D45BF2B1CC7A10B003F0151 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"WMPageController-SwiftTests\";\n\t\t\tproductName = \"WMPageController-SwiftTests\";\n\t\t\tproductReference = 4D45BF291CC7A10B003F0151 /* WMPageController-SwiftTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t4D45BF331CC7A10B003F0151 /* WMPageController-SwiftUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4D45BF431CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-SwiftUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4D45BF301CC7A10B003F0151 /* Sources */,\n\t\t\t\t4D45BF311CC7A10B003F0151 /* Frameworks */,\n\t\t\t\t4D45BF321CC7A10B003F0151 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t4D45BF361CC7A10B003F0151 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"WMPageController-SwiftUITests\";\n\t\t\tproductName = \"WMPageController-SwiftUITests\";\n\t\t\tproductReference = 4D45BF341CC7A10B003F0151 /* WMPageController-SwiftUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\t4D45BF621CC7BC12003F0151 /* WMPageControllerSwiftFramework */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4D45BF6E1CC7BC12003F0151 /* Build configuration list for PBXNativeTarget \"WMPageControllerSwiftFramework\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4D45BF5E1CC7BC12003F0151 /* Sources */,\n\t\t\t\t4D45BF5F1CC7BC12003F0151 /* Frameworks */,\n\t\t\t\t4D45BF601CC7BC12003F0151 /* Headers */,\n\t\t\t\t4D45BF611CC7BC12003F0151 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WMPageControllerSwiftFramework;\n\t\t\tproductName = WMPageControllerSwiftFramework;\n\t\t\tproductReference = 4D45BF631CC7BC12003F0151 /* WMPageControllerSwiftFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t4D45BF0D1CC7A10B003F0151 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0730;\n\t\t\t\tLastUpgradeCheck = 0830;\n\t\t\t\tORGANIZATIONNAME = \"Wecan Studio\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t4D45BF141CC7A10B003F0151 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tLastSwiftMigration = 0800;\n\t\t\t\t\t};\n\t\t\t\t\t4D45BF281CC7A10B003F0151 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tLastSwiftMigration = 0800;\n\t\t\t\t\t\tTestTargetID = 4D45BF141CC7A10B003F0151;\n\t\t\t\t\t};\n\t\t\t\t\t4D45BF331CC7A10B003F0151 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tLastSwiftMigration = 0800;\n\t\t\t\t\t\tTestTargetID = 4D45BF141CC7A10B003F0151;\n\t\t\t\t\t};\n\t\t\t\t\t4D45BF621CC7BC12003F0151 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 4D45BF101CC7A10B003F0151 /* Build configuration list for PBXProject \"WMPageController-Swift\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 4D45BF0C1CC7A10B003F0151;\n\t\t\tproductRefGroup = 4D45BF161CC7A10B003F0151 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t4D45BF141CC7A10B003F0151 /* WMPageController-Swift */,\n\t\t\t\t4D45BF281CC7A10B003F0151 /* WMPageController-SwiftTests */,\n\t\t\t\t4D45BF331CC7A10B003F0151 /* WMPageController-SwiftUITests */,\n\t\t\t\t4D45BF621CC7BC12003F0151 /* WMPageControllerSwiftFramework */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t4D45BF131CC7A10B003F0151 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF231CC7A10B003F0151 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t4D45BF201CC7A10B003F0151 /* Assets.xcassets in Resources */,\n\t\t\t\t4D45BF1E1CC7A10B003F0151 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF271CC7A10B003F0151 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF321CC7A10B003F0151 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF611CC7BC12003F0151 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t4D45BF111CC7A10B003F0151 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF1B1CC7A10B003F0151 /* ViewController.swift in Sources */,\n\t\t\t\t4DCCF84A1CE855F200C31A07 /* MenuView.swift in Sources */,\n\t\t\t\t4DCCF8481CE855F200C31A07 /* FloodView.swift in Sources */,\n\t\t\t\t4DCCF84B1CE855F200C31A07 /* PageController.swift in Sources */,\n\t\t\t\t4D45BF521CC7A1EB003F0151 /* TableViewController.swift in Sources */,\n\t\t\t\t4DCCF84C1CE855F200C31A07 /* ProgressView.swift in Sources */,\n\t\t\t\t4D45BF191CC7A10B003F0151 /* AppDelegate.swift in Sources */,\n\t\t\t\t4DCCF8491CE855F200C31A07 /* MenuItem.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF251CC7A10B003F0151 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF2E1CC7A10B003F0151 /* WMPageController_SwiftTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF301CC7A10B003F0151 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4D45BF391CC7A10B003F0151 /* WMPageController_SwiftUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4D45BF5E1CC7BC12003F0151 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF73DD37B1F403F3500FAC00A /* FloodView.swift in Sources */,\n\t\t\t\tF73DD37C1F403F3500FAC00A /* MenuItem.swift in Sources */,\n\t\t\t\tF73DD37D1F403F3500FAC00A /* MenuView.swift in Sources */,\n\t\t\t\tF73DD37E1F403F3500FAC00A /* PageController.swift in Sources */,\n\t\t\t\tF73DD37F1F403F3500FAC00A /* ProgressView.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t4D45BF2B1CC7A10B003F0151 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4D45BF141CC7A10B003F0151 /* WMPageController-Swift */;\n\t\t\ttargetProxy = 4D45BF2A1CC7A10B003F0151 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4D45BF361CC7A10B003F0151 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4D45BF141CC7A10B003F0151 /* WMPageController-Swift */;\n\t\t\ttargetProxy = 4D45BF351CC7A10B003F0151 /* PBXContainerItemProxy */;\n\t\t};\n\t\t4D45BF691CC7BC12003F0151 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 4D45BF621CC7BC12003F0151 /* WMPageControllerSwiftFramework */;\n\t\t\ttargetProxy = 4D45BF681CC7BC12003F0151 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t4D45BF1C1CC7A10B003F0151 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF1D1CC7A10B003F0151 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4D45BF211CC7A10B003F0151 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4D45BF221CC7A10B003F0151 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t4D45BF3B1CC7A10B003F0151 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4D45BF3C1CC7A10B003F0151 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4D45BF3E1CC7A10B003F0151 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-Swift/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-Swift\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4D45BF3F1CC7A10B003F0151 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-Swift/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-Swift\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4D45BF411CC7A10B003F0151 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-SwiftTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-SwiftTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WMPageController-Swift.app/WMPageController-Swift\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4D45BF421CC7A10B003F0151 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-SwiftTests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-SwiftTests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WMPageController-Swift.app/WMPageController-Swift\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4D45BF441CC7A10B003F0151 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-SwiftUITests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-SwiftUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_TARGET_NAME = \"WMPageController-Swift\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4D45BF451CC7A10B003F0151 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = \"WMPageController-SwiftUITests/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wecan.WMPageController-SwiftUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTEST_TARGET_NAME = \"WMPageController-Swift\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4D45BF6C1CC7BC12003F0151 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = WMPageControllerSwiftFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.WMPageControllerSwiftFramework;\n\t\t\t\tPRODUCT_MODULE_NAME = WMPageControllerSwiftFramework;\n\t\t\t\tPRODUCT_NAME = WMPageControllerSwiftFramework;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4D45BF6D1CC7BC12003F0151 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = WMPageControllerSwiftFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wecan.WMPageControllerSwiftFramework;\n\t\t\t\tPRODUCT_MODULE_NAME = WMPageControllerSwiftFramework;\n\t\t\t\tPRODUCT_NAME = WMPageControllerSwiftFramework;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t4D45BF101CC7A10B003F0151 /* Build configuration list for PBXProject \"WMPageController-Swift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D45BF3B1CC7A10B003F0151 /* Debug */,\n\t\t\t\t4D45BF3C1CC7A10B003F0151 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4D45BF3D1CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-Swift\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D45BF3E1CC7A10B003F0151 /* Debug */,\n\t\t\t\t4D45BF3F1CC7A10B003F0151 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4D45BF401CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-SwiftTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D45BF411CC7A10B003F0151 /* Debug */,\n\t\t\t\t4D45BF421CC7A10B003F0151 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4D45BF431CC7A10B003F0151 /* Build configuration list for PBXNativeTarget \"WMPageController-SwiftUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D45BF441CC7A10B003F0151 /* Debug */,\n\t\t\t\t4D45BF451CC7A10B003F0151 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4D45BF6E1CC7BC12003F0151 /* Build configuration list for PBXNativeTarget \"WMPageControllerSwiftFramework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4D45BF6C1CC7BC12003F0151 /* Debug */,\n\t\t\t\t4D45BF6D1CC7BC12003F0151 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 4D45BF0D1CC7A10B003F0151 /* Project object */;\n}\n"
  },
  {
    "path": "WMPageController-Swift.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WMPageController-Swift.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WMPageController-Swift.xcodeproj/xcshareddata/xcschemes/WMPageController-Swift.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0830\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4D45BF141CC7A10B003F0151\"\n               BuildableName = \"WMPageController-Swift.app\"\n               BlueprintName = \"WMPageController-Swift\"\n               ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4D45BF281CC7A10B003F0151\"\n               BuildableName = \"WMPageController-SwiftTests.xctest\"\n               BlueprintName = \"WMPageController-SwiftTests\"\n               ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4D45BF331CC7A10B003F0151\"\n               BuildableName = \"WMPageController-SwiftUITests.xctest\"\n               BlueprintName = \"WMPageController-SwiftUITests\"\n               ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4D45BF141CC7A10B003F0151\"\n            BuildableName = \"WMPageController-Swift.app\"\n            BlueprintName = \"WMPageController-Swift\"\n            ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4D45BF141CC7A10B003F0151\"\n            BuildableName = \"WMPageController-Swift.app\"\n            BlueprintName = \"WMPageController-Swift\"\n            ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4D45BF141CC7A10B003F0151\"\n            BuildableName = \"WMPageController-Swift.app\"\n            BlueprintName = \"WMPageController-Swift\"\n            ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "WMPageController-Swift.xcodeproj/xcshareddata/xcschemes/WMPageControllerSwiftFramework.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0830\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"4D45BF621CC7BC12003F0151\"\n               BuildableName = \"WMPageControllerSwiftFramework.framework\"\n               BlueprintName = \"WMPageControllerSwiftFramework\"\n               ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4D45BF621CC7BC12003F0151\"\n            BuildableName = \"WMPageControllerSwiftFramework.framework\"\n            BlueprintName = \"WMPageControllerSwiftFramework\"\n            ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"4D45BF621CC7BC12003F0151\"\n            BuildableName = \"WMPageControllerSwiftFramework.framework\"\n            BlueprintName = \"WMPageControllerSwiftFramework\"\n            ReferencedContainer = \"container:WMPageController-Swift.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "WMPageController-SwiftTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WMPageController-SwiftTests/WMPageController_SwiftTests.swift",
    "content": "//\n//  WMPageController_SwiftTests.swift\n//  WMPageController-SwiftTests\n//\n//  Created by Mark on 16/4/20.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport XCTest\n@testable import WMPageController_Swift\n\nclass WMPageController_SwiftTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measure {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "WMPageController-SwiftUITests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WMPageController-SwiftUITests/WMPageController_SwiftUITests.swift",
    "content": "//\n//  WMPageController_SwiftUITests.swift\n//  WMPageController-SwiftUITests\n//\n//  Created by Mark on 16/4/20.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\nimport XCTest\n\nclass WMPageController_SwiftUITests: XCTestCase {\n        \n    override func setUp() {\n        super.setUp()\n        \n        // Put setup code here. This method is called before the invocation of each test method in the class.\n        \n        // In UI tests it is usually best to stop immediately when a failure occurs.\n        continueAfterFailure = false\n        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.\n        XCUIApplication().launch()\n\n        // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // Use recording to get started writing UI tests.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n}\n"
  },
  {
    "path": "WMPageControllerSwiftFramework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.5.1</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WMPageControllerSwiftFramework/WMPageControllerSwiftFramework.h",
    "content": "//\n//  WMPageControllerSwiftFramework.h\n//  WMPageControllerSwiftFramework\n//\n//  Created by Mark on 16/4/20.\n//  Copyright © 2016年 Wecan Studio. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for WMPageControllerSwiftFramework.\nFOUNDATION_EXPORT double WMPageControllerSwiftFrameworkVersionNumber;\n\n//! Project version string for WMPageControllerSwiftFramework.\nFOUNDATION_EXPORT const unsigned char WMPageControllerSwiftFrameworkVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <WMPageControllerSwiftFramework/PublicHeader.h>\n\n\n"
  }
]