[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n\n## Other\n*.moved-aside\n*.xccheckout\n*.xcscmblueprint\n*.xcuserstate\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n## Playgrounds\ntimeline.xctimeline\nplayground.xcworkspace\n\n# Swift Package Manager\n#\n# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.\n# Packages/\n# Package.pins\n.build/\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# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-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\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/#source-control\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\n\nIndex/*"
  },
  {
    "path": ".swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 06/01/2017.\n//  Copyright © 2017 Wenchao Ding. 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: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\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 invalidate graphics rendering callbacks. 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 active 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": "FSPageViewExample-Swift/FSPagerViewExample/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=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\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=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\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": "FSPageViewExample-Swift/FSPagerViewExample/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13196\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"65m-zG-Zjb\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13173\"/>\n        <capability name=\"Aspect ratio constraints\" minToolsVersion=\"5.1\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"1gZ-cN-8UU\">\n            <objects>\n                <navigationController id=\"65m-zG-Zjb\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"sdq-d2-T0f\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"QFv-CW-07W\" kind=\"relationship\" relationship=\"rootViewController\" id=\"LEb-Q1-2GK\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"XrD-t8-fKf\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1302\" y=\"58\"/>\n        </scene>\n        <!--FSPagerView-->\n        <scene sceneID=\"BUU-qk-sys\">\n            <objects>\n                <tableViewController id=\"QFv-CW-07W\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"5YA-MX-aYX\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <sections>\n                            <tableViewSection id=\"dcb-AR-Y6o\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"xbh-ag-gwU\" style=\"IBUITableViewCellStyleDefault\" id=\"c8R-jz-NC9\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"c8R-jz-NC9\" id=\"Xt2-E6-SSP\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Banner Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"xbh-ag-gwU\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"8S4-ui-raa\" kind=\"show\" id=\"CA7-wi-OYv\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"tbD-GK-bJ9\" style=\"IBUITableViewCellStyleDefault\" id=\"FxB-ZA-C8d\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"FxB-ZA-C8d\" id=\"3kH-YG-RlN\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Transformer Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"tbD-GK-bJ9\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"UOf-Wx-Dm5\" kind=\"show\" id=\"u1f-IZ-XjV\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"kw1-Wq-GDF\" style=\"IBUITableViewCellStyleDefault\" id=\"Z9U-TY-wA5\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"88\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Z9U-TY-wA5\" id=\"ebB-1o-WJk\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"PageControl Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kw1-Wq-GDF\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"lma-uy-r7Q\" kind=\"show\" id=\"Ywb-QZ-BEV\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"QFv-CW-07W\" id=\"BKi-in-Tr5\"/>\n                            <outlet property=\"delegate\" destination=\"QFv-CW-07W\" id=\"z5U-b1-65X\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"Lpl-eu-Fmc\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"odI-aG-hCn\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-540\" y=\"57\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"Dj3-5U-Hsj\">\n            <objects>\n                <viewController id=\"8S4-ui-raa\" customClass=\"BasicExampleViewController\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"ZIn-7Z-O0c\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"FEf-c6-LBu\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"JGI-7R-hPw\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"CTG-eH-B7s\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"rZx-r3-VSz\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"alwaysBounceHorizontal\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"removesInfiniteLoopForSingleItem\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"isInfinite\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"8S4-ui-raa\" id=\"55w-g7-XAv\"/>\n                                    <outlet property=\"delegate\" destination=\"8S4-ui-raa\" id=\"ZXc-ha-CLU\"/>\n                                </connections>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"mWZ-ul-B44\" customClass=\"FSPageControl\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"232\" width=\"375\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"25\" id=\"wm0-Qk-cZE\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"hidesForSinglePage\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" delaysContentTouches=\"NO\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"yIp-0M-Jf9\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"257\" width=\"375\" height=\"410\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"pAf-pQ-W1L\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"tk3-eI-HIS\" style=\"IBUITableViewCellStyleDefault\" id=\"VNC-TS-zto\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"VNC-TS-zto\" id=\"zR3-db-xZl\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"tk3-eI-HIS\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"slider_cell\" id=\"Mhy-Af-ukz\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Mhy-Af-ukz\" id=\"a5X-4s-PcO\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <slider opaque=\"NO\" tag=\"100\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.0\" maxValue=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"O0o-pU-RV0\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"6\" width=\"334\" height=\"31\"/>\n                                                    <connections>\n                                                        <action selector=\"sliderValueChanged:\" destination=\"8S4-ui-raa\" eventType=\"valueChanged\" id=\"Aoi-Bd-jLc\"/>\n                                                    </connections>\n                                                </slider>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"O0o-pU-RV0\" firstAttribute=\"leading\" secondItem=\"a5X-4s-PcO\" secondAttribute=\"leadingMargin\" constant=\"14\" id=\"DVA-cV-yUQ\"/>\n                                                <constraint firstItem=\"O0o-pU-RV0\" firstAttribute=\"centerY\" secondItem=\"a5X-4s-PcO\" secondAttribute=\"centerY\" id=\"JWD-EM-rrQ\"/>\n                                                <constraint firstItem=\"O0o-pU-RV0\" firstAttribute=\"centerX\" secondItem=\"a5X-4s-PcO\" secondAttribute=\"centerX\" id=\"lxA-Dh-fpZ\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"8S4-ui-raa\" id=\"g7q-Ol-O1u\"/>\n                                    <outlet property=\"delegate\" destination=\"8S4-ui-raa\" id=\"nQ4-SL-rUR\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"mWZ-ul-B44\" secondAttribute=\"trailing\" id=\"1CQ-or-Rzw\"/>\n                            <constraint firstItem=\"mWZ-ul-B44\" firstAttribute=\"bottom\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"bottom\" id=\"7eO-T3-IeH\"/>\n                            <constraint firstItem=\"yIp-0M-Jf9\" firstAttribute=\"trailing\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"trailing\" id=\"DlN-Cq-Dge\"/>\n                            <constraint firstItem=\"mWZ-ul-B44\" firstAttribute=\"leading\" secondItem=\"JGI-7R-hPw\" secondAttribute=\"leading\" id=\"LiP-jF-2wi\"/>\n                            <constraint firstItem=\"CTG-eH-B7s\" firstAttribute=\"leading\" secondItem=\"JGI-7R-hPw\" secondAttribute=\"leading\" id=\"NcO-li-Ntq\"/>\n                            <constraint firstItem=\"yIp-0M-Jf9\" firstAttribute=\"top\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"bottom\" id=\"RZU-tW-lUH\"/>\n                            <constraint firstItem=\"FEf-c6-LBu\" firstAttribute=\"top\" secondItem=\"yIp-0M-Jf9\" secondAttribute=\"bottom\" id=\"WdD-ac-p9r\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"trailing\" id=\"bf6-lY-6M7\"/>\n                            <constraint firstItem=\"CTG-eH-B7s\" firstAttribute=\"top\" secondItem=\"ZIn-7Z-O0c\" secondAttribute=\"bottom\" id=\"egB-9j-VUH\"/>\n                            <constraint firstItem=\"yIp-0M-Jf9\" firstAttribute=\"leading\" secondItem=\"CTG-eH-B7s\" secondAttribute=\"leading\" id=\"gAk-gv-dNu\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"mmk-5e-Dbw\"/>\n                    <connections>\n                        <outlet property=\"pageControl\" destination=\"mWZ-ul-B44\" id=\"Rgw-YS-NtE\"/>\n                        <outlet property=\"pagerView\" destination=\"CTG-eH-B7s\" id=\"wL1-ea-IwW\"/>\n                        <outlet property=\"tableView\" destination=\"yIp-0M-Jf9\" id=\"yBP-Gq-WRT\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"GVQ-ty-CGK\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"269.60000000000002\" y=\"-634.632683658171\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"YvR-xA-dZd\">\n            <objects>\n                <viewController id=\"UOf-Wx-Dm5\" customClass=\"TransformerExampleViewController\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"YqO-fo-CV0\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"SYq-Ou-9Hm\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"gyH-Fj-vjS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tSq-4e-Jil\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"84\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"8cc-kO-s6Y\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"isInfinite\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"UOf-Wx-Dm5\" id=\"Xcy-kf-B7Y\"/>\n                                    <outlet property=\"delegate\" destination=\"UOf-Wx-Dm5\" id=\"cQD-fS-FFJ\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TEB-Em-38e\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"277\" width=\"375\" height=\"400\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"NRZ-QP-i1t\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"zyL-iX-55x\" style=\"IBUITableViewCellStyleDefault\" id=\"5d8-B4-K8u\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5d8-B4-K8u\" id=\"uyz-07-btn\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"zyL-iX-55x\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"UOf-Wx-Dm5\" id=\"qPE-fr-jiM\"/>\n                                    <outlet property=\"delegate\" destination=\"UOf-Wx-Dm5\" id=\"8QI-As-UQ9\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"tSq-4e-Jil\" firstAttribute=\"leading\" secondItem=\"gyH-Fj-vjS\" secondAttribute=\"leading\" id=\"4JR-wM-Hj6\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"TEB-Em-38e\" secondAttribute=\"trailing\" id=\"9aI-K5-eVK\"/>\n                            <constraint firstItem=\"TEB-Em-38e\" firstAttribute=\"leading\" secondItem=\"gyH-Fj-vjS\" secondAttribute=\"leading\" id=\"Nzy-x1-I37\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"trailing\" id=\"RgI-TS-XNy\"/>\n                            <constraint firstItem=\"SYq-Ou-9Hm\" firstAttribute=\"top\" secondItem=\"TEB-Em-38e\" secondAttribute=\"bottom\" priority=\"900\" id=\"SvE-DZ-QZZ\"/>\n                            <constraint firstItem=\"TEB-Em-38e\" firstAttribute=\"top\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"bottom\" id=\"Y6P-xg-PBD\"/>\n                            <constraint firstItem=\"tSq-4e-Jil\" firstAttribute=\"top\" secondItem=\"YqO-fo-CV0\" secondAttribute=\"bottom\" id=\"aLW-5l-Ysv\"/>\n                        </constraints>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"TLb-uP-T5p\"/>\n                    <connections>\n                        <outlet property=\"pagerView\" destination=\"tSq-4e-Jil\" id=\"gIC-GK-Dy2\"/>\n                        <outlet property=\"tableView\" destination=\"TEB-Em-38e\" id=\"IVC-J2-DaD\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"umh-fh-emi\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"270\" y=\"78\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"ubH-x9-Tsd\">\n            <objects>\n                <viewController id=\"lma-uy-r7Q\" customClass=\"PageControlExampleViewController\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"g8E-NI-6cy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"LRp-ZY-5aK\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"te4-kA-aq3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dn3-eb-Xp7\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"i9F-Jy-ACA\"/>\n                                </constraints>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"lma-uy-r7Q\" id=\"c52-NV-b2h\"/>\n                                    <outlet property=\"delegate\" destination=\"lma-uy-r7Q\" id=\"smq-bL-KUh\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1nD-dr-afd\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"257\" width=\"375\" height=\"410\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"DJv-Gh-cqi\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"BsM-5g-055\" style=\"IBUITableViewCellStyleDefault\" id=\"xKM-zP-mhA\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"xKM-zP-mhA\" id=\"e6f-eC-LPJ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"BsM-5g-055\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"slider_cell\" id=\"5vo-WJ-LAV\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5vo-WJ-LAV\" id=\"4El-3j-sQo\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <slider opaque=\"NO\" tag=\"100\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.0\" maxValue=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"po6-ni-APz\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"6\" width=\"334\" height=\"31\"/>\n                                                    <connections>\n                                                        <action selector=\"sliderValueChanged:\" destination=\"lma-uy-r7Q\" eventType=\"valueChanged\" id=\"gFi-4y-tQy\"/>\n                                                    </connections>\n                                                </slider>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"centerX\" secondItem=\"4El-3j-sQo\" secondAttribute=\"centerX\" id=\"foX-sD-T7e\"/>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"leading\" secondItem=\"4El-3j-sQo\" secondAttribute=\"leadingMargin\" constant=\"14\" id=\"mq9-Ba-kWP\"/>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"centerY\" secondItem=\"4El-3j-sQo\" secondAttribute=\"centerY\" id=\"vUz-88-Rc7\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"lma-uy-r7Q\" id=\"LkY-bg-T5I\"/>\n                                    <outlet property=\"delegate\" destination=\"lma-uy-r7Q\" id=\"2q3-xG-a4L\"/>\n                                </connections>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6XD-Hd-JIV\" customClass=\"FSPageControl\" customModule=\"FSPagerViewExample\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"227\" width=\"375\" height=\"30\"/>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.5\" colorSpace=\"calibratedWhite\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"T3E-mc-eGj\"/>\n                                </constraints>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"LRp-ZY-5aK\" firstAttribute=\"top\" secondItem=\"1nD-dr-afd\" secondAttribute=\"bottom\" id=\"CPh-jp-Uyb\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"1nD-dr-afd\" secondAttribute=\"trailing\" id=\"ClN-uY-lET\"/>\n                            <constraint firstItem=\"1nD-dr-afd\" firstAttribute=\"top\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"bottom\" id=\"G58-E2-cgd\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"trailing\" id=\"e9e-i7-ujY\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"6XD-Hd-JIV\" secondAttribute=\"trailing\" id=\"iKX-Nj-2S8\"/>\n                            <constraint firstItem=\"1nD-dr-afd\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"jWs-RY-JCp\"/>\n                            <constraint firstItem=\"Dn3-eb-Xp7\" firstAttribute=\"top\" secondItem=\"g8E-NI-6cy\" secondAttribute=\"bottom\" id=\"kns-bN-gzL\"/>\n                            <constraint firstItem=\"Dn3-eb-Xp7\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"mbX-uc-m8F\"/>\n                            <constraint firstItem=\"6XD-Hd-JIV\" firstAttribute=\"bottom\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"bottom\" id=\"p91-lV-jBL\"/>\n                            <constraint firstItem=\"6XD-Hd-JIV\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"qsg-zG-lYB\"/>\n                        </constraints>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"OcE-VL-TYq\"/>\n                    <connections>\n                        <outlet property=\"pageControl\" destination=\"6XD-Hd-JIV\" id=\"Obv-i1-0Gv\"/>\n                        <outlet property=\"pagerView\" destination=\"Dn3-eb-Xp7\" id=\"8jk-Ur-q3d\"/>\n                        <outlet property=\"tableView\" destination=\"1nD-dr-afd\" id=\"uO4-v0-qCU\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"pdp-h1-Udb\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"270\" y=\"818\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/BasicExampleViewController.swift",
    "content": "//\n//  ViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nclass BasicExampleViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate {\n    \n    fileprivate let sectionTitles = [\"Configurations\", \"Decelaration Distance\", \"Item Size\", \"Interitem Spacing\", \"Number Of Items\"]\n    fileprivate let configurationTitles = [\"Automatic sliding\",\"Infinite\"]\n    fileprivate let decelerationDistanceOptions = [\"Automatic\", \"1\", \"2\"]\n    fileprivate let imageNames = [\"1.jpg\",\"2.jpg\",\"3.jpg\",\"4.jpg\",\"5.jpg\",\"6.jpg\",\"7.jpg\"]\n    fileprivate var numberOfItems = 7\n    \n    @IBOutlet weak var tableView: UITableView!\n    @IBOutlet weak var pagerView: FSPagerView! {\n        didSet {\n            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\n            self.pagerView.itemSize = FSPagerView.automaticSize\n        }\n    }\n    \n    @IBOutlet weak var pageControl: FSPageControl! {\n        didSet {\n            self.pageControl.numberOfPages = self.imageNames.count\n            self.pageControl.contentHorizontalAlignment = .right\n            self.pageControl.contentInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)\n        }\n    }\n    \n    // MARK:- UITableViewDataSource\n    \n    func numberOfSections(in tableView: UITableView) -> Int {\n        return self.sectionTitles.count\n    }\n    \n    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        switch section {\n        case 0:\n            return self.configurationTitles.count\n        case 1:\n            return self.decelerationDistanceOptions.count\n        case 2,3,4:\n            return 1\n        default:\n            return 0\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        switch indexPath.section {\n        case 0:\n            // Configurations\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n            cell.textLabel?.text = self.configurationTitles[indexPath.row]\n            if indexPath.row == 0 {\n                // Automatic Sliding\n                cell.accessoryType = self.pagerView.automaticSlidingInterval > 0 ? .checkmark : .none\n            } else if indexPath.row == 1 {\n                // IsInfinite\n                cell.accessoryType = self.pagerView.isInfinite ? .checkmark : .none\n            }\n            return cell\n        case 1:\n            // Decelaration Distance\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n            cell.textLabel?.text = self.decelerationDistanceOptions[indexPath.row]\n            switch indexPath.row {\n            case 0:\n                cell.accessoryType = self.pagerView.decelerationDistance == FSPagerView.automaticDistance ? .checkmark : .none\n            case 1:\n                cell.accessoryType = self.pagerView.decelerationDistance == 1 ? .checkmark : .none\n            case 2:\n                cell.accessoryType = self.pagerView.decelerationDistance == 2 ? .checkmark : .none\n            default:\n                break;\n            }\n            return cell;\n        case 2:\n            // Item Spacing\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"slider_cell\")!\n            let slider = cell.contentView.subviews.first as! UISlider\n            slider.tag = 1\n            slider.value = {\n                let scale: CGFloat = self.pagerView.itemSize.width/self.pagerView.frame.width\n                let value: CGFloat = (0.5-scale)*2\n                return Float(value)\n            }()\n            slider.isContinuous = true\n            return cell\n        case 3:\n            // Interitem Spacing\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"slider_cell\")!\n            let slider = cell.contentView.subviews.first as! UISlider\n            slider.tag = 2\n            slider.value = Float(self.pagerView.interitemSpacing/20.0)\n            slider.isContinuous = true\n            return cell\n        case 4:\n            // Number Of Items\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"slider_cell\")!\n            let slider = cell.contentView.subviews.first as! UISlider\n            slider.tag = 3\n            slider.minimumValue = 1.0 / 7\n            slider.maximumValue = 1.0\n            slider.value = Float(self.numberOfItems) / 7.0\n            slider.isContinuous = false\n            return cell\n        default:\n            break\n        }\n        return tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n    }\n    \n    // MARK:- UITableViewDelegate\n    \n    func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {\n        return indexPath.section == 0 || indexPath.section == 1\n    }\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        switch indexPath.section {\n        case 0:\n            if indexPath.row == 0 { // Automatic Sliding\n                self.pagerView.automaticSlidingInterval = 3.0 - self.pagerView.automaticSlidingInterval\n            } else if indexPath.row == 1 { // IsInfinite\n                self.pagerView.isInfinite = !self.pagerView.isInfinite\n            }\n            tableView.reloadSections([indexPath.section], with: .automatic)\n        case 1:\n            switch indexPath.row {\n            case 0:\n                self.pagerView.decelerationDistance = FSPagerView.automaticDistance\n            case 1:\n                self.pagerView.decelerationDistance = 1\n            case 2:\n                self.pagerView.decelerationDistance = 2\n            default:\n                break\n            }\n            tableView.reloadSections([indexPath.section], with: .automatic)\n        default:\n            break\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return self.sectionTitles[section]\n    }\n    \n    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {\n        return section == 0 ? 40 : 20\n    }\n    \n    // MARK:- FSPagerView DataSource\n    \n    public func numberOfItems(in pagerView: FSPagerView) -> Int {\n        return self.numberOfItems\n    }\n    \n    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {\n        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: \"cell\", at: index)\n        cell.imageView?.image = UIImage(named: self.imageNames[index])\n        cell.imageView?.contentMode = .scaleAspectFill\n        cell.imageView?.clipsToBounds = true\n        cell.textLabel?.text = index.description+index.description\n        return cell\n    }\n    \n    // MARK:- FSPagerView Delegate\n    \n    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {\n        pagerView.deselectItem(at: index, animated: true)\n        pagerView.scrollToItem(at: index, animated: true)\n    }\n    \n    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {\n        self.pageControl.currentPage = targetIndex\n    }\n    \n    func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {\n        self.pageControl.currentPage = pagerView.currentIndex\n    }\n    \n    @IBAction func sliderValueChanged(_ sender: UISlider) {\n        switch sender.tag {\n        case 1:\n            let newScale = 0.5+CGFloat(sender.value)*0.5 // [0.5 - 1.0]\n            self.pagerView.itemSize = self.pagerView.frame.size.applying(CGAffineTransform(scaleX: newScale, y: newScale))\n        case 2:\n            self.pagerView.interitemSpacing = CGFloat(sender.value) * 20 // [0 - 20]\n        case 3:\n            self.numberOfItems = Int(roundf(sender.value*7.0))\n            self.pageControl.numberOfPages = self.numberOfItems\n            self.pagerView.reloadData()\n        default:\n            break\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/PageControlExampleViewController.swift",
    "content": "//\n//  PageControlExampleViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 17/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nclass PageControlExampleViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate {\n    \n    fileprivate let imageNames = [\"1.jpg\",\"2.jpg\",\"3.jpg\",\"4.jpg\",\"5.jpg\",\"6.jpg\",\"7.jpg\"]\n    fileprivate let pageControlStyles = [\"Default\", \"Ring\", \"UIImage\", \"UIBezierPath - Star\", \"UIBezierPath - Heart\"]\n    fileprivate let pageControlAlignments = [\"Right\", \"Center\", \"Left\"]\n    fileprivate let sectionTitles = [\"Style\", \"Item Spacing\", \"Interitem Spacing\", \"Horizontal Alignment\"]\n    \n    fileprivate var styleIndex = 0 {\n        didSet {\n            // Clean up\n            self.pageControl.setStrokeColor(nil, for: .normal)\n            self.pageControl.setStrokeColor(nil, for: .selected)\n            self.pageControl.setFillColor(nil, for: .normal)\n            self.pageControl.setFillColor(nil, for: .selected)\n            self.pageControl.setImage(nil, for: .normal)\n            self.pageControl.setImage(nil, for: .selected)\n            self.pageControl.setPath(nil, for: .normal)\n            self.pageControl.setPath(nil, for: .selected)\n            switch self.styleIndex {\n            case 0:\n                // Default\n                break\n            case 1:\n                // Ring\n                self.pageControl.setStrokeColor(.green, for: .normal)\n                self.pageControl.setStrokeColor(.green, for: .selected)\n                self.pageControl.setFillColor(.green, for: .selected)\n            case 2:\n                // Image\n                self.pageControl.setImage(UIImage(named:\"icon_footprint\"), for: .normal)\n                self.pageControl.setImage(UIImage(named:\"icon_cat\"), for: .selected)\n            case 3:\n                // UIBezierPath - Star\n                self.pageControl.setStrokeColor(.yellow, for: .normal)\n                self.pageControl.setStrokeColor(.yellow, for: .selected)\n                self.pageControl.setFillColor(.yellow, for: .selected)\n                self.pageControl.setPath(self.starPath, for: .normal)\n                self.pageControl.setPath(self.starPath, for: .selected)\n            case 4:\n                // UIBezierPath - Heart\n                let color = UIColor(red: 255/255.0, green: 102/255.0, blue: 255/255.0, alpha: 1.0)\n                self.pageControl.setStrokeColor(color, for: .normal)\n                self.pageControl.setStrokeColor(color, for: .selected)\n                self.pageControl.setFillColor(color, for: .selected)\n                self.pageControl.setPath(self.heartPath, for: .normal)\n                self.pageControl.setPath(self.heartPath, for: .selected)\n            default:\n                break\n            }\n        }\n    }\n    fileprivate var alignmentIndex = 0 {\n        didSet {\n            self.pageControl.contentHorizontalAlignment = [.right,.center,.left][self.alignmentIndex]\n        }\n    }\n    \n    // ⭐️\n    fileprivate var starPath: UIBezierPath {\n        let width = self.pageControl.itemSpacing\n        let height = self.pageControl.itemSpacing\n        let starPath = UIBezierPath()\n        starPath.move(to: CGPoint(x: width*0.5, y: 0))\n        starPath.addLine(to: CGPoint(x: width*0.677, y: height*0.257))\n        starPath.addLine(to: CGPoint(x: width*0.975, y: height*0.345))\n        starPath.addLine(to: CGPoint(x: width*0.785, y: height*0.593))\n        starPath.addLine(to: CGPoint(x: width*0.794, y: height*0.905))\n        starPath.addLine(to: CGPoint(x: width*0.5, y: height*0.8))\n        starPath.addLine(to: CGPoint(x: width*0.206, y: height*0.905))\n        starPath.addLine(to: CGPoint(x: width*0.215, y: height*0.593))\n        starPath.addLine(to: CGPoint(x: width*0.025, y: height*0.345))\n        starPath.addLine(to: CGPoint(x: width*0.323, y: height*0.257))\n        starPath.close()\n        return starPath\n    }\n    \n    // ❤️\n    fileprivate var heartPath: UIBezierPath {\n        let width = self.pageControl.itemSpacing\n        let height = self.pageControl.itemSpacing\n        let heartPath = UIBezierPath()\n        heartPath.move(to: CGPoint(x: width*0.5, y: height))\n        heartPath.addCurve(\n            to: CGPoint(x: 0, y: height*0.25),\n            controlPoint1: CGPoint(x: width*0.5, y: height*0.75) ,\n            controlPoint2: CGPoint(x: 0, y: height*0.5)\n        )\n        heartPath.addArc(\n            withCenter: CGPoint(x: width*0.25,y: height*0.25),\n            radius: width * 0.25,\n            startAngle: .pi,\n            endAngle: 0,\n            clockwise: true\n        )\n        heartPath.addArc(\n            withCenter: CGPoint(x: width*0.75, y: height*0.25),\n            radius: width * 0.25,\n            startAngle: .pi,\n            endAngle: 0,\n            clockwise: true\n        )\n        heartPath.addCurve(\n            to: CGPoint(x: width*0.5, y: height),\n            controlPoint1: CGPoint(x: width, y: height*0.5),\n            controlPoint2: CGPoint(x: width*0.5, y: height*0.75)\n        )\n        heartPath.close()\n        return heartPath\n    }\n    \n    @IBOutlet weak var tableView: UITableView!\n    @IBOutlet weak var pagerView: FSPagerView! {\n        didSet {\n            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\n        }\n    }\n    \n    @IBOutlet weak var pageControl: FSPageControl! {\n        didSet {\n            self.pageControl.numberOfPages = self.imageNames.count\n            self.pageControl.contentHorizontalAlignment = .right\n            self.pageControl.contentInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)\n            self.pageControl.hidesForSinglePage = true\n        }\n    }\n    \n    // MARK:- UITableViewDataSource\n    \n    func numberOfSections(in tableView: UITableView) -> Int {\n        return self.sectionTitles.count\n    }\n    \n    @available(iOS 2.0, *)\n    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        switch section {\n        case 0:\n            return self.pageControlStyles.count\n        case 1,2:\n            return 1\n        case 3:\n            return self.pageControlAlignments.count\n        default:\n            break\n        }\n        return 0\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        switch indexPath.section {\n        case 0:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n            cell.textLabel?.text = self.pageControlStyles[indexPath.row]\n            cell.accessoryType = self.styleIndex==indexPath.row ? .checkmark : .none\n            return cell\n        case 1:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"slider_cell\")!\n            let slider = cell.contentView.subviews.first as! UISlider\n            slider.tag = indexPath.section\n            slider.value = Float((self.pageControl.itemSpacing-6.0)/10.0)\n            return cell\n        case 2:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"slider_cell\")!\n            let slider = cell.contentView.subviews.first as! UISlider\n            slider.tag = indexPath.section\n            slider.value = Float((self.pageControl.interitemSpacing-6.0)/10.0)\n            return cell\n        case 3:\n            let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n            cell.textLabel?.text = self.pageControlAlignments[indexPath.row]\n            cell.accessoryType = self.alignmentIndex==indexPath.row ? .checkmark : .none\n            return cell\n        default:\n            break\n        }\n        return tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n    }\n    \n    // MARK:- UITableViewDelegate\n    \n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return self.sectionTitles[section]\n    }\n    \n    func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {\n        return [0,3].contains(indexPath.section) // 0 or 3\n    }\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        switch indexPath.section {\n        case 0:\n            self.styleIndex = indexPath.row\n            tableView.reloadSections([indexPath.section], with: .automatic)\n        case 3:\n            self.alignmentIndex = indexPath.row\n            tableView.reloadSections([indexPath.section], with: .automatic)\n        default:\n            break\n        }\n    }\n    \n    // MARK:- FSPagerViewDataSource\n    \n    func numberOfItems(in pagerView: FSPagerView) -> Int {\n        return self.imageNames.count\n    }\n    \n    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {\n        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: \"cell\", at: index)\n        cell.imageView?.image = UIImage(named: self.imageNames[index])\n        cell.imageView?.contentMode = .scaleAspectFill\n        return cell\n    }\n    \n    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {\n        pagerView.deselectItem(at: index, animated: true)\n    }\n    \n    // MARK:- FSPagerViewDelegate\n    \n    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {\n        self.pageControl.currentPage = targetIndex\n    }\n    \n    // MARK:- Target Actions\n    \n    @IBAction func sliderValueChanged(_ sender: UISlider) {\n        switch sender.tag {\n        case 1:\n            self.pageControl.itemSpacing = 6.0 + CGFloat(sender.value*10.0) // [6 - 16]\n            // Redraw UIBezierPath\n            if [3,4].contains(self.styleIndex) {\n                let index = self.styleIndex\n                self.styleIndex = index\n            }\n        case 2:\n            self.pageControl.interitemSpacing = 6.0 + CGFloat(sender.value*10.0) // [6 - 16]\n        default:\n            break\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/TransformerExampleViewController.swift",
    "content": "//\n//  TransformerExampleViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 09/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nclass TransformerExampleViewController: UIViewController,FSPagerViewDataSource,FSPagerViewDelegate, UITableViewDataSource,UITableViewDelegate {\n    \n    fileprivate let imageNames = [\"1.jpg\",\"2.jpg\",\"3.jpg\",\"4.jpg\",\"5.jpg\",\"6.jpg\",\"7.jpg\"]\n    fileprivate let transformerNames = [\"cross fading\", \"zoom out\", \"depth\", \"linear\", \"overlap\", \"ferris wheel\", \"inverted ferris wheel\", \"coverflow\", \"cubic\"]\n    fileprivate let transformerTypes: [FSPagerViewTransformerType] = [.crossFading,\n                                                                      .zoomOut,\n                                                                      .depth,\n                                                                      .linear,\n                                                                      .overlap,\n                                                                      .ferrisWheel,\n                                                                      .invertedFerrisWheel,\n                                                                      .coverFlow,\n                                                                      .cubic]\n    fileprivate var typeIndex = 0 {\n        didSet {\n            let type = self.transformerTypes[typeIndex]\n            self.pagerView.transformer = FSPagerViewTransformer(type:type)\n            switch type {\n            case .crossFading, .zoomOut, .depth:\n                self.pagerView.itemSize = FSPagerView.automaticSize\n                self.pagerView.decelerationDistance = 1\n            case .linear, .overlap:\n                let transform = CGAffineTransform(scaleX: 0.6, y: 0.75)\n                self.pagerView.itemSize = self.pagerView.frame.size.applying(transform)\n                self.pagerView.decelerationDistance = FSPagerView.automaticDistance\n            case .ferrisWheel, .invertedFerrisWheel:\n                self.pagerView.itemSize = CGSize(width: 180, height: 140)\n                self.pagerView.decelerationDistance = FSPagerView.automaticDistance\n            case .coverFlow:\n                self.pagerView.itemSize = CGSize(width: 220, height: 170)\n                self.pagerView.decelerationDistance = FSPagerView.automaticDistance\n            case .cubic:\n                let transform = CGAffineTransform(scaleX: 0.9, y: 0.9)\n                self.pagerView.itemSize = self.pagerView.frame.size.applying(transform)\n                self.pagerView.decelerationDistance = 1\n            }\n        }\n    }\n    \n    @IBOutlet weak var tableView: UITableView!\n    @IBOutlet weak var pagerView: FSPagerView! {\n        didSet {\n            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\n            self.typeIndex = 0\n        }\n    }\n    \n    override func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        let index = self.typeIndex\n        self.typeIndex = index // Manually trigger didSet\n    }\n    \n    // MARK:- UITableViewDataSource\n    \n    func numberOfSections(in tableView: UITableView) -> Int {\n        return 1\n    }\n    \n    @available(iOS 2.0, *)\n    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return self.transformerNames.count\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\")!\n        cell.textLabel?.text = self.transformerNames[indexPath.row]\n        cell.accessoryType = indexPath.row == self.typeIndex ? .checkmark : .none\n        return cell\n    }\n    \n    // MARK:- UITableViewDelegate\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        self.typeIndex = indexPath.row\n        if let visibleRows = tableView.indexPathsForVisibleRows {\n            tableView.reloadRows(at: visibleRows, with: .automatic)\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        return \"Transformers\"\n    }\n    \n    // MARK:- FSPagerViewDataSource\n    \n    public func numberOfItems(in pagerView: FSPagerView) -> Int {\n        return imageNames.count\n    }\n    \n    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {\n        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: \"cell\", at: index)\n        cell.imageView?.image = UIImage(named: self.imageNames[index])\n        cell.imageView?.contentMode = .scaleAspectFill\n        cell.imageView?.clipsToBounds = true\n        return cell\n    }\n    \n    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {\n        pagerView.deselectItem(at: index, animated: true)\n        pagerView.scrollToItem(at: index, animated: true)\n    }\n    \n}\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample.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\tF931E00C2158A1F3001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */; };\n\t\tF954839A1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */; };\n\t\tF954839B1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */; };\n\t\tF9580B571E5D995400C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B511E5D995400C5B267 /* FSPageControl.swift */; };\n\t\tF9580B581E5D995400C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */; };\n\t\tF9580B591E5D995400C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B531E5D995400C5B267 /* FSPagerView.swift */; };\n\t\tF9580B5A1E5D995400C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B541E5D995400C5B267 /* FSPagerViewCell.swift */; };\n\t\tF9580B5B1E5D995400C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B551E5D995400C5B267 /* FSPageViewLayout.swift */; };\n\t\tF9580B5C1E5D995400C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */; };\n\t\tF9C6942F1E40C583007084B6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C694241E40C583007084B6 /* AppDelegate.swift */; };\n\t\tF9C694311E40C583007084B6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9C694261E40C583007084B6 /* LaunchScreen.storyboard */; };\n\t\tF9C694321E40C583007084B6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9C694281E40C583007084B6 /* Main.storyboard */; };\n\t\tF9C694331E40C583007084B6 /* BasicExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */; };\n\t\tF9C694351E40C583007084B6 /* PageControlExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */; };\n\t\tF9C694361E40C583007084B6 /* TransformerExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */; };\n\t\tF9C6945A1E40C720007084B6 /* FSPagerViewExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */; };\n\t\tF9C694711E40C8DA007084B6 /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C694621E40C8DA007084B6 /* 1.jpg */; };\n\t\tF9C694791E40C8DA007084B6 /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946A1E40C8DA007084B6 /* 2.jpg */; };\n\t\tF9C6947A1E40C8DA007084B6 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946B1E40C8DA007084B6 /* 3.jpg */; };\n\t\tF9C6947B1E40C8DA007084B6 /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946C1E40C8DA007084B6 /* 4.jpg */; };\n\t\tF9C6947C1E40C8DA007084B6 /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946D1E40C8DA007084B6 /* 5.jpg */; };\n\t\tF9C6947D1E40C8DA007084B6 /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946E1E40C8DA007084B6 /* 6.jpg */; };\n\t\tF9C6947E1E40C8DA007084B6 /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946F1E40C8DA007084B6 /* 7.jpg */; };\n\t\tF9DF961F1E7F5B360010506C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9DF961E1E7F5B360010506C /* Assets.xcassets */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tF9C6945C1E40C720007084B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F97C966F1E1FDE25002D9E7E /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F97C96761E1FDE25002D9E7E;\n\t\t\tremoteInfo = FSPagerViewExample;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t50989DFE2151DB29004DBB4A /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = \"<group>\"; };\n\t\tF931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = \"<group>\"; };\n\t\tF95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = \"<group>\"; };\n\t\tF9580B511E5D995400C5B267 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = \"<group>\"; };\n\t\tF9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B531E5D995400C5B267 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B541E5D995400C5B267 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = \"<group>\"; };\n\t\tF9580B551E5D995400C5B267 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = \"<group>\"; };\n\t\tF9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = \"<group>\"; };\n\t\tF97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSPagerViewExample.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9C694241E40C583007084B6 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tF9C694271E40C583007084B6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tF9C694291E40C583007084B6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tF9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\tF9C6942B1E40C583007084B6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageControlExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\tF9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformerExampleViewController.swift; sourceTree = \"<group>\"; };\n\t\tF9C694571E40C720007084B6 /* FSPagerViewExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FSPagerViewExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSPagerViewExampleUITests.swift; sourceTree = \"<group>\"; };\n\t\tF9C6945B1E40C720007084B6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9C694621E40C8DA007084B6 /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946A1E40C8DA007084B6 /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946B1E40C8DA007084B6 /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946C1E40C8DA007084B6 /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946D1E40C8DA007084B6 /* 5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 5.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946E1E40C8DA007084B6 /* 6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6.jpg; sourceTree = \"<group>\"; };\n\t\tF9C6946F1E40C8DA007084B6 /* 7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7.jpg; sourceTree = \"<group>\"; };\n\t\tF9DF961E1E7F5B360010506C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tF97C96741E1FDE25002D9E7E /* 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\tF9C694541E40C720007084B6 /* 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\tF9580B501E5D995400C5B267 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B511E5D995400C5B267 /* FSPageControl.swift */,\n\t\t\t\tF9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */,\n\t\t\t\tF9580B531E5D995400C5B267 /* FSPagerView.swift */,\n\t\t\t\tF9580B541E5D995400C5B267 /* FSPagerViewCell.swift */,\n\t\t\t\tF9580B551E5D995400C5B267 /* FSPageViewLayout.swift */,\n\t\t\t\tF9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */,\n\t\t\t\tF95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */,\n\t\t\t\t50989DFE2151DB29004DBB4A /* FSPagerViewObjcCompat.h */,\n\t\t\t\tF931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tpath = ../Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF97C966E1E1FDE25002D9E7E = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B501E5D995400C5B267 /* Sources */,\n\t\t\t\tF9C694231E40C583007084B6 /* FSPagerViewExample */,\n\t\t\t\tF9C694581E40C720007084B6 /* FSPagerViewExampleUITests */,\n\t\t\t\tF97C96781E1FDE25002D9E7E /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF97C96781E1FDE25002D9E7E /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */,\n\t\t\t\tF9C694571E40C720007084B6 /* FSPagerViewExampleUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C694231E40C583007084B6 /* FSPagerViewExample */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C694241E40C583007084B6 /* AppDelegate.swift */,\n\t\t\t\tF9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */,\n\t\t\t\tF9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */,\n\t\t\t\tF9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */,\n\t\t\t\tF9C694261E40C583007084B6 /* LaunchScreen.storyboard */,\n\t\t\t\tF9C694281E40C583007084B6 /* Main.storyboard */,\n\t\t\t\tF9C694611E40C8DA007084B6 /* Resources */,\n\t\t\t\tF9C694371E40C59E007084B6 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = FSPagerViewExample;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C694371E40C59E007084B6 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C6942B1E40C583007084B6 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C694581E40C720007084B6 /* FSPagerViewExampleUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */,\n\t\t\t\tF9C6945B1E40C720007084B6 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = FSPagerViewExampleUITests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C694611E40C8DA007084B6 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9DF961E1E7F5B360010506C /* Assets.xcassets */,\n\t\t\t\tF9C694621E40C8DA007084B6 /* 1.jpg */,\n\t\t\t\tF9C6946A1E40C8DA007084B6 /* 2.jpg */,\n\t\t\t\tF9C6946B1E40C8DA007084B6 /* 3.jpg */,\n\t\t\t\tF9C6946C1E40C8DA007084B6 /* 4.jpg */,\n\t\t\t\tF9C6946D1E40C8DA007084B6 /* 5.jpg */,\n\t\t\t\tF9C6946E1E40C8DA007084B6 /* 6.jpg */,\n\t\t\t\tF9C6946F1E40C8DA007084B6 /* 7.jpg */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tF97C96761E1FDE25002D9E7E /* FSPagerViewExample */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F97C969F1E1FDE25002D9E7E /* Build configuration list for PBXNativeTarget \"FSPagerViewExample\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF97C96731E1FDE25002D9E7E /* Sources */,\n\t\t\t\tF97C96741E1FDE25002D9E7E /* Frameworks */,\n\t\t\t\tF97C96751E1FDE25002D9E7E /* 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 = FSPagerViewExample;\n\t\t\tproductName = FSPageSliderExample;\n\t\t\tproductReference = F97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tF9C694561E40C720007084B6 /* FSPagerViewExampleUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9C6945E1E40C720007084B6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExampleUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9C694531E40C720007084B6 /* Sources */,\n\t\t\t\tF9C694541E40C720007084B6 /* Frameworks */,\n\t\t\t\tF9C694551E40C720007084B6 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF9C6945D1E40C720007084B6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = FSPagerViewExampleUITests;\n\t\t\tproductName = FSPagerViewExampleUITests;\n\t\t\tproductReference = F9C694571E40C720007084B6 /* FSPagerViewExampleUITests.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\tF97C966F1E1FDE25002D9E7E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0820;\n\t\t\t\tLastUpgradeCheck = 1030;\n\t\t\t\tORGANIZATIONNAME = \"Wenchao Ding\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tF97C96761E1FDE25002D9E7E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t\tF9C694561E40C720007084B6 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = F97C96761E1FDE25002D9E7E;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = F97C96721E1FDE25002D9E7E /* Build configuration list for PBXProject \"FSPagerViewExample\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\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 = F97C966E1E1FDE25002D9E7E;\n\t\t\tproductRefGroup = F97C96781E1FDE25002D9E7E /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tF97C96761E1FDE25002D9E7E /* FSPagerViewExample */,\n\t\t\t\tF9C694561E40C720007084B6 /* FSPagerViewExampleUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tF97C96751E1FDE25002D9E7E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9C694321E40C583007084B6 /* Main.storyboard in Resources */,\n\t\t\t\tF9C6947B1E40C8DA007084B6 /* 4.jpg in Resources */,\n\t\t\t\tF9C6947A1E40C8DA007084B6 /* 3.jpg in Resources */,\n\t\t\t\tF9C6947D1E40C8DA007084B6 /* 6.jpg in Resources */,\n\t\t\t\tF9DF961F1E7F5B360010506C /* Assets.xcassets in Resources */,\n\t\t\t\tF9C6947C1E40C8DA007084B6 /* 5.jpg in Resources */,\n\t\t\t\tF9C694311E40C583007084B6 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tF9C694791E40C8DA007084B6 /* 2.jpg in Resources */,\n\t\t\t\tF9C6947E1E40C8DA007084B6 /* 7.jpg in Resources */,\n\t\t\t\tF9C694711E40C8DA007084B6 /* 1.jpg in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9C694551E40C720007084B6 /* 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\tF97C96731E1FDE25002D9E7E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9580B571E5D995400C5B267 /* FSPageControl.swift in Sources */,\n\t\t\t\tF9580B581E5D995400C5B267 /* FSPagerCollectionView.swift in Sources */,\n\t\t\t\tF9C6942F1E40C583007084B6 /* AppDelegate.swift in Sources */,\n\t\t\t\tF954839A1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */,\n\t\t\t\tF9580B591E5D995400C5B267 /* FSPagerView.swift in Sources */,\n\t\t\t\tF9C694351E40C583007084B6 /* PageControlExampleViewController.swift in Sources */,\n\t\t\t\tF9C694361E40C583007084B6 /* TransformerExampleViewController.swift in Sources */,\n\t\t\t\tF9580B5C1E5D995400C5B267 /* FSPageViewTransformer.swift in Sources */,\n\t\t\t\tF9C694331E40C583007084B6 /* BasicExampleViewController.swift in Sources */,\n\t\t\t\tF9580B5A1E5D995400C5B267 /* FSPagerViewCell.swift in Sources */,\n\t\t\t\tF9580B5B1E5D995400C5B267 /* FSPageViewLayout.swift in Sources */,\n\t\t\t\tF931E00C2158A1F3001B2A01 /* FSPagerViewObjcCompat.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9C694531E40C720007084B6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF954839B1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */,\n\t\t\t\tF9C6945A1E40C720007084B6 /* FSPagerViewExampleUITests.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\tF9C6945D1E40C720007084B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = F97C96761E1FDE25002D9E7E /* FSPagerViewExample */;\n\t\t\ttargetProxy = F9C6945C1E40C720007084B6 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tF9C694261E40C583007084B6 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C694271E40C583007084B6 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C694281E40C583007084B6 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C694291E40C583007084B6 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tF97C969D1E1FDE25002D9E7E /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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 = 8.0;\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_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF97C969E1E1FDE25002D9E7E /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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 = 8.0;\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\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF97C96A01E1FDE25002D9E7E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSPagerViewExample/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF97C96A11E1FDE25002D9E7E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSPagerViewExample/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF9C6945F1E40C720007084B6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = FSPagerViewExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_TARGET_NAME = FSPagerViewExample;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9C694601E40C720007084B6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = FSPagerViewExampleUITests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExampleUITests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_TARGET_NAME = FSPagerViewExample;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tF97C96721E1FDE25002D9E7E /* Build configuration list for PBXProject \"FSPagerViewExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF97C969D1E1FDE25002D9E7E /* Debug */,\n\t\t\t\tF97C969E1E1FDE25002D9E7E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF97C969F1E1FDE25002D9E7E /* Build configuration list for PBXNativeTarget \"FSPagerViewExample\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF97C96A01E1FDE25002D9E7E /* Debug */,\n\t\t\t\tF97C96A11E1FDE25002D9E7E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9C6945E1E40C720007084B6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExampleUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9C6945F1E40C720007084B6 /* Debug */,\n\t\t\t\tF9C694601E40C720007084B6 /* 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 = F97C966F1E1FDE25002D9E7E /* Project object */;\n}\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/wenchaoding/Developer/Xcode/FSPageSlider/FSPageSliderExample-Swift/FSPagerViewExample.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExampleUITests/FSPagerViewExampleUITests.swift",
    "content": "//\n//  FSPagerViewExampleUITests.swift\n//  FSPagerViewExampleUITests\n//\n//  Created by Wenchao Ding on 31/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport XCTest\n\nclass FSPagerViewExampleUITests: 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": "FSPageViewExample-Swift/FSPagerViewExampleUITests/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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSPagerView/FSPagerView/FSPagerView.h",
    "content": "//\n//  FSPagerView.h\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 22/02/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for FSPagerView.\nFOUNDATION_EXPORT double FSPagerViewVersionNumber;\n\n//! Project version string for FSPagerView.\nFOUNDATION_EXPORT const unsigned char FSPagerViewVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <FSPagerView/PublicHeader.h>\n\n\n"
  },
  {
    "path": "FSPagerView/FSPagerView/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>0.8.3</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": "FSPagerView/FSPagerView.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\t50C44A1D2150E7800093B3E9 /* FSPagerViewObjcCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */; };\n\t\tF931E0062158A062001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */; };\n\t\tF9580B7B1E5D9F0600C5B267 /* FSPagerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F9580B791E5D9F0600C5B267 /* FSPagerView.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tF9580B881E5D9F2B00C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B821E5D9F2B00C5B267 /* FSPageControl.swift */; };\n\t\tF9580B891E5D9F2B00C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */; };\n\t\tF9580B8A1E5D9F2B00C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B841E5D9F2B00C5B267 /* FSPagerView.swift */; };\n\t\tF9580B8B1E5D9F2B00C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */; };\n\t\tF9580B8C1E5D9F2B00C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */; };\n\t\tF9580B8D1E5D9F2B00C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */; };\n\t\tF9D7BD2A1E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = \"<group>\"; };\n\t\tF931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = \"<group>\"; };\n\t\tF9580B761E5D9F0600C5B267 /* FSPagerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSPagerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9580B791E5D9F0600C5B267 /* FSPagerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FSPagerView.h; sourceTree = \"<group>\"; };\n\t\tF9580B7A1E5D9F0600C5B267 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9580B821E5D9F2B00C5B267 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = \"<group>\"; };\n\t\tF9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B841E5D9F2B00C5B267 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = \"<group>\"; };\n\t\tF9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = \"<group>\"; };\n\t\tF9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = \"<group>\"; };\n\t\tF9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tF9580B721E5D9F0600C5B267 /* 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\tF9580B6C1E5D9F0600C5B267 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B811E5D9F2B00C5B267 /* Sources */,\n\t\t\t\tF9580B781E5D9F0600C5B267 /* FSPagerView */,\n\t\t\t\tF9580B771E5D9F0600C5B267 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9580B771E5D9F0600C5B267 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B761E5D9F0600C5B267 /* FSPagerView.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9580B781E5D9F0600C5B267 /* FSPagerView */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B791E5D9F0600C5B267 /* FSPagerView.h */,\n\t\t\t\tF9580B7A1E5D9F0600C5B267 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = FSPagerView;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9580B811E5D9F2B00C5B267 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B821E5D9F2B00C5B267 /* FSPageControl.swift */,\n\t\t\t\tF9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */,\n\t\t\t\tF9580B841E5D9F2B00C5B267 /* FSPagerView.swift */,\n\t\t\t\tF9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */,\n\t\t\t\tF9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */,\n\t\t\t\tF9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */,\n\t\t\t\tF9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */,\n\t\t\t\t50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */,\n\t\t\t\tF931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tpath = ../Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\tF9580B731E5D9F0600C5B267 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9580B7B1E5D9F0600C5B267 /* FSPagerView.h in Headers */,\n\t\t\t\t50C44A1D2150E7800093B3E9 /* FSPagerViewObjcCompat.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\tF9580B751E5D9F0600C5B267 /* FSPagerView */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9580B7E1E5D9F0600C5B267 /* Build configuration list for PBXNativeTarget \"FSPagerView\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9580B711E5D9F0600C5B267 /* Sources */,\n\t\t\t\tF9580B721E5D9F0600C5B267 /* Frameworks */,\n\t\t\t\tF9580B731E5D9F0600C5B267 /* Headers */,\n\t\t\t\tF9580B741E5D9F0600C5B267 /* 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 = FSPagerView;\n\t\t\tproductName = FSPagerView;\n\t\t\tproductReference = F9580B761E5D9F0600C5B267 /* FSPagerView.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tF9580B6D1E5D9F0600C5B267 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1030;\n\t\t\t\tORGANIZATIONNAME = \"Wenchao Ding\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tF9580B751E5D9F0600C5B267 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 1000;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = F9580B701E5D9F0600C5B267 /* Build configuration list for PBXProject \"FSPagerView\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\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 = F9580B6C1E5D9F0600C5B267;\n\t\t\tproductRefGroup = F9580B771E5D9F0600C5B267 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tF9580B751E5D9F0600C5B267 /* FSPagerView */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tF9580B741E5D9F0600C5B267 /* 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\tF9580B711E5D9F0600C5B267 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9D7BD2A1E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift in Sources */,\n\t\t\t\tF9580B8D1E5D9F2B00C5B267 /* FSPageViewTransformer.swift in Sources */,\n\t\t\t\tF9580B881E5D9F2B00C5B267 /* FSPageControl.swift in Sources */,\n\t\t\t\tF9580B891E5D9F2B00C5B267 /* FSPagerCollectionView.swift in Sources */,\n\t\t\t\tF9580B8C1E5D9F2B00C5B267 /* FSPageViewLayout.swift in Sources */,\n\t\t\t\tF9580B8A1E5D9F2B00C5B267 /* FSPagerView.swift in Sources */,\n\t\t\t\tF9580B8B1E5D9F2B00C5B267 /* FSPagerViewCell.swift in Sources */,\n\t\t\t\tF931E0062158A062001B2A01 /* FSPagerViewObjcCompat.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin XCBuildConfiguration section */\n\t\tF9580B7C1E5D9F0600C5B267 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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\tCURRENT_PROJECT_VERSION = 1;\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 = 8.0;\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_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.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\tF9580B7D1E5D9F0600C5B267 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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\tCURRENT_PROJECT_VERSION = 1;\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 = 8.0;\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\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\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\t\tF9580B7F1E5D9F0600C5B267 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\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 = FSPagerView/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.wenchaod.FSPagerView;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9580B801E5D9F0600C5B267 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\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 = FSPagerView/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.wenchaod.FSPagerView;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tF9580B701E5D9F0600C5B267 /* Build configuration list for PBXProject \"FSPagerView\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9580B7C1E5D9F0600C5B267 /* Debug */,\n\t\t\t\tF9580B7D1E5D9F0600C5B267 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9580B7E1E5D9F0600C5B267 /* Build configuration list for PBXNativeTarget \"FSPagerView\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9580B7F1E5D9F0600C5B267 /* Debug */,\n\t\t\t\tF9580B801E5D9F0600C5B267 /* 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 = F9580B6D1E5D9F0600C5B267 /* Project object */;\n}\n"
  },
  {
    "path": "FSPagerView/FSPagerView.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:FSPagerView.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSPagerView/FSPagerView.xcodeproj/xcshareddata/xcschemes/FSPagerView.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1030\"\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 = \"F9580B751E5D9F0600C5B267\"\n               BuildableName = \"FSPagerView.framework\"\n               BlueprintName = \"FSPagerView\"\n               ReferencedContainer = \"container:FSPagerView.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 = \"F9580B751E5D9F0600C5B267\"\n            BuildableName = \"FSPagerView.framework\"\n            BlueprintName = \"FSPagerView\"\n            ReferencedContainer = \"container:FSPagerView.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 = \"F9580B751E5D9F0600C5B267\"\n            BuildableName = \"FSPagerView.framework\"\n            BlueprintName = \"FSPagerView\"\n            ReferencedContainer = \"container:FSPagerView.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": "FSPagerView.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name             = \"FSPagerView\"\n  s.version          = \"0.8.3\"\n  s.summary          = \"FSPagerView is an elegant Screen Slide Library for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.\"\n  \n  s.homepage         = \"https://github.com/WenchaoD/FSPagerView\"\n  s.screenshots      = \"https://cloud.githubusercontent.com/assets/5186464/22686432/19b567f8-ed5f-11e6-885d-bd660c98b507.gif\"\n  s.license          = 'MIT'\n  s.author           = { \"Wenchao Ding\" => \"f33chobits@gmail.com\" }\n  s.source           = { :git => \"https://github.com/WenchaoD/FSPagerView.git\", :tag => s.version.to_s }\n\n  s.platform     = :ios\n  s.ios.deployment_target = '9.0'\n  s.requires_arc = true\n  s.framework    = 'UIKit'\n  s.source_files = 'Sources/*.{swift,h,m}'\n  s.swift_version = '5.3'\n  s.cocoapods_version = '>= 1.4.0'\n\nend\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    return YES;\n}\n\n\n- (void)applicationWillResignActive:(UIApplication *)application {\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 invalidate graphics rendering callbacks. Games should use this method to pause the game.\n}\n\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\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\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\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\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n\n@end\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/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=\"11134\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"11106\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\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=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\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": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13196\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"65m-zG-Zjb\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13173\"/>\n        <capability name=\"Aspect ratio constraints\" minToolsVersion=\"5.1\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Navigation Controller-->\n        <scene sceneID=\"1gZ-cN-8UU\">\n            <objects>\n                <navigationController id=\"65m-zG-Zjb\" sceneMemberID=\"viewController\">\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"sdq-d2-T0f\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"375\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <connections>\n                        <segue destination=\"QFv-CW-07W\" kind=\"relationship\" relationship=\"rootViewController\" id=\"LEb-Q1-2GK\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"XrD-t8-fKf\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-1302\" y=\"58\"/>\n        </scene>\n        <!--FSPagerView-->\n        <scene sceneID=\"BUU-qk-sys\">\n            <objects>\n                <tableViewController id=\"QFv-CW-07W\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"static\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"5YA-MX-aYX\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <sections>\n                            <tableViewSection id=\"dcb-AR-Y6o\">\n                                <cells>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"xbh-ag-gwU\" style=\"IBUITableViewCellStyleDefault\" id=\"c8R-jz-NC9\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"c8R-jz-NC9\" id=\"Xt2-E6-SSP\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Banner Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"xbh-ag-gwU\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"7zq-aB-pr6\" kind=\"show\" id=\"uwf-fW-o5e\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" textLabel=\"tbD-GK-bJ9\" style=\"IBUITableViewCellStyleDefault\" id=\"FxB-ZA-C8d\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"44\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"FxB-ZA-C8d\" id=\"3kH-YG-RlN\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Transformer Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"tbD-GK-bJ9\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"UOf-Wx-Dm5\" kind=\"show\" id=\"u1f-IZ-XjV\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"kw1-Wq-GDF\" style=\"IBUITableViewCellStyleDefault\" id=\"Z9U-TY-wA5\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"88\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"Z9U-TY-wA5\" id=\"ebB-1o-WJk\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"PageControl Example\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kw1-Wq-GDF\">\n                                                    <rect key=\"frame\" x=\"16\" y=\"0.0\" width=\"344\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                        <connections>\n                                            <segue destination=\"lma-uy-r7Q\" kind=\"show\" id=\"Ywb-QZ-BEV\"/>\n                                        </connections>\n                                    </tableViewCell>\n                                </cells>\n                            </tableViewSection>\n                        </sections>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"QFv-CW-07W\" id=\"BKi-in-Tr5\"/>\n                            <outlet property=\"delegate\" destination=\"QFv-CW-07W\" id=\"z5U-b1-65X\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"Lpl-eu-Fmc\"/>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"odI-aG-hCn\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"-540\" y=\"57\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"YvR-xA-dZd\">\n            <objects>\n                <viewController id=\"UOf-Wx-Dm5\" customClass=\"TransformerExampleViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"YqO-fo-CV0\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"SYq-Ou-9Hm\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"gyH-Fj-vjS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"tSq-4e-Jil\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample_Objc\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"8cc-kO-s6Y\"/>\n                                </constraints>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"UOf-Wx-Dm5\" id=\"nee-RV-WAQ\"/>\n                                    <outlet property=\"delegate\" destination=\"UOf-Wx-Dm5\" id=\"umc-sl-eYD\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"TEB-Em-38e\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"257\" width=\"375\" height=\"410\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"NRZ-QP-i1t\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"zyL-iX-55x\" style=\"IBUITableViewCellStyleDefault\" id=\"5d8-B4-K8u\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5d8-B4-K8u\" id=\"uyz-07-btn\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"zyL-iX-55x\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"UOf-Wx-Dm5\" id=\"OyG-Zv-zse\"/>\n                                    <outlet property=\"delegate\" destination=\"UOf-Wx-Dm5\" id=\"M6x-pe-ONn\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"tSq-4e-Jil\" firstAttribute=\"leading\" secondItem=\"gyH-Fj-vjS\" secondAttribute=\"leading\" id=\"4JR-wM-Hj6\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"TEB-Em-38e\" secondAttribute=\"trailing\" id=\"9aI-K5-eVK\"/>\n                            <constraint firstItem=\"TEB-Em-38e\" firstAttribute=\"leading\" secondItem=\"gyH-Fj-vjS\" secondAttribute=\"leading\" id=\"Nzy-x1-I37\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"trailing\" id=\"RgI-TS-XNy\"/>\n                            <constraint firstItem=\"SYq-Ou-9Hm\" firstAttribute=\"top\" secondItem=\"TEB-Em-38e\" secondAttribute=\"bottom\" priority=\"900\" id=\"SvE-DZ-QZZ\"/>\n                            <constraint firstItem=\"TEB-Em-38e\" firstAttribute=\"top\" secondItem=\"tSq-4e-Jil\" secondAttribute=\"bottom\" id=\"Y6P-xg-PBD\"/>\n                            <constraint firstItem=\"tSq-4e-Jil\" firstAttribute=\"top\" secondItem=\"YqO-fo-CV0\" secondAttribute=\"bottom\" id=\"aLW-5l-Ysv\"/>\n                        </constraints>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"TLb-uP-T5p\"/>\n                    <connections>\n                        <outlet property=\"pagerView\" destination=\"tSq-4e-Jil\" id=\"8Jc-7p-Ufz\"/>\n                        <outlet property=\"tableView\" destination=\"TEB-Em-38e\" id=\"IVC-J2-DaD\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"umh-fh-emi\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"270\" y=\"57\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"ubH-x9-Tsd\">\n            <objects>\n                <viewController id=\"lma-uy-r7Q\" customClass=\"PageControlExampleViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"g8E-NI-6cy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"LRp-ZY-5aK\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"te4-kA-aq3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Dn3-eb-Xp7\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample_Objc\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"i9F-Jy-ACA\"/>\n                                </constraints>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"lma-uy-r7Q\" id=\"Azx-IG-5WF\"/>\n                                    <outlet property=\"delegate\" destination=\"lma-uy-r7Q\" id=\"fEg-8g-dJb\"/>\n                                </connections>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"1nD-dr-afd\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"257\" width=\"375\" height=\"410\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"DJv-Gh-cqi\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"BsM-5g-055\" style=\"IBUITableViewCellStyleDefault\" id=\"xKM-zP-mhA\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"xKM-zP-mhA\" id=\"e6f-eC-LPJ\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"BsM-5g-055\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"slider_cell\" id=\"5vo-WJ-LAV\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5vo-WJ-LAV\" id=\"4El-3j-sQo\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <slider opaque=\"NO\" tag=\"100\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.0\" maxValue=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"po6-ni-APz\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"6\" width=\"334\" height=\"31\"/>\n                                                    <connections>\n                                                        <action selector=\"sliderValueChanged:\" destination=\"lma-uy-r7Q\" eventType=\"valueChanged\" id=\"gFi-4y-tQy\"/>\n                                                    </connections>\n                                                </slider>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"centerX\" secondItem=\"4El-3j-sQo\" secondAttribute=\"centerX\" id=\"foX-sD-T7e\"/>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"leading\" secondItem=\"4El-3j-sQo\" secondAttribute=\"leadingMargin\" constant=\"14\" id=\"mq9-Ba-kWP\"/>\n                                                <constraint firstItem=\"po6-ni-APz\" firstAttribute=\"centerY\" secondItem=\"4El-3j-sQo\" secondAttribute=\"centerY\" id=\"vUz-88-Rc7\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"lma-uy-r7Q\" id=\"lKf-ae-tE0\"/>\n                                    <outlet property=\"delegate\" destination=\"lma-uy-r7Q\" id=\"c3M-CG-U6P\"/>\n                                </connections>\n                            </tableView>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"6XD-Hd-JIV\" customClass=\"FSPageControl\" customModule=\"FSPagerViewExample_Objc\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"227\" width=\"375\" height=\"30\"/>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.5\" colorSpace=\"calibratedWhite\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"30\" id=\"T3E-mc-eGj\"/>\n                                </constraints>\n                            </view>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstItem=\"LRp-ZY-5aK\" firstAttribute=\"top\" secondItem=\"1nD-dr-afd\" secondAttribute=\"bottom\" id=\"CPh-jp-Uyb\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"1nD-dr-afd\" secondAttribute=\"trailing\" id=\"ClN-uY-lET\"/>\n                            <constraint firstItem=\"1nD-dr-afd\" firstAttribute=\"top\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"bottom\" id=\"G58-E2-cgd\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"trailing\" id=\"e9e-i7-ujY\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"6XD-Hd-JIV\" secondAttribute=\"trailing\" id=\"iKX-Nj-2S8\"/>\n                            <constraint firstItem=\"1nD-dr-afd\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"jWs-RY-JCp\"/>\n                            <constraint firstItem=\"Dn3-eb-Xp7\" firstAttribute=\"top\" secondItem=\"g8E-NI-6cy\" secondAttribute=\"bottom\" id=\"kns-bN-gzL\"/>\n                            <constraint firstItem=\"Dn3-eb-Xp7\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"mbX-uc-m8F\"/>\n                            <constraint firstItem=\"6XD-Hd-JIV\" firstAttribute=\"bottom\" secondItem=\"Dn3-eb-Xp7\" secondAttribute=\"bottom\" id=\"p91-lV-jBL\"/>\n                            <constraint firstItem=\"6XD-Hd-JIV\" firstAttribute=\"leading\" secondItem=\"te4-kA-aq3\" secondAttribute=\"leading\" id=\"qsg-zG-lYB\"/>\n                        </constraints>\n                    </view>\n                    <toolbarItems/>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"OcE-VL-TYq\"/>\n                    <connections>\n                        <outlet property=\"pageControl\" destination=\"6XD-Hd-JIV\" id=\"Obv-i1-0Gv\"/>\n                        <outlet property=\"pagerView\" destination=\"Dn3-eb-Xp7\" id=\"ZCf-yT-eh3\"/>\n                        <outlet property=\"tableView\" destination=\"1nD-dr-afd\" id=\"uO4-v0-qCU\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"pdp-h1-Udb\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"270\" y=\"818\"/>\n        </scene>\n        <!--Data Source-->\n        <scene sceneID=\"tPJ-rw-QQI\">\n            <objects>\n                <viewController id=\"7zq-aB-pr6\" customClass=\"BasicExampleViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"3bN-RB-78f\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"rZq-8C-6dC\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"zhe-8b-S4r\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ch4-Dh-rc6\" customClass=\"FSPagerView\" customModule=\"FSPagerViewExample_Objc\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"64\" width=\"375\" height=\"193\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"width\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"height\" multiplier=\"375:193\" id=\"q7s-YA-wpI\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"alwaysBounceHorizontal\" value=\"YES\"/>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"removesInfiniteLoopForSingleItem\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"7zq-aB-pr6\" id=\"PzF-f2-zA4\"/>\n                                    <outlet property=\"delegate\" destination=\"7zq-aB-pr6\" id=\"qBU-1d-2ib\"/>\n                                </connections>\n                            </view>\n                            <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h5f-nu-Doz\" customClass=\"FSPageControl\" customModule=\"FSPagerViewExample_Objc\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"232\" width=\"375\" height=\"25\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" constant=\"25\" id=\"awi-gp-ifB\"/>\n                                </constraints>\n                                <userDefinedRuntimeAttributes>\n                                    <userDefinedRuntimeAttribute type=\"boolean\" keyPath=\"hidesForSinglePage\" value=\"YES\"/>\n                                </userDefinedRuntimeAttributes>\n                            </view>\n                            <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"grouped\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"18\" sectionFooterHeight=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"226-3E-RRx\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"257\" width=\"375\" height=\"410\"/>\n                                <color key=\"backgroundColor\" cocoaTouchSystemColor=\"groupTableViewBackgroundColor\"/>\n                                <constraints>\n                                    <constraint firstAttribute=\"height\" relation=\"greaterThanOrEqual\" constant=\"400\" id=\"Ix2-fM-f0e\"/>\n                                </constraints>\n                                <prototypes>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"cell\" textLabel=\"LWk-3K-WmP\" style=\"IBUITableViewCellStyleDefault\" id=\"wPj-3l-HCm\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"55.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"wPj-3l-HCm\" id=\"QTf-kp-J16\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <label opaque=\"NO\" multipleTouchEnabled=\"YES\" contentMode=\"left\" text=\"Title\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"LWk-3K-WmP\">\n                                                    <rect key=\"frame\" x=\"15\" y=\"0.0\" width=\"345\" height=\"43.5\"/>\n                                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                                    <nil key=\"textColor\"/>\n                                                    <nil key=\"highlightedColor\"/>\n                                                </label>\n                                            </subviews>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                    <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"slider_cell\" id=\"nbi-ZR-nDk\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"99.5\" width=\"375\" height=\"44\"/>\n                                        <autoresizingMask key=\"autoresizingMask\"/>\n                                        <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"nbi-ZR-nDk\" id=\"cD9-AG-y92\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"43.5\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <slider opaque=\"NO\" tag=\"100\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" value=\"1\" minValue=\"0.0\" maxValue=\"1\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"WnD-c9-GfM\">\n                                                    <rect key=\"frame\" x=\"20\" y=\"6\" width=\"334\" height=\"31\"/>\n                                                    <connections>\n                                                        <action selector=\"sliderValueChanged:\" destination=\"7zq-aB-pr6\" eventType=\"valueChanged\" id=\"kGM-Jj-qfl\"/>\n                                                    </connections>\n                                                </slider>\n                                            </subviews>\n                                            <constraints>\n                                                <constraint firstItem=\"WnD-c9-GfM\" firstAttribute=\"centerX\" secondItem=\"cD9-AG-y92\" secondAttribute=\"centerX\" id=\"KwF-5u-JF0\"/>\n                                                <constraint firstItem=\"WnD-c9-GfM\" firstAttribute=\"leading\" secondItem=\"cD9-AG-y92\" secondAttribute=\"leadingMargin\" constant=\"14\" id=\"VlZ-XN-1on\"/>\n                                                <constraint firstItem=\"WnD-c9-GfM\" firstAttribute=\"centerY\" secondItem=\"cD9-AG-y92\" secondAttribute=\"centerY\" id=\"q7d-vC-5gP\"/>\n                                            </constraints>\n                                        </tableViewCellContentView>\n                                    </tableViewCell>\n                                </prototypes>\n                                <connections>\n                                    <outlet property=\"dataSource\" destination=\"7zq-aB-pr6\" id=\"iMl-vb-qKd\"/>\n                                    <outlet property=\"delegate\" destination=\"7zq-aB-pr6\" id=\"xPe-k6-GJ5\"/>\n                                </connections>\n                            </tableView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"h5f-nu-Doz\" firstAttribute=\"bottom\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"bottom\" id=\"2Ba-Ep-xus\"/>\n                            <constraint firstItem=\"226-3E-RRx\" firstAttribute=\"trailing\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"trailing\" id=\"9qq-11-ogh\"/>\n                            <constraint firstItem=\"rZq-8C-6dC\" firstAttribute=\"top\" secondItem=\"226-3E-RRx\" secondAttribute=\"bottom\" id=\"Bc4-AO-203\"/>\n                            <constraint firstItem=\"ch4-Dh-rc6\" firstAttribute=\"top\" secondItem=\"3bN-RB-78f\" secondAttribute=\"bottom\" id=\"Cvt-wn-ItH\"/>\n                            <constraint firstItem=\"226-3E-RRx\" firstAttribute=\"leading\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"leading\" id=\"DIt-KV-x4D\"/>\n                            <constraint firstItem=\"h5f-nu-Doz\" firstAttribute=\"leading\" secondItem=\"zhe-8b-S4r\" secondAttribute=\"leading\" id=\"EC9-XN-MBg\"/>\n                            <constraint firstItem=\"226-3E-RRx\" firstAttribute=\"top\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"bottom\" id=\"bAA-Q2-Um6\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"ch4-Dh-rc6\" secondAttribute=\"trailing\" id=\"bIU-eX-6a7\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"h5f-nu-Doz\" secondAttribute=\"trailing\" id=\"iNL-kr-zlK\"/>\n                            <constraint firstItem=\"ch4-Dh-rc6\" firstAttribute=\"leading\" secondItem=\"zhe-8b-S4r\" secondAttribute=\"leading\" id=\"u1K-Fr-jm0\"/>\n                        </constraints>\n                    </view>\n                    <navigationItem key=\"navigationItem\" title=\"FSPagerView\" id=\"QMU-sT-Kbv\"/>\n                    <connections>\n                        <outlet property=\"pageControl\" destination=\"h5f-nu-Doz\" id=\"u5x-u0-UQk\"/>\n                        <outlet property=\"pagerView\" destination=\"ch4-Dh-rc6\" id=\"uVl-Rj-GWx\"/>\n                        <outlet property=\"tableView\" destination=\"226-3E-RRx\" id=\"iIv-Hz-eae\"/>\n                    </connections>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"Pvu-FJ-vJz\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"270\" y=\"-615\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.h",
    "content": "//\n//  BasicExampleViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface BasicExampleViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.m",
    "content": "//\n//  BasicExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import \"BasicExampleViewController.h\"\n#import \"FSPagerViewExample_Objc-Swift.h\"\n#import \"FSPagerViewObjcCompat.h\"\n\n@interface BasicExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>\n\n@property (strong, nonatomic) NSArray<NSString *> *sectionTitles;\n@property (strong, nonatomic) NSArray<NSString *> *configurationTitles;\n@property (strong, nonatomic) NSArray<NSString *> *decelerationDistanceOptions;\n@property (strong, nonatomic) NSArray<NSString *> *imageNames;\n@property (assign, nonatomic) NSInteger numberOfItems;\n\n@property (weak  , nonatomic) IBOutlet UITableView *tableView;\n@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;\n@property (weak  , nonatomic) IBOutlet FSPageControl *pageControl;\n\n- (IBAction)sliderValueChanged:(UISlider *)sender;\n\n@end\n\n@implementation BasicExampleViewController\n\n#pragma mark - Life cycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    \n    self.sectionTitles = @[@\"Configurations\", @\"Deceleration Distance\", @\"Item Size\", @\"Interitem Spacing\", @\"Number Of Items\"];\n    self.configurationTitles = @[@\"Automatic sliding\", @\"Infinite\"];\n    self.decelerationDistanceOptions = @[@\"Automatic\", @\"1\", @\"2\"];\n    self.imageNames = @[@\"1.jpg\", @\"2.jpg\", @\"3.jpg\", @\"4.jpg\", @\"5.jpg\", @\"6.jpg\", @\"7.jpg\"];\n    self.numberOfItems = 7;\n    \n    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@\"cell\"];\n    self.pagerView.itemSize = FSPagerViewAutomaticSize;\n    self.pageControl.numberOfPages = self.imageNames.count;\n    self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;\n    self.pageControl.contentInsets = UIEdgeInsetsMake(0, 20, 0, 20);\n    \n}\n\n#pragma mark - UITableViewDataSource\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return self.sectionTitles.count;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    switch (section) {\n        case 0:\n            return self.configurationTitles.count;\n        case 1:\n            return self.decelerationDistanceOptions.count;\n        case 2:\n        case 3:\n        case 4:\n            return 1;\n        default:\n            break;\n    }\n    return 0;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    switch (indexPath.section) {\n        case 0: {\n            // Configurations\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n            cell.textLabel.text = self.configurationTitles[indexPath.row];\n            if (indexPath.row == 0) {\n                // Automatic Sliding\n                cell.accessoryType = self.pagerView.automaticSlidingInterval > 0 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            } else if (indexPath.row == 1) {\n                // IsInfinite\n                cell.accessoryType = self.pagerView.isInfinite ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            }\n            return cell;\n        }\n        case 1: {\n            // Decelaration Distance\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n            cell.textLabel.text = self.decelerationDistanceOptions[indexPath.row];\n            switch (indexPath.row) {\n                case 0:\n                    // Hardcode like '-1' is bad for readability, but there haven't been a better solution to export a swift constant to objective-c yet.\n                    cell.accessoryType = self.pagerView.decelerationDistance == FSPagerViewAutomaticDistance ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n                    break;\n                case 1:\n                    cell.accessoryType = self.pagerView.decelerationDistance == 1 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n                    break;\n                case 2:\n                    cell.accessoryType = self.pagerView.decelerationDistance == 2 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n                    break;\n                default:\n                    break;\n            }\n            return cell;\n        }\n        case 2: {\n            // Item Spacing\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"slider_cell\"];\n            UISlider *slider = cell.contentView.subviews.firstObject;\n            slider.tag = 1;\n            slider.value = ({\n                CGFloat scale = self.pagerView.itemSize.width/self.pagerView.frame.size.width;\n                CGFloat value = (0.5-scale)*2;\n                value;\n            });\n            slider.continuous = YES;\n            return cell;\n        }\n        case 3: {\n            // Interitem Spacing\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"slider_cell\"];\n            UISlider *slider = cell.contentView.subviews.firstObject;\n            slider.tag = 2;\n            slider.value = self.pagerView.interitemSpacing / 20.0;\n            slider.continuous = YES;\n            return cell;\n        }\n        case 4: {\n            // Number Of Items\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"slider_cell\"];\n            UISlider *slider = cell.contentView.subviews.firstObject;\n            slider.tag = 3;\n            slider.value = self.numberOfItems / 7.0;\n            slider.minimumValue = 1.0 / 7;\n            slider.maximumValue = 1.0;\n            slider.continuous = NO;\n            return cell;\n        }\n        default:\n            break;\n    }\n    return [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n}\n\n#pragma mark - UITableViewDelegate\n\n- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    return indexPath.section == 0 || indexPath.section == 1;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    [tableView deselectRowAtIndexPath:indexPath animated:YES];\n    switch (indexPath.section) {\n        case 0: {\n            if (indexPath.row == 0) {\n                // Automatic Sliding\n                self.pagerView.automaticSlidingInterval = 3.0 - self.pagerView.automaticSlidingInterval;\n            } else if (indexPath.row == 1) {\n                // IsInfinite\n                self.pagerView.isInfinite = !self.pagerView.isInfinite;\n            }\n            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];\n            break;\n        }\n        case 1: {\n            switch (indexPath.row) {\n                case 0:\n                    self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;\n                    break;\n                case 1:\n                    self.pagerView.decelerationDistance = 1;\n                    break;\n                case 2:\n                    self.pagerView.decelerationDistance = 2;\n                    break;\n                default:\n                    break;\n            }\n            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];\n            break;\n        }\n        default:\n            break;\n    }\n}\n\n- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section\n{\n    return self.sectionTitles[section];\n}\n\n- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section\n{\n    return section == 0 ? 40 : 20;\n}\n\n#pragma mark - FSPagerViewDataSource\n\n- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView\n{\n    return self.numberOfItems;\n}\n\n- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index\n{\n    FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@\"cell\" atIndex:index];\n    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];\n    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;\n    cell.imageView.clipsToBounds = YES;\n    cell.textLabel.text = [NSString stringWithFormat:@\"%@%@\",@(index),@(index)];\n    return cell;\n}\n\n#pragma mark - FSPagerView Delegate\n\n- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index\n{\n    [pagerView deselectItemAtIndex:index animated:YES];\n    [pagerView scrollToItemAtIndex:index animated:YES];\n}\n\n- (void)pagerViewWillEndDragging:(FSPagerView *)pagerView targetIndex:(NSInteger)targetIndex\n{\n    self.pageControl.currentPage = targetIndex;\n}\n\n- (void)pagerViewDidEndScrollAnimation:(FSPagerView *)pagerView\n{\n    self.pageControl.currentPage = pagerView.currentIndex;\n}\n\n#pragma mark - Target actions\n\n- (void)sliderValueChanged:(UISlider *)sender\n{\n    switch (sender.tag) {\n        case 1: {\n            CGFloat scale = 0.5 * (1 + sender.value); // [0.5 - 1.0]\n            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, CGAffineTransformMakeScale(scale, scale));\n            break;\n        }\n        case 2: {\n            self.pagerView.interitemSpacing = sender.value * 20; // [0 - 20]\n            break;\n        }\n        case 3: {\n            self.numberOfItems = roundf(sender.value * 7);\n            self.pageControl.numberOfPages = self.numberOfItems;\n            [self.pagerView reloadData];\n            break;\n        }\n        default:\n            break;\n    }\n}\n\n@end\n\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/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>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\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.h",
    "content": "//\n//  PageControlExampleViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 20/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface PageControlExampleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.m",
    "content": "//\n//  PageControlExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 20/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import \"PageControlExampleViewController.h\"\n#import \"FSPagerViewExample_Objc-Swift.h\"\n#import \"FSPagerViewObjcCompat.h\"\n\n@interface PageControlExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>\n\n@property (strong, nonatomic) NSArray<NSString *> *imageNames;\n@property (strong, nonatomic) NSArray<NSString *> *pageControlStyles;\n@property (strong, nonatomic) NSArray<NSString *> *pageControlAlignments;\n@property (strong, nonatomic) NSArray<NSString *> *sectionTitles;\n\n@property (weak  , nonatomic) IBOutlet UITableView *tableView;\n@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;\n@property (weak  , nonatomic) IBOutlet FSPageControl *pageControl;\n\n@property (assign, nonatomic) NSInteger styleIndex;\n@property (assign, nonatomic) NSInteger alignmentIndex;\n\n// ⭐️\n@property (readonly, nonatomic) UIBezierPath *starPath;\n// ❤️\n@property (readonly, nonatomic) UIBezierPath *heartPath;\n\n- (IBAction)sliderValueChanged:(UISlider *)sender;\n\n@end\n\n@implementation PageControlExampleViewController\n\n#pragma mark - Life cycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    self.imageNames = @[@\"1.jpg\", @\"2.jpg\", @\"3.jpg\", @\"4.jpg\", @\"5.jpg\", @\"6.jpg\", @\"7.jpg\"];\n    self.pageControlStyles = @[@\"Default\", @\"Ring\", @\"UIImage\", @\"UIBezierPath - Star\", @\"UIBezierPath - Heart\"];\n    self.pageControlAlignments = @[@\"Right\", @\"Center\", @\"Left\"];\n    self.sectionTitles = @[@\"Style\", @\"Item Spacing\", @\"Interitem Spacing\", @\"Horizontal Alignment\"];\n    \n    self.pageControl.numberOfPages = self.imageNames.count;\n    self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;\n    self.pageControl.contentInsets = UIEdgeInsetsMake(0, 20, 0, 20);\n    \n    self.pagerView.itemSize = FSPagerViewAutomaticSize; // Fill parent\n    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@\"cell\"];\n}\n\n#pragma mark - UITableViewDataSource\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return self.sectionTitles.count;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    switch (section) {\n        case 0:\n            return self.pageControlStyles.count;\n        case 1:\n        case 2:\n            return 1;\n        case 3:\n            return self.pageControlAlignments.count;\n        default:\n            break;\n    }\n    return 0;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    switch (indexPath.section) {\n        case 0: {\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n            cell.textLabel.text = self.pageControlStyles[indexPath.row];\n            cell.accessoryType = self.styleIndex==indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            return cell;\n        }\n        case 1: {\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"slider_cell\"];\n            UISlider *slider = cell.contentView.subviews.firstObject;\n            slider.tag = indexPath.section;\n            slider.value = (self.pageControl.itemSpacing-6.0)/10.0;\n            return cell;\n        }\n        case 2: {\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"slider_cell\"];\n            UISlider *slider = cell.contentView.subviews.firstObject;\n            slider.tag = indexPath.section;\n            slider.value = (self.pageControl.interitemSpacing-6.0)/10.0;\n            return cell;\n        }\n        case 3: {\n            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n            cell.textLabel.text = self.pageControlAlignments[indexPath.row];\n            cell.accessoryType = self.alignmentIndex==indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n            return cell;\n        }\n        default:\n            break;\n    }\n    return [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n}\n\n#pragma mark - UITableViewDelegate\n\n- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section\n{\n    return self.sectionTitles[section];\n}\n\n- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    return indexPath.section == 0 || indexPath.section == 3;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    [tableView deselectRowAtIndexPath:indexPath animated:YES];\n    switch (indexPath.section) {\n        case 0: {\n            self.styleIndex = indexPath.row;\n            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];\n            break;\n        }\n        case 3: {\n            self.alignmentIndex = indexPath.row;\n            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];\n            break;\n        }\n            \n        default:\n            break;\n    }\n}\n\n#pragma mark - FSPagerViewDataSource\n\n- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView\n{\n    return self.imageNames.count;\n}\n\n- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index\n{\n    FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@\"cell\" atIndex:index];\n    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;\n    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];\n    return cell;\n}\n\n#pragma mark - FSPagerViewDelegate\n\n- (void)pagerViewWillEndDragging:(FSPagerView *)pagerView targetIndex:(NSInteger)targetIndex\n{\n    self.pageControl.currentPage = targetIndex;\n}\n\n#pragma mark - Target actions\n\n- (void)sliderValueChanged:(UISlider *)sender\n{\n    switch (sender.tag) {\n        case 1: {\n            self.pageControl.itemSpacing = 6.0 + sender.value*10.0; // [6 - 16]\n            // Redraw UIBezierPath\n            if (self.styleIndex == 3 || self.styleIndex == 4) {\n                self.styleIndex = self.styleIndex;\n            }\n            break;\n        }\n        case 2: {\n            self.pageControl.interitemSpacing = 6.0 + sender.value*10.0; // [6 - 16]\n            break;\n        }\n        default:\n            break;\n    }\n}\n\n#pragma mark - Private properties\n\n- (void)setStyleIndex:(NSInteger)styleIndex\n{\n    _styleIndex = styleIndex;\n    // Clean up\n    [self.pageControl setStrokeColor:nil forState:UIControlStateNormal];\n    [self.pageControl setStrokeColor:nil forState:UIControlStateSelected];\n    [self.pageControl setFillColor:nil forState:UIControlStateNormal];\n    [self.pageControl setFillColor:nil forState:UIControlStateSelected];\n    [self.pageControl setImage:nil forState:UIControlStateNormal];\n    [self.pageControl setImage:nil forState:UIControlStateSelected];\n    [self.pageControl setPath:nil forState:UIControlStateNormal];\n    [self.pageControl setPath:nil forState:UIControlStateSelected];\n    switch (styleIndex) {\n        case 0: {\n            // Default\n            break;\n        }\n        case 1: {\n            // Ring\n            [self.pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateNormal];\n            [self.pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateSelected];\n            [self.pageControl setFillColor:[UIColor greenColor] forState:UIControlStateSelected];\n            break;\n        }\n        case 2: {\n            // UIImage\n            [self.pageControl setImage:[UIImage imageNamed:@\"icon_footprint\"] forState:UIControlStateNormal];\n            [self.pageControl setImage:[UIImage imageNamed:@\"icon_cat\"] forState:UIControlStateSelected];\n            break;\n        }\n        case 3: {\n            // UIBezierPath - Star\n            [self.pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateNormal];\n            [self.pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateSelected];\n            [self.pageControl setFillColor:[UIColor yellowColor] forState:UIControlStateSelected];\n            [self.pageControl setPath:self.starPath forState:UIControlStateNormal];\n            [self.pageControl setPath:self.starPath forState:UIControlStateSelected];\n            break;\n        }\n        case 4: {\n            // UIBezierPath - Heart\n            UIColor *color = [UIColor colorWithRed:255/255.0 green:102/255.0 blue:255/255.0 alpha:1.0];\n            [self.pageControl setStrokeColor:color forState:UIControlStateNormal];\n            [self.pageControl setStrokeColor:color forState:UIControlStateSelected];\n            [self.pageControl setFillColor:color forState:UIControlStateSelected];\n            [self.pageControl setPath:self.heartPath forState:UIControlStateNormal];\n            [self.pageControl setPath:self.heartPath forState:UIControlStateSelected];\n            break;\n        }\n        default:\n            break;\n    }\n    \n}\n\n- (void)setAlignmentIndex:(NSInteger)alignmentIndex\n{\n    _alignmentIndex = alignmentIndex;\n    switch (alignmentIndex) {\n        case 0: {\n            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;\n            break;\n        }\n        case 1: {\n            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;\n            break;\n        }\n        case 2: {\n            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;\n            break;\n        }\n        default:\n            break;\n    }\n}\n\n// ⭐️\n- (UIBezierPath *)starPath\n{\n    CGFloat width = self.pageControl.itemSpacing;\n    CGFloat height = self.pageControl.itemSpacing;\n    UIBezierPath *starPath = [[UIBezierPath alloc] init];\n    [starPath moveToPoint:CGPointMake(width*0.5, 0)];\n    [starPath addLineToPoint:CGPointMake(width*0.677, height*0.257)];\n    [starPath addLineToPoint:CGPointMake(width*0.975, height*0.345)];\n    [starPath addLineToPoint:CGPointMake(width*0.785, height*0.593)];\n    [starPath addLineToPoint:CGPointMake(width*0.794, height*0.905)];\n    [starPath addLineToPoint:CGPointMake(width*0.5, height*0.8)];\n    [starPath addLineToPoint:CGPointMake(width*0.206, height*0.905)];\n    [starPath addLineToPoint:CGPointMake(width*0.215, height*0.593)];\n    [starPath addLineToPoint:CGPointMake(width*0.025, height*0.345)];\n    [starPath addLineToPoint:CGPointMake(width*0.323, height*0.257)];\n    [starPath closePath];\n    return starPath;\n}\n\n// ❤️\n- (UIBezierPath *)heartPath\n{\n    CGFloat width = self.pageControl.itemSpacing;\n    CGFloat height = self.pageControl.itemSpacing;\n    UIBezierPath *heartPath = [[UIBezierPath alloc] init];\n    [heartPath moveToPoint:CGPointMake(width*0.5, height)];\n    [heartPath addCurveToPoint:CGPointMake(0, height*0.25)\n                 controlPoint1:CGPointMake(width*0.5, height*0.75)\n                 controlPoint2:CGPointMake(0, height*0.5)];\n    [heartPath addArcWithCenter:CGPointMake(width*0.25, height*0.25)\n                         radius:width*0.25\n                     startAngle:M_PI\n                       endAngle:0\n                      clockwise:YES];\n    [heartPath addArcWithCenter:CGPointMake(width*0.75, height*0.25)\n                         radius:width*0.25\n                     startAngle:M_PI\n                       endAngle:0\n                      clockwise:YES];\n    [heartPath addCurveToPoint:CGPointMake(width*0.5, height)\n                 controlPoint1:CGPointMake(width, height*0.5)\n                 controlPoint2:CGPointMake(width*0.5, height*0.75)];\n    [heartPath closePath];\n    return heartPath;\n}\n\n\n@end\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.h",
    "content": "//\n//  ViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface TransformerExampleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.m",
    "content": "//\n//  TransformerExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import \"TransformerExampleViewController.h\"\n#import \"FSPagerViewExample_Objc-Swift.h\"\n#import \"FSPagerViewObjcCompat.h\"\n\n@interface TransformerExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>\n\n@property (strong, nonatomic) NSArray<NSString *> *imageNames;\n@property (strong, nonatomic) NSArray<NSString *> *transformerNames;\n@property (assign, nonatomic) NSInteger typeIndex;\n\n@property (weak  , nonatomic) IBOutlet UITableView *tableView;\n@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;\n\n@end\n\n@implementation TransformerExampleViewController\n\n#pragma mark - Life cycle\n\n- (void)viewDidLoad\n{\n    [super viewDidLoad];\n    self.imageNames = @[@\"1.jpg\", @\"2.jpg\", @\"3.jpg\", @\"4.jpg\", @\"5.jpg\", @\"6.jpg\", @\"7.jpg\"];\n    self.transformerNames = @[@\"cross fading\", @\"zoom out\", @\"depth\", @\"linear\", @\"overlap\", @\"ferris wheel\", @\"inverted ferris wheel\", @\"coverflow\", @\"cubic\"];\n    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@\"cell\"];\n    self.pagerView.isInfinite = YES;\n    self.typeIndex = 0;\n}\n\n- (void)viewDidLayoutSubviews\n{\n    [super viewDidLayoutSubviews];\n    self.typeIndex = self.typeIndex;\n}\n\n#pragma mark - UITableViewDataSource\n\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView\n{\n    return 1;\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return self.transformerNames.count;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cell\"];\n    cell.textLabel.text = self.transformerNames[indexPath.row];\n    cell.accessoryType = indexPath.row == self.typeIndex ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;\n    return cell;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    [tableView deselectRowAtIndexPath:indexPath animated:YES];\n    self.typeIndex = indexPath.row;\n    [tableView reloadRowsAtIndexPaths:tableView.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationAutomatic];\n}\n\n- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section\n{\n    return @\"Transformers\";\n}\n\n#pragma mark - FSPagerViewDataSource\n\n- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView\n{\n    return self.imageNames.count;\n}\n\n- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index\n{\n    FSPagerViewCell * cell = [pagerView dequeueReusableCellWithReuseIdentifier:@\"cell\" atIndex:index];\n    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];\n    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;\n    cell.imageView.clipsToBounds = YES;\n    return cell;\n}\n\n#pragma mark - FSPagerViewDelegate\n\n- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index\n{\n    [pagerView deselectItemAtIndex:index animated:YES];\n    [pagerView scrollToItemAtIndex:index animated:YES];\n}\n\n#pragma mark - Private properties\n\n- (void)setTypeIndex:(NSInteger)typeIndex\n{\n    _typeIndex = typeIndex;\n    FSPagerViewTransformerType type;\n    switch (typeIndex) {\n        case 0: {\n            type = FSPagerViewTransformerTypeCrossFading;\n            break;\n        }\n        case 1: {\n            type = FSPagerViewTransformerTypeZoomOut;\n            break;\n        }\n        case 2: {\n            type = FSPagerViewTransformerTypeDepth;\n            break;\n        }\n        case 3: {\n            type = FSPagerViewTransformerTypeLinear;\n            break;\n        }\n        case 4: {\n            type = FSPagerViewTransformerTypeOverlap;\n            break;\n        }\n        case 5: {\n            type = FSPagerViewTransformerTypeFerrisWheel;\n            break;\n        }\n        case 6: {\n            type = FSPagerViewTransformerTypeInvertedFerrisWheel;\n            break;\n        }\n        case 7: {\n            type = FSPagerViewTransformerTypeCoverFlow;\n            break;\n        }\n        case 8: {\n            type = FSPagerViewTransformerTypeCubic;\n            break;\n        }\n        default:\n            type = FSPagerViewTransformerTypeZoomOut;\n            break;\n    }\n    self.pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:type];\n    switch (type) {\n        case FSPagerViewTransformerTypeCrossFading:\n        case FSPagerViewTransformerTypeZoomOut:\n        case FSPagerViewTransformerTypeDepth: {\n            self.pagerView.itemSize = FSPagerViewAutomaticSize;\n            self.pagerView.decelerationDistance = 1;\n            break;\n        }\n        case FSPagerViewTransformerTypeLinear:\n        case FSPagerViewTransformerTypeOverlap: {\n            CGAffineTransform transform = CGAffineTransformMakeScale(0.6, 0.75);\n            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, transform);\n            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;\n            break;\n        }\n        case FSPagerViewTransformerTypeFerrisWheel:\n        case FSPagerViewTransformerTypeInvertedFerrisWheel: {\n            self.pagerView.itemSize = CGSizeMake(180, 140);\n            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;\n            break;\n        }\n        case FSPagerViewTransformerTypeCoverFlow: {\n            self.pagerView.itemSize = CGSizeMake(220, 170);\n            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;\n            break;\n        }\n        case FSPagerViewTransformerTypeCubic: {\n            CGAffineTransform transform = CGAffineTransformMakeScale(0.9, 0.9);\n            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, transform);\n            self.pagerView.decelerationDistance = 1;\n            break;\n        }\n        default:\n            break;\n    }\n}\n\n@end\n\n\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/main.m",
    "content": "//\n//  main.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc.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\tF908BC411E35AAE4002B2F51 /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC321E35AAE4002B2F51 /* 1.jpg */; };\n\t\tF908BC491E35AAE4002B2F51 /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3A1E35AAE4002B2F51 /* 2.jpg */; };\n\t\tF908BC4A1E35AAE4002B2F51 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3B1E35AAE4002B2F51 /* 3.jpg */; };\n\t\tF908BC4B1E35AAE4002B2F51 /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3C1E35AAE4002B2F51 /* 4.jpg */; };\n\t\tF908BC4C1E35AAE4002B2F51 /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3D1E35AAE4002B2F51 /* 5.jpg */; };\n\t\tF908BC4D1E35AAE4002B2F51 /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3E1E35AAE4002B2F51 /* 6.jpg */; };\n\t\tF908BC4E1E35AAE4002B2F51 /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3F1E35AAE4002B2F51 /* 7.jpg */; };\n\t\tF931E00A2158A1E4001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E0092158A1E4001B2A01 /* FSPagerViewObjcCompat.m */; };\n\t\tF93F5E141E319AE8006B7082 /* PageControlExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F93F5E131E319AE8006B7082 /* PageControlExampleViewController.m */; };\n\t\tF9580B641E5D997200C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B5E1E5D997200C5B267 /* FSPageControl.swift */; };\n\t\tF9580B651E5D997200C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B5F1E5D997200C5B267 /* FSPagerCollectionView.swift */; };\n\t\tF9580B661E5D997200C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B601E5D997200C5B267 /* FSPagerView.swift */; };\n\t\tF9580B671E5D997200C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B611E5D997200C5B267 /* FSPagerViewCell.swift */; };\n\t\tF9580B681E5D997200C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B621E5D997200C5B267 /* FSPageViewLayout.swift */; };\n\t\tF9580B691E5D997200C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B631E5D997200C5B267 /* FSPageViewTransformer.swift */; };\n\t\tF9C6944C1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6944B1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift */; };\n\t\tF9DF961D1E7F5B240010506C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9DF961C1E7F5B240010506C /* Assets.xcassets */; };\n\t\tF9EC371E1E304A830022B6D6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC371D1E304A830022B6D6 /* main.m */; };\n\t\tF9EC37211E304A830022B6D6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC37201E304A830022B6D6 /* AppDelegate.m */; };\n\t\tF9EC37241E304A830022B6D6 /* BasicExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC37231E304A830022B6D6 /* BasicExampleViewController.m */; };\n\t\tF9EC37271E304A830022B6D6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9EC37251E304A830022B6D6 /* Main.storyboard */; };\n\t\tF9EC372C1E304A830022B6D6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9EC372A1E304A830022B6D6 /* LaunchScreen.storyboard */; };\n\t\tF9F00A901E310FF600790735 /* TransformerExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9F00A8F1E310FF600790735 /* TransformerExampleViewController.m */; };\n\t\tF9FF349F1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */; };\n\t\tF9FF34A01E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tF9C6944E1E40C6C1007084B6 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = F9EC37111E304A830022B6D6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = F9EC37181E304A830022B6D6;\n\t\t\tremoteInfo = \"FSPagerViewExample-Objc\";\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t50989DFD2151DB25004DBB4A /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = \"<group>\"; };\n\t\tF908BC321E35AAE4002B2F51 /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3A1E35AAE4002B2F51 /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3B1E35AAE4002B2F51 /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3C1E35AAE4002B2F51 /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3D1E35AAE4002B2F51 /* 5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 5.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3E1E35AAE4002B2F51 /* 6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6.jpg; sourceTree = \"<group>\"; };\n\t\tF908BC3F1E35AAE4002B2F51 /* 7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7.jpg; sourceTree = \"<group>\"; };\n\t\tF931E0092158A1E4001B2A01 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = \"<group>\"; };\n\t\tF93F5E121E319AE8006B7082 /* PageControlExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageControlExampleViewController.h; sourceTree = \"<group>\"; };\n\t\tF93F5E131E319AE8006B7082 /* PageControlExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PageControlExampleViewController.m; sourceTree = \"<group>\"; };\n\t\tF9580B5E1E5D997200C5B267 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = \"<group>\"; };\n\t\tF9580B5F1E5D997200C5B267 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B601E5D997200C5B267 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = \"<group>\"; };\n\t\tF9580B611E5D997200C5B267 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = \"<group>\"; };\n\t\tF9580B621E5D997200C5B267 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = \"<group>\"; };\n\t\tF9580B631E5D997200C5B267 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = \"<group>\"; };\n\t\tF9C694491E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = \"FSPagerViewExample-ObjcUITests.xctest\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9C6944B1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSPagerViewExample_ObjcUITests.swift; sourceTree = \"<group>\"; };\n\t\tF9C6944D1E40C6C1007084B6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9DF961C1E7F5B240010506C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tF9EC37191E304A830022B6D6 /* FSPagerViewExample-Objc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = \"FSPagerViewExample-Objc.app\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF9EC371D1E304A830022B6D6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tF9EC371F1E304A830022B6D6 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tF9EC37201E304A830022B6D6 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tF9EC37221E304A830022B6D6 /* BasicExampleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BasicExampleViewController.h; sourceTree = \"<group>\"; };\n\t\tF9EC37231E304A830022B6D6 /* BasicExampleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BasicExampleViewController.m; sourceTree = \"<group>\"; };\n\t\tF9EC37261E304A830022B6D6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tF9EC372B1E304A830022B6D6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tF9EC372D1E304A830022B6D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tF9F00A8E1E310FF600790735 /* TransformerExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformerExampleViewController.h; sourceTree = \"<group>\"; };\n\t\tF9F00A8F1E310FF600790735 /* TransformerExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TransformerExampleViewController.m; sourceTree = \"<group>\"; };\n\t\tF9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tF9C694461E40C6C1007084B6 /* 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\tF9EC37161E304A830022B6D6 /* 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\tF908BC311E35AAE4002B2F51 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9DF961C1E7F5B240010506C /* Assets.xcassets */,\n\t\t\t\tF908BC321E35AAE4002B2F51 /* 1.jpg */,\n\t\t\t\tF908BC3A1E35AAE4002B2F51 /* 2.jpg */,\n\t\t\t\tF908BC3B1E35AAE4002B2F51 /* 3.jpg */,\n\t\t\t\tF908BC3C1E35AAE4002B2F51 /* 4.jpg */,\n\t\t\t\tF908BC3D1E35AAE4002B2F51 /* 5.jpg */,\n\t\t\t\tF908BC3E1E35AAE4002B2F51 /* 6.jpg */,\n\t\t\t\tF908BC3F1E35AAE4002B2F51 /* 7.jpg */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tpath = ../../Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9580B5D1E5D997200C5B267 /* Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B5E1E5D997200C5B267 /* FSPageControl.swift */,\n\t\t\t\tF9580B5F1E5D997200C5B267 /* FSPagerCollectionView.swift */,\n\t\t\t\tF9580B601E5D997200C5B267 /* FSPagerView.swift */,\n\t\t\t\tF9580B611E5D997200C5B267 /* FSPagerViewCell.swift */,\n\t\t\t\tF9580B621E5D997200C5B267 /* FSPageViewLayout.swift */,\n\t\t\t\tF9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */,\n\t\t\t\tF9580B631E5D997200C5B267 /* FSPageViewTransformer.swift */,\n\t\t\t\t50989DFD2151DB25004DBB4A /* FSPagerViewObjcCompat.h */,\n\t\t\t\tF931E0092158A1E4001B2A01 /* FSPagerViewObjcCompat.m */,\n\t\t\t);\n\t\t\tname = Sources;\n\t\t\tpath = ../Sources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C6944A1E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9C6944B1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift */,\n\t\t\t\tF9C6944D1E40C6C1007084B6 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"FSPagerViewExample-ObjcUITests\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C870F71E30FF8B005786E9 /* Basic Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC37221E304A830022B6D6 /* BasicExampleViewController.h */,\n\t\t\t\tF9EC37231E304A830022B6D6 /* BasicExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"Basic Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C870F81E30FFA0005786E9 /* Transformer Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9F00A8E1E310FF600790735 /* TransformerExampleViewController.h */,\n\t\t\t\tF9F00A8F1E310FF600790735 /* TransformerExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"Transformer Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9C870F91E30FFAB005786E9 /* PageControl Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF93F5E121E319AE8006B7082 /* PageControlExampleViewController.h */,\n\t\t\t\tF93F5E131E319AE8006B7082 /* PageControlExampleViewController.m */,\n\t\t\t);\n\t\t\tname = \"PageControl Example\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9EC37101E304A830022B6D6 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9580B5D1E5D997200C5B267 /* Sources */,\n\t\t\t\tF9EC371B1E304A830022B6D6 /* FSPagerViewExample-Objc */,\n\t\t\t\tF9C6944A1E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests */,\n\t\t\t\tF9EC371A1E304A830022B6D6 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9EC371A1E304A830022B6D6 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC37191E304A830022B6D6 /* FSPagerViewExample-Objc.app */,\n\t\t\t\tF9C694491E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9EC371B1E304A830022B6D6 /* FSPagerViewExample-Objc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC371F1E304A830022B6D6 /* AppDelegate.h */,\n\t\t\t\tF9EC37201E304A830022B6D6 /* AppDelegate.m */,\n\t\t\t\tF9C870F71E30FF8B005786E9 /* Basic Example */,\n\t\t\t\tF9C870F81E30FFA0005786E9 /* Transformer Example */,\n\t\t\t\tF9C870F91E30FFAB005786E9 /* PageControl Example */,\n\t\t\t\tF9EC37251E304A830022B6D6 /* Main.storyboard */,\n\t\t\t\tF9EC372A1E304A830022B6D6 /* LaunchScreen.storyboard */,\n\t\t\t\tF9EC372D1E304A830022B6D6 /* Info.plist */,\n\t\t\t\tF908BC311E35AAE4002B2F51 /* Resources */,\n\t\t\t\tF9EC371C1E304A830022B6D6 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = \"FSPagerViewExample-Objc\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9EC371C1E304A830022B6D6 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC371D1E304A830022B6D6 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tF9C694481E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9C694501E40C6C1007084B6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExample-ObjcUITests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9C694451E40C6C1007084B6 /* Sources */,\n\t\t\t\tF9C694461E40C6C1007084B6 /* Frameworks */,\n\t\t\t\tF9C694471E40C6C1007084B6 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tF9C6944F1E40C6C1007084B6 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"FSPagerViewExample-ObjcUITests\";\n\t\t\tproductName = \"FSPagerViewExample-ObjcUITests\";\n\t\t\tproductReference = F9C694491E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.ui-testing\";\n\t\t};\n\t\tF9EC37181E304A830022B6D6 /* FSPagerViewExample-Objc */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = F9EC37301E304A830022B6D6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExample-Objc\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9EC37151E304A830022B6D6 /* Sources */,\n\t\t\t\tF9EC37161E304A830022B6D6 /* Frameworks */,\n\t\t\t\tF9EC37171E304A830022B6D6 /* 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 = \"FSPagerViewExample-Objc\";\n\t\t\tproductName = \"FSPageSliderExample-Objc\";\n\t\t\tproductReference = F9EC37191E304A830022B6D6 /* FSPagerViewExample-Objc.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tF9EC37111E304A830022B6D6 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0820;\n\t\t\t\tLastUpgradeCheck = 1030;\n\t\t\t\tORGANIZATIONNAME = \"Wenchao Ding\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tF9C694481E40C6C1007084B6 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t\tTestTargetID = F9EC37181E304A830022B6D6;\n\t\t\t\t\t};\n\t\t\t\t\tF9EC37181E304A830022B6D6 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 8.2.1;\n\t\t\t\t\t\tDevelopmentTeam = HZF422TY46;\n\t\t\t\t\t\tLastSwiftMigration = 0900;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = F9EC37141E304A830022B6D6 /* Build configuration list for PBXProject \"FSPagerViewExample-Objc\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = en;\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 = F9EC37101E304A830022B6D6;\n\t\t\tproductRefGroup = F9EC371A1E304A830022B6D6 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tF9EC37181E304A830022B6D6 /* FSPagerViewExample-Objc */,\n\t\t\t\tF9C694481E40C6C1007084B6 /* FSPagerViewExample-ObjcUITests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tF9C694471E40C6C1007084B6 /* 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\tF9EC37171E304A830022B6D6 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF908BC4A1E35AAE4002B2F51 /* 3.jpg in Resources */,\n\t\t\t\tF908BC4C1E35AAE4002B2F51 /* 5.jpg in Resources */,\n\t\t\t\tF9EC372C1E304A830022B6D6 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tF908BC491E35AAE4002B2F51 /* 2.jpg in Resources */,\n\t\t\t\tF9DF961D1E7F5B240010506C /* Assets.xcassets in Resources */,\n\t\t\t\tF908BC4B1E35AAE4002B2F51 /* 4.jpg in Resources */,\n\t\t\t\tF908BC4E1E35AAE4002B2F51 /* 7.jpg in Resources */,\n\t\t\t\tF908BC4D1E35AAE4002B2F51 /* 6.jpg in Resources */,\n\t\t\t\tF908BC411E35AAE4002B2F51 /* 1.jpg in Resources */,\n\t\t\t\tF9EC37271E304A830022B6D6 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tF9C694451E40C6C1007084B6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9FF34A01E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */,\n\t\t\t\tF9C6944C1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tF9EC37151E304A830022B6D6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF9EC37241E304A830022B6D6 /* BasicExampleViewController.m in Sources */,\n\t\t\t\tF9580B641E5D997200C5B267 /* FSPageControl.swift in Sources */,\n\t\t\t\tF9580B681E5D997200C5B267 /* FSPageViewLayout.swift in Sources */,\n\t\t\t\tF9EC37211E304A830022B6D6 /* AppDelegate.m in Sources */,\n\t\t\t\tF9FF349F1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */,\n\t\t\t\tF9580B651E5D997200C5B267 /* FSPagerCollectionView.swift in Sources */,\n\t\t\t\tF9580B691E5D997200C5B267 /* FSPageViewTransformer.swift in Sources */,\n\t\t\t\tF9F00A901E310FF600790735 /* TransformerExampleViewController.m in Sources */,\n\t\t\t\tF9580B671E5D997200C5B267 /* FSPagerViewCell.swift in Sources */,\n\t\t\t\tF93F5E141E319AE8006B7082 /* PageControlExampleViewController.m in Sources */,\n\t\t\t\tF9EC371E1E304A830022B6D6 /* main.m in Sources */,\n\t\t\t\tF9580B661E5D997200C5B267 /* FSPagerView.swift in Sources */,\n\t\t\t\tF931E00A2158A1E4001B2A01 /* FSPagerViewObjcCompat.m 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\tF9C6944F1E40C6C1007084B6 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = F9EC37181E304A830022B6D6 /* FSPagerViewExample-Objc */;\n\t\t\ttargetProxy = F9C6944E1E40C6C1007084B6 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tF9EC37251E304A830022B6D6 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC37261E304A830022B6D6 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF9EC372A1E304A830022B6D6 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tF9EC372B1E304A830022B6D6 /* 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\tF9C694511E40C6C1007084B6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"FSPagerViewExample-ObjcUITests/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wenchaod.FSPagerViewExample-ObjcUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_TARGET_NAME = \"FSPagerViewExample-Objc\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9C694521E40C6C1007084B6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"FSPagerViewExample-ObjcUITests/Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 10.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wenchaod.FSPagerViewExample-ObjcUITests\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTEST_TARGET_NAME = \"FSPagerViewExample-Objc\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF9EC372E1E304A830022B6D6 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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 = 8.0;\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_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9EC372F1E304A830022B6D6 /* 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_LOCALIZABILITY_NONLOCALIZED = YES;\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_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\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_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\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 = 8.0;\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\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tF9EC37311E304A830022B6D6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSPagerViewExample-Objc/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wenchaod.FSPagerView-Objc\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tF9EC37321E304A830022B6D6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tDEVELOPMENT_TEAM = HZF422TY46;\n\t\t\t\tINFOPLIST_FILE = \"$(SRCROOT)/FSPagerViewExample-Objc/Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.wenchaod.FSPagerView-Objc\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_SWIFT3_OBJC_INFERENCE = Default;\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tF9C694501E40C6C1007084B6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExample-ObjcUITests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9C694511E40C6C1007084B6 /* Debug */,\n\t\t\t\tF9C694521E40C6C1007084B6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9EC37141E304A830022B6D6 /* Build configuration list for PBXProject \"FSPagerViewExample-Objc\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9EC372E1E304A830022B6D6 /* Debug */,\n\t\t\t\tF9EC372F1E304A830022B6D6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tF9EC37301E304A830022B6D6 /* Build configuration list for PBXNativeTarget \"FSPagerViewExample-Objc\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tF9EC37311E304A830022B6D6 /* Debug */,\n\t\t\t\tF9EC37321E304A830022B6D6 /* 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 = F9EC37111E304A830022B6D6 /* Project object */;\n}\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/wenchaoding/Developer/Xcode/FSPageSlider/FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-ObjcUITests/FSPagerViewExample_ObjcUITests.swift",
    "content": "//\n//  FSPagerViewExample_ObjcUITests.swift\n//  FSPagerViewExample-ObjcUITests\n//\n//  Created by Wenchao Ding on 31/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport XCTest\n\nclass FSPagerViewExample_ObjcUITests: 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": "FSPagerViewExample-Objc/FSPagerViewExample-ObjcUITests/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>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "FSPagerViewExamples.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:FSPageViewExample-Swift/FSPagerViewExample.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:FSPagerView/FSPagerView.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2017 FSPagerView (https://github.com/WenchaoD/FSPagerView)\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\nall copies 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\nTHE SOFTWARE.\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: \"FSPagerView\",\n    platforms: [\n        .iOS(.v12)\n    ],\n    products: [\n        .library(name: \"FSPagerView\", targets: [\"FSPagerView\"]),\n    ],\n    targets: [\n        .target(name: \"FSPagerView\", path: \"Sources\", exclude: [\"FSPagerViewObjcCompat.h\", \"FSPagerViewObjcCompat.m\"]),\n    ],\n    swiftLanguageVersions: [.v5]\n)\n"
  },
  {
    "path": "README-OBJECTIVE-C.md",
    "content": "![fspagerview](https://cloud.githubusercontent.com/assets/5186464/24086370/45e7e8dc-0d49-11e7-86aa-139354fe00c5.jpg)\n\n[![Languages](https://img.shields.io/badge/language-swift%204.2%20|%20objc-FF69B4.svg?style=plastic)](#) <br/>\n[![Platform](https://img.shields.io/badge/platform-iOS%20|%20tvOS-blue.svg?style=plastic)](http://cocoadocs.org/docsets/FSPagerView) \n[![Version](https://img.shields.io/cocoapods/v/FSPagerView.svg?style=flat)](http://cocoadocs.org/docsets/FSPagerView)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=plastic)](https://github.com/Carthage/Carthage)\n[![SPM compatible](https://img.shields.io/badge/SPM-compatible-FF9966.svg?style=plastic)](https://swift.org/package-manager/)\n\n|[<b>SWIFT</b>](https://github.com/WenchaoD/FSPagerView/blob/master/README.md)|<b>OBJECTIVE-C</b>|\n|---|---|\n\n**FSPagerView** is an elegant Screen Slide Library implemented primarily with ***UICollectionView***. It is extremely helpful for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.\n\n## Features\n*  ***Infinite*** scrolling.\n*  ***Automatic*** Sliding.\n*  Support ***Horizontal*** and ***Vertical*** paging.\n*  Fully customizable item, with predefined banner-style item.\n*  Fully customizable ***page control***.\n*  Rich build-in 3D transformers.\n*  ***Simple*** and ***Delightful*** api usage.\n*  Support **SWIFT** and **OBJECTIVE-C**.\n\n## Demo1 Banner\n\n| Banner |\n|---|\n|![9](https://cloud.githubusercontent.com/assets/5186464/22688057/9003d880-ed65-11e6-882e-4587c97c8878.gif) |\n\n### automaticSlidingInterval\nThe time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0.\n\n**e.g.**\n\n```objc\npagerView.automaticSlidingInterval = 3.0;\n```\n\n\n### isInfinite\nA boolean value indicates whether the pager view has infinite number of items. Default is false.\n\n**e.g.**\n\n```objc\npagerView.isInfinite = YES;\n```\n\n### decelerationDistance\nAn unsigned integer value that determines the paging distance of the pager view, which indicates the number of passing items during the deceleration. When the value of this property is FSPagerViewAutomaticDistance, the actual 'distance' is automatically calculated according to the scrolling speed of the pager view. Default is 1.\n\n**e.g.**\n\n```objc\npagerView.decelerationDistance = 2\n```\n\n### itemSize\nThe item size of the pager view. When the value of this property is FSPagerViewAutomaticSize, the items fill the entire visible area of the pager view. Default is FSPagerViewAutomaticSize.\n\n\n**e.g.**\n\n```objc\npagerView.itemSize = CGSizeMake(200, 180);\n```\n\n### interitemSpacing\nThe spacing to use between items in the pager view. Default is 0.\n\n**e.g.**\n\n```objc\npagerView.interitemSpacing = 10;\n```\n\n## Demo2 - Transformers\n\n|Cross Fading|\n|---|\n| ![1](https://cloud.githubusercontent.com/assets/5186464/22686429/1983b97e-ed5f-11e6-9a32-44c1830df7ac.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCrossFading];\n```\n---\n\n\n\n|Zoom Out|\n|---|\n| ![2](https://cloud.githubusercontent.com/assets/5186464/22686426/19830862-ed5f-11e6-90be-8fb1319cd125.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeZoomOut];\n```\n---\n\n\n|Depth|\n|---|\n| ![3](https://cloud.githubusercontent.com/assets/5186464/22686430/19856c1a-ed5f-11e6-8187-9e4395b7597c.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeDepth];\n```\n---\n\n\n|Linear|\n|---|\n| ![4](https://cloud.githubusercontent.com/assets/5186464/22686428/198368c0-ed5f-11e6-95df-cfcfe9bc3f29.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeLinear];\n```\n---\n\n\n|Overlap|\n|---|\n| ![5](https://cloud.githubusercontent.com/assets/5186464/22686431/198905aa-ed5f-11e6-9312-ec371c8c4e44.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeOverlap];\n```\n---\n\n\n|Ferris Wheel|\n|------|\n| ![6](https://cloud.githubusercontent.com/assets/5186464/22686427/19831c08-ed5f-11e6-8bdb-30e762a85d4b.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeFerrisWheel];\n```\n---\n\n\n|Inverted Ferris Wheel|\n|------|\n| ![7](https://cloud.githubusercontent.com/assets/5186464/22686433/19b669a0-ed5f-11e6-8bf0-dc23edf8101f.gif) |\n\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeInvertedFerrisWheel];\n```\n---\n\n\n|Cover Flow|\n|------|\n| ![8](https://cloud.githubusercontent.com/assets/5186464/22686432/19b567f8-ed5f-11e6-885d-bd660c98b507.gif) |\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCoverFlow];\n```\n---\n\n|Cubic|\n|------|\n| ![9](https://cloud.githubusercontent.com/assets/5186464/23461598/8875080c-fec5-11e6-8db6-6d8864acfcc1.gif) |\n```objc\npagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:FSPagerViewTransformerTypeCubic];\n```\n---\n\n\n> Customize your own transformer by subclassing`FSPagerViewTransformer.`\n\n\n## Demo3 Page Control\n|Page Control|\n|---|\n|![10](https://cloud.githubusercontent.com/assets/5186464/22689720/2baabdb0-ed6d-11e6-8287-ef7a2c0f64bc.gif)\n|\n\n### numberOfPages\nThe number of page indicators of the page control. Default is 0.\n\n**e.g.**\n\n```objc\npageControl.numberOfPages = 5;\n```\n\n### currentPage\nThe current page, highlighted by the page control. Default is 0.\n\n**e.g.**\n\n```objc\npageControl.currentPage = 1;\n```\n### contentHorizontalAlignment\nThe horizontal alignment of content within the control’s bounds. Default is center.\n\n**e.g.**\n\n```objc\npageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;\n```\n\n### setStrokeColor:forState:\nSets the stroke color for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```objc\n[pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateNormal];\n[pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateSelected];\n```\n\n\n### setFillColor:forState:\nSets the fill color for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```objc\n[pageControl setFillColor:[UIColor grayColor] forState:UIControlStateNormal];\n[pageControl setFillColor:[UIColor whiteColor] forState:UIControlStateSelected];\n```\n\n### setImage:forState:\nSets the image for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```objc\n[pageControl setImage:[UIImage imageNamed:@\"image1\"] forState:UIControlStateNormal];\n[pageControl setImage:[UIImage imageNamed:@\"image2\"] forState:UIControlStateSelected];\n```\n\n### setPath:forState:\nSets the path for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```objc\n[pageControl setPath:[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 8, 8)] forState:UIControlStateNormal];\n[pageControl setPath: [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 8, 8)]  forState:UIControlStateSelected];\n```\n\n## Installation\n* Manually\n* Cocoapods\n* Carthage\n\n### Manually\n1. ***[Download](#)*** the source code.\n2. Extract the zip file, simply drag folder ***Sources*** into your project.\n3. Make sure ***Copy items if needed*** is checked.\n\n### Cocoapods\n```ruby\nuse_frameworks!\ntarget '<Your Target Name>' do\n    pod 'FSPagerView'\nend\n```\n\n### Carthage\n```ruby\ngithub \"WenchaoD/FSPagerView\"\n```\n\n## Tutorial\n* [Getting started](#getting_started)\n* [Implement FSPagerViewDataSource](#implement_fspagerviewdatasource)\n* [Implement FSPagerViewDelegate](#implement_fspagerviewdelegate)\n\n### 1. Getting started <a id='getting_started'></a>\n\n* Getting started with code\n\n```objc\n// Create a pager view\nFSPagerView *pagerView = [[FSPagerView alloc] initWithFrame:frame1];\npagerView.dataSource = self;\npagerView.delegate = self;\n[pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@\"cell\"];\n[self.view addSubview:pagerView];\n// Create a page control\nFSPageControl *pageControl = [[FSPageControl alloc] initWithFrame:frame2];\n[self.view addSubview:pageControl];\n```\n\n* Getting started with Interface Builder <br/>\n1、Simply drag **UIView** instance into your View Controller, Change the `Custom Class` to `FSPagerView`. (Or `FSPageControl`) <br/>\n2、Link the `dataSource` and `delegate` property of **FSPagerView** to your View Controller. <br/>\n3、Register a cell class.\n\n```objc\n- (void)viewDidLoad \n{\n\t[super viewDidLoad];\n\t[self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@\"cell\"];\n}\n```\n\n\n### 2. Implement FSPagerViewDataSource <a id='implement_fspagerviewdatasource'></a>\n```objc\n- (NSInteger)numberOfItemsInpagerView:(FSPagerView *)pagerView\n{\n    return numberOfItems;\n}\n    \n- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index\n{\n    FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@\"cell\" atIndex:index];\n    cell.imageView.image = ...;\n    cell.textLabel.text = ...;\n    return cell;\n}\n```\n\n### 3. Implement FSPagerViewDelegate <a id='implement_fspagerviewdelegate'></a>\n\n```objc\n- (BOOL)pagerView:(FSPagerView *)pagerView shouldHighlightItemAtIndex:(NSInteger)index;\n```\n> Asks the delegate if the item should be highlighted during tracking.\n\n---\n\n```objc\n- (void)pagerView:(FSPagerView *)pagerView didHighlightItemAtIndex:(NSInteger)index;\n```\n> Tells the delegate that the item at the specified index was highlighted.\n    \n---\n    \n```objc\n- (BOOL)pagerView:(FSPagerView *)pagerView shouldSelectItemAtIndex:(NSInteger)index;\n```\n> Asks the delegate if the specified item should be selected.\n    \n---\n    \n```objc\n- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index;\n```\n> Tells the delegate that the item at the specified index was selected.\n    \n---\n    \n```objc\n- (void)pagerView:(FSPagerView *)pagerView willDisplayCell:(FSPagerViewCell *)cell forItemAtIndex:(NSInteger)index;\n```\n> Tells the delegate that the specified cell is about to be displayed in the pager view.\n    \n---\n    \n```objc\n- (void)pagerView:(FSPagerView *)pagerView didEndDisplayingCell:(FSPagerViewCell *)cell forItemAtIndex:(NSInteger)index;\n```\n> Tells the delegate that the specified cell was removed from the pager view.\n    \n---\n    \n```objc\n- (void)pagerViewWillBeginDragging:(FSPagerView *)pagerView;\n```\n> Tells the delegate when the pager view is about to start scrolling the content.\n    \n---\n    \n```objc\n- (void)pagerViewWillEndDragging:(FSPagerView *) pagerView targetIndex:(NSInteger)index:\n```\n> Tells the delegate when the user finishes scrolling the content.\n    \n---\n    \n```objc\n- (void)pagerViewDidScroll:(FSPagerView *)pagerView;\n```\n> Tells the delegate when the user scrolls the content view within the receiver.\n    \n---\n    \n```objc\n- (void)pagerViewDidEndScrollAnimation:(FSPagerView *)pagerView;\n```\n> Tells the delegate when a scrolling animation in the pager view concludes.\n    \n---\n    \n```objc\n- (void)pagerViewDidEndDecelerating:(FSPagerView *)pagerView;\n```\n> Tells the delegate that the pager view has ended decelerating the scrolling movement.\n\n---\n\n## <a id=\"support\"></a>Support this repo\n* ***Star*** this repo <a href=\"#\"><img style=\"margin-bottom:-12px\" width=\"72\" alt=\"star\" src=\"https://cloud.githubusercontent.com/assets/5186464/15383105/fcf9cdf0-1dc2-11e6-88db-bf221042a584.png\"></a>\n<br/>\n\n* Buy me a ***Coffee***. ☕️ \n   \n   <a href=\"https://www.paypal.me/WenchaoD\" target=\"_blank\"><img src=\"https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg\" width=\"100\" height=\"40\" style=\"margin-bottom:-15px;\"></a> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t<a href=\"https://user-images.githubusercontent.com/5186464/45949944-46960480-c030-11e8-9e90-30b015698cf6.png\" target=\"_blank\"><img src=\"http://a1.mzstatic.com/us/r30/Purple49/v4/50/16/b3/5016b341-39c1-b47b-2994-d7e23823baed/icon175x175.png\" width=\"40\" height=\"40\" style=\"margin-bottom:-15px;-webkit-border-radius:10px;border:1px solid rgba(30, 154, 236, 1);\"></a> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t<a href=\"https://cloud.githubusercontent.com/assets/5186464/15096872/b06f3a3a-153c-11e6-89f9-2e9c7b88ef42.png\" target=\"_blank\"><img src=\"http://a4.mzstatic.com/us/r30/Purple49/v4/23/31/14/233114f8-2e8d-7b63-8dc5-85d29893061e/icon175x175.jpeg\" height=\"40\" width=\"40\" style=\"margin-bottom:-15px; -webkit-border-radius: 10px;border:1px solid rgba(43, 177, 0, 1)\"></a>\n\n--- \n\t\n## Author\n* ***微博：[@WenchaoD](http://weibo.com/WenchaoD)***\n* ***Twitter: [@WenchaoD](https://twitter.com/WenchaoD)***\n* Other repos:\n\t* ***[FSCalendar](https://github.com/WenchaoD/FSCalendar)*** \n\n---\n\n# [Documentation](http://cocoadocs.org/docsets/FSPagerView)"
  },
  {
    "path": "README.md",
    "content": "![fspagerview](https://cloud.githubusercontent.com/assets/5186464/24086370/45e7e8dc-0d49-11e7-86aa-139354fe00c5.jpg)\n\n[![Languages](https://img.shields.io/badge/language-swift%205.0%20|%20objc-FF69B4.svg?style=plastic)](#) <br/>\n[![Platform](https://img.shields.io/badge/platform-iOS%20|%20tvOS-blue.svg?style=plastic)](http://cocoadocs.org/docsets/FSPagerView)\n[![Version](https://img.shields.io/cocoapods/v/FSPagerView.svg?style=plastic)](http://cocoadocs.org/docsets/FSPagerView) \n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=plastic)](https://github.com/Carthage/Carthage)\n[![SPM compatible](https://img.shields.io/badge/SPM-compatible-FF9966.svg?style=plastic)](https://swift.org/package-manager/)\n\n|<b>SWIFT</b>|[<b>OBJECTIVE-C</b>](https://github.com/WenchaoD/FSPagerView/blob/master/README-OBJECTIVE-C.md) |\n|---|---|\n\n**FSPagerView** is an elegant Screen Slide Library implemented primarily with ***UICollectionView***. It is extremely helpful for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.\n\n## Features\n*  ***Infinite*** scrolling.\n*  ***Automatic*** Sliding.\n*  ***Horizontal*** and ***Vertical*** paging.\n*  Fully customizable item, with predefined banner-style item.\n*  Fully customizable ***page control***.\n*  Rich build-in 3D transformers.\n*  ***Simple*** and ***Delightful*** api usage.\n*  Support **SWIFT** and **OBJECTIVE-C**.\n\n## Demos\n* [Demo1 - Banner](#banner)\n* [Demo2 - Transformer](#transformer)\n* [Demo3 - Page Control](#page_control)\n\n### Demo1 - Banner <a id=\"banner\"></a>\n\n| Banner |\n|---|\n|![9](https://cloud.githubusercontent.com/assets/5186464/22688057/9003d880-ed65-11e6-882e-4587c97c8878.gif) |\n\n### automaticSlidingInterval\nThe time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0.\n\n**e.g.**\n\n```swift\npagerView.automaticSlidingInterval = 3.0\n```\n\n\n### isInfinite\nA boolean value indicates whether the pager view has infinite number of items. Default is false.\n\n**e.g.**\n\n```swift\npagerView.isInfinite = true\n```\n\n### decelerationDistance\nAn unsigned integer value that determines the paging distance of the pager view, which indicates the number of passing items during the deceleration. When the value of this property is FSPagerView.automaticDistance, the actual 'distance' is automatically calculated according to the scrolling speed of the pager view. Default is 1.\n\n**e.g.**\n\n```swift\npagerView.decelerationDistance = 2\n```\n\n### itemSize\nThe item size of the pager view. When the value of this property is FSPagerView.automaticSize, the items fill the entire visible area of the pager view. Default is FSPagerView.automaticSize.\n\n**e.g.**\n\n```swift\npagerView.itemSize = CGSize(width: 200, height: 180)\n```\n\n### interitemSpacing\nThe spacing to use between items in the pager view. Default is 0.\n\n**e.g.**\n\n```swift\npagerView.interitemSpacing = 10\n```\n\n## Demo2 - Transformers\n\n|Cross Fading|\n|---|\n| ![1](https://cloud.githubusercontent.com/assets/5186464/22686429/1983b97e-ed5f-11e6-9a32-44c1830df7ac.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .crossFading)\n```\n---\n\n\n\n|Zoom Out|\n|---|\n| ![2](https://cloud.githubusercontent.com/assets/5186464/22686426/19830862-ed5f-11e6-90be-8fb1319cd125.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .zoomOut)\n```\n---\n\n\n|Depth|\n|---|\n| ![3](https://cloud.githubusercontent.com/assets/5186464/22686430/19856c1a-ed5f-11e6-8187-9e4395b7597c.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .depth)\n```\n---\n\n\n|Linear|\n|---|\n| ![4](https://cloud.githubusercontent.com/assets/5186464/22686428/198368c0-ed5f-11e6-95df-cfcfe9bc3f29.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .linear)\n```\n---\n\n\n|Overlap|\n|---|\n| ![5](https://cloud.githubusercontent.com/assets/5186464/22686431/198905aa-ed5f-11e6-9312-ec371c8c4e44.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .overlap)\n```\n---\n\n\n|Ferris Wheel|\n|------|\n| ![6](https://cloud.githubusercontent.com/assets/5186464/22686427/19831c08-ed5f-11e6-8bdb-30e762a85d4b.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .ferrisWheel)\n```\n---\n\n\n|Inverted Ferris Wheel|\n|------|\n| ![7](https://cloud.githubusercontent.com/assets/5186464/22686433/19b669a0-ed5f-11e6-8bf0-dc23edf8101f.gif) |\n\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .invertedFerrisWheel)\n```\n---\n\n\n|Cover Flow|\n|------|\n| ![8](https://cloud.githubusercontent.com/assets/5186464/22686432/19b567f8-ed5f-11e6-885d-bd660c98b507.gif) |\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .coverFlow)\n```\n---\n\n|Cubic|\n|------|\n| ![9](https://cloud.githubusercontent.com/assets/5186464/23461598/8875080c-fec5-11e6-8db6-6d8864acfcc1.gif) |\n```swift\npagerView.transformer = FSPagerViewTransformer(type: .cubic)\n```\n---\n\n\n\n> Customize your own transformer by subclassing`FSPagerViewTransformer.`\n\n\n## Demo3 Page Control\n|Page Control|\n|---|\n|![10](https://cloud.githubusercontent.com/assets/5186464/22689720/2baabdb0-ed6d-11e6-8287-ef7a2c0f64bc.gif)\n|\n\n### numberOfPages\nThe number of page indicators of the page control. Default is 0.\n\n**e.g.**\n\n```swift\npageControl.numberOfPages = 5\n```\n\n### currentPage\nThe current page, highlighted by the page control. Default is 0.\n\n**e.g.**\n\n```swift\npageControl.currentPage = 1\n```\n\n### contentHorizontalAlignment\nThe horizontal alignment of content within the control’s bounds. Default is center.\n\n**e.g.**\n```swift\npageControl.contentHorizontalAlignment = .right\n```\n\n### setStrokeColor:forState:\nSets the stroke color for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```swift\npageControl.setStrokeColor(.green, for: .normal)\npageControl.setStrokeColor(.yellow, for: .selected)\n```\n\n\n### setFillColor:forState:\nSets the fill color for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```swift\npageControl.setFillColor(.gray, for: .normal)\npageControl.setFillColor(.white, for: .selected)\n```\n\n### setImage:forState:\nSets the image for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```swift\npageControl.setImage(UIImage(named:\"image1\"), for: .normal)\npageControl.setImage(UIImage(named:\"image2\"), for: .selected)\n```\n\n### setPath:forState:\nSets the path for page indicators to use for the specified state. (selected/normal).\n\n**e.g.**\n\n```swift\npageControl.setPath(UIBezierPath(rect: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .normal)\npageControl.setPath(UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 8, height: 8)), for: .selected)\n```\n\n## Installation\n* Manually\n* Cocoapods\n* Carthage\n\n### Manually\n1. ***[Download](#)*** the source code.\n2. Extract the zip file, simply drag folder ***Sources*** into your project.\n3. Make sure ***Copy items if needed*** is checked.\n\n### Cocoapods\n```ruby\nuse_frameworks!\ntarget '<Your Target Name>' do\n    pod 'FSPagerView'\nend\n```\n\n### Carthage\n```ruby\ngithub \"WenchaoD/FSPagerView\"\n```\n\n## Tutorial\n* [Getting started](#getting_started)\n* [Implement FSPagerViewDataSource](#implement_fspagerviewdatasource)\n* [Implement FSPagerViewDelegate](#implement_fspagerviewdelegate)\n\n### 1. Getting started <a id='getting_started'></a>\n\n* Getting started with code\n\n```swift\n// Create a pager view\nlet pagerView = FSPagerView(frame: frame1)\npagerView.dataSource = self\npagerView.delegate = self\npagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\nself.view.addSubview(pagerView)\n// Create a page control\nlet pageControl = FSPageControl(frame: frame2)\nself.view.addSubview(pageControl)\n```\n\n* Getting started with Interface Builder <br/>\n1、Simply drag **UIView** instance into your View Controller, Change the `Custom Class` to `FSPagerView`. (Or `FSPageControl`) <br/>\n2、Link the `dataSource` and `delegate` property of **FSPagerView** to your View Controller. <br/>\n3、Register a cell class.\n\n```swift\n@IBOutlet weak var pagerView: FSPagerView! {\n    didSet {\n        self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: \"cell\")\n    }\n}\n```\n\n\n### 2. Implement FSPagerViewDataSource <a id='implement_fspagerviewdatasource'></a>\n```swift\npublic func numberOfItems(in pagerView: FSPagerView) -> Int {\n    return numberOfItems\n}\n    \npublic func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {\n    let cell = pagerView.dequeueReusableCell(withReuseIdentifier: \"cell\", at: index)\n    cell.imageView?.image = ...\n    cell.textLabel?.text = ...\n    return cell\n}\n```\n\n### 3. Implement FSPagerViewDelegate <a id='implement_fspagerviewdelegate'></a>\n\n```swift\nfunc pagerView(_ pagerView: FSPagerView, shouldHighlightItemAt index: Int) -> Bool\n```\n> Asks the delegate if the item should be highlighted during tracking.\n\n---\n\n```swift\nfunc pagerView(_ pagerView: FSPagerView, didHighlightItemAt index: Int)\n```\n> Tells the delegate that the item at the specified index was highlighted.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, shouldSelectItemAt index: Int) -> Bool\n```\n> Asks the delegate if the specified item should be selected.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int)\n```\n> Tells the delegate that the item at the specified index was selected.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int)\n```\n> Tells the delegate that the specified cell is about to be displayed in the pager view.\n    \n---\n    \n```swift\nfunc pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int)\n```\n> Tells the delegate that the specified cell was removed from the pager view.\n    \n---\n    \n```swift\nfunc pagerViewWillBeginDragging(_ pagerView: FSPagerView)\n```\n> Tells the delegate when the pager view is about to start scrolling the content.\n    \n---\n    \n```swift\nfunc pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int)\n```\n> Tells the delegate when the user finishes scrolling the content.\n    \n---\n    \n```swift\nfunc pagerViewDidScroll(_ pagerView: FSPagerView)\n```\n> Tells the delegate when the user scrolls the content view within the receiver.\n    \n---\n    \n```swift\nfunc pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView)\n```\n> Tells the delegate when a scrolling animation in the pager view concludes.\n    \n---\n    \n```swift\nfunc pagerViewDidEndDecelerating(_ pagerView: FSPagerView)\n```\n> Tells the delegate that the pager view has ended decelerating the scrolling movement.\n\n---\n\n## <a id=\"support\"></a>Support this repo\n* ***Star*** this repo <a href=\"#\"><img style=\"margin-bottom:-12px\" width=\"72\" alt=\"star\" src=\"https://cloud.githubusercontent.com/assets/5186464/15383105/fcf9cdf0-1dc2-11e6-88db-bf221042a584.png\"></a>\n<br/>\n\n* Buy me a Coffee. ☕️ \n   \n   <a href=\"https://www.paypal.me/WenchaoD\" target=\"_blank\"><img src=\"https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg\" width=\"100\" height=\"40\" style=\"margin-bottom:-15px;\"></a> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t<a href=\"https://user-images.githubusercontent.com/5186464/45949944-46960480-c030-11e8-9e90-30b015698cf6.png\" target=\"_blank\"><img src=\"http://a1.mzstatic.com/us/r30/Purple49/v4/50/16/b3/5016b341-39c1-b47b-2994-d7e23823baed/icon175x175.png\" width=\"40\" height=\"40\" style=\"margin-bottom:-15px;-webkit-border-radius:10px;border:1px solid rgba(30, 154, 236, 1);\"></a> &nbsp;&nbsp;|&nbsp;&nbsp;\n\t<a href=\"https://cloud.githubusercontent.com/assets/5186464/15096872/b06f3a3a-153c-11e6-89f9-2e9c7b88ef42.png\" target=\"_blank\"><img src=\"http://a4.mzstatic.com/us/r30/Purple49/v4/23/31/14/233114f8-2e8d-7b63-8dc5-85d29893061e/icon175x175.jpeg\" height=\"40\" width=\"40\" style=\"margin-bottom:-15px; -webkit-border-radius: 10px;border:1px solid rgba(43, 177, 0, 1)\"></a>\n\n--- \n\t\n\t\n## Author\n* ***微博：[@WenchaoD](http://weibo.com/WenchaoD)***\n* ***Twitter: [@WenchaoD](https://twitter.com/WenchaoD)***\n* Other repos: \n\t* [***FSCalendar***](https://github.com/WenchaoD)\n\n---\n\n# [Documentation](http://cocoadocs.org/docsets/FSPagerView)\n"
  },
  {
    "path": "Resources/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-40.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-60.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-Small@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-Small@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-20.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-41.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-Small.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-Small@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-42.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-40@2x-1.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-76.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-167.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"icon-1024.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"pre-rendered\" : true\n  }\n}"
  },
  {
    "path": "Resources/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Resources/Assets.xcassets/icon_cat.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_cat@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Resources/Assets.xcassets/icon_footprint.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon_footprint@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Sources/FSPageControl.swift",
    "content": "//\n//  FSPageControl.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\n@IBDesignable\nopen class FSPageControl: UIControl {\n    \n    /// The number of page indicators of the page control. Default is 0.\n    @IBInspectable\n    open var numberOfPages: Int = 0 {\n        didSet {\n            self.setNeedsCreateIndicators()\n        }\n    }\n    \n    /// The current page, highlighted by the page control. Default is 0.\n    @IBInspectable\n    open var currentPage: Int = 0 {\n        didSet {\n            self.setNeedsUpdateIndicators()\n        }\n    }\n    \n    /// The spacing to use of page indicators in the page control.\n    @IBInspectable\n    open var itemSpacing: CGFloat = 6 {\n        didSet {\n            self.setNeedsUpdateIndicators()\n        }\n    }\n    \n    /// The spacing to use between page indicators in the page control.\n    @IBInspectable\n    open var interitemSpacing: CGFloat = 6 {\n        didSet {\n            self.setNeedsLayout()\n        }\n    }\n    \n    /// The distance that the page indicators is inset from the enclosing page control.\n    @IBInspectable\n    open var contentInsets: UIEdgeInsets = .zero {\n        didSet {\n            self.setNeedsLayout()\n        }\n    }\n    \n    /// The horizontal alignment of content within the control’s bounds. Default is center.\n    open override var contentHorizontalAlignment: UIControl.ContentHorizontalAlignment {\n        didSet {\n            self.setNeedsLayout()\n        }\n    }\n    \n    /// Hide the indicator if there is only one page. default is NO\n    @IBInspectable\n    open var hidesForSinglePage: Bool = false {\n        didSet {\n            self.setNeedsUpdateIndicators()\n        }\n    }\n    \n    internal var strokeColors: [UIControl.State: UIColor] = [:]\n    internal var fillColors: [UIControl.State: UIColor] = [:]\n    internal var paths: [UIControl.State: UIBezierPath] = [:]\n    internal var images: [UIControl.State: UIImage] = [:]\n    internal var alphas: [UIControl.State: CGFloat] = [:]\n    internal var transforms: [UIControl.State: CGAffineTransform] = [:]\n    \n    fileprivate weak var contentView: UIView!\n    \n    fileprivate var needsUpdateIndicators = false\n    fileprivate var needsCreateIndicators = false\n    fileprivate var indicatorLayers = [CAShapeLayer]()\n    \n    public override init(frame: CGRect) {\n        super.init(frame: frame)\n        commonInit()\n    }\n    \n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        commonInit()\n    }\n    \n    open override func layoutSubviews() {\n        super.layoutSubviews()\n        self.contentView.frame = {\n            let x = self.contentInsets.left\n            let y = self.contentInsets.top\n            let width = self.frame.width - self.contentInsets.left - self.contentInsets.right\n            let height = self.frame.height - self.contentInsets.top - self.contentInsets.bottom\n            let frame = CGRect(x: x, y: y, width: width, height: height)\n            return frame\n        }()\n    }\n    \n    open override func layoutSublayers(of layer: CALayer) {\n        super.layoutSublayers(of: layer)\n        \n        let diameter = self.itemSpacing\n        let spacing = self.interitemSpacing\n        var x: CGFloat = {\n            switch self.contentHorizontalAlignment {\n            case .left, .leading:\n                return 0\n            case .center, .fill:\n                let midX = self.contentView.bounds.midX\n                let amplitude = CGFloat(self.numberOfPages/2) * diameter + spacing*CGFloat((self.numberOfPages-1)/2)\n                return midX - amplitude\n            case .right, .trailing:\n                let contentWidth = diameter*CGFloat(self.numberOfPages) + CGFloat(self.numberOfPages-1)*spacing\n                return contentView.frame.width - contentWidth\n            default:\n                return 0\n            }\n        }()\n        for (index,value) in self.indicatorLayers.enumerated() {\n            let state: UIControl.State = (index == self.currentPage) ? .selected : .normal\n            let image = self.images[state]\n            let size = image?.size ?? CGSize(width: diameter, height: diameter)\n            let origin = CGPoint(x: x - (size.width-diameter)*0.5, y: self.contentView.bounds.midY-size.height*0.5)\n            value.frame = CGRect(origin: origin, size: size)\n            x = x + spacing + diameter\n        }\n        \n    }\n    \n    /// Sets the stroke color for page indicators to use for the specified state. (selected/normal).\n    ///\n    /// - Parameters:\n    ///   - strokeColor: The stroke color to use for the specified state.\n    ///   - state: The state that uses the specified stroke color.\n    @objc(setStrokeColor:forState:)\n    open func setStrokeColor(_ strokeColor: UIColor?, for state: UIControl.State) {\n        guard self.strokeColors[state] != strokeColor else {\n            return\n        }\n        self.strokeColors[state] = strokeColor\n        self.setNeedsUpdateIndicators()\n    }\n    \n    /// Sets the fill color for page indicators to use for the specified state. (selected/normal).\n    ///\n    /// - Parameters:\n    ///   - fillColor: The fill color to use for the specified state.\n    ///   - state: The state that uses the specified fill color.\n    @objc(setFillColor:forState:)\n    open func setFillColor(_ fillColor: UIColor?, for state: UIControl.State) {\n        guard self.fillColors[state] != fillColor else {\n            return\n        }\n        self.fillColors[state] = fillColor\n        self.setNeedsUpdateIndicators()\n    }\n    \n    /// Sets the image for page indicators to use for the specified state. (selected/normal).\n    ///\n    /// - Parameters:\n    ///   - image: The image to use for the specified state.\n    ///   - state: The state that uses the specified image.\n    @objc(setImage:forState:)\n    open func setImage(_ image: UIImage?, for state: UIControl.State) {\n        guard self.images[state] != image else {\n            return\n        }\n        self.images[state] = image\n        self.setNeedsUpdateIndicators()\n    }\n    \n    @objc(setAlpha:forState:)\n    \n    /// Sets the alpha value for page indicators to use for the specified state. (selected/normal).\n    ///\n    /// - Parameters:\n    ///   - alpha: The alpha value to use for the specified state.\n    ///   - state: The state that uses the specified alpha.\n    open func setAlpha(_ alpha: CGFloat, for state: UIControl.State) {\n        guard self.alphas[state] != alpha else {\n            return\n        }\n        self.alphas[state] = alpha\n        self.setNeedsUpdateIndicators()\n    }\n    \n    /// Sets the path for page indicators to use for the specified state. (selected/normal).\n    ///\n    /// - Parameters:\n    ///   - path: The path to use for the specified state.\n    ///   - state: The state that uses the specified path.\n    @objc(setPath:forState:)\n    open func setPath(_ path: UIBezierPath?, for state: UIControl.State) {\n        guard self.paths[state] != path else {\n            return\n        }\n        self.paths[state] = path\n        self.setNeedsUpdateIndicators()\n    }\n    \n    // MARK: - Private functions\n    \n    fileprivate func commonInit() {\n        \n        // Content View\n        let view = UIView(frame: .zero)\n        view.backgroundColor = UIColor.clear\n        self.addSubview(view)\n        self.contentView = view\n        self.isUserInteractionEnabled = false\n        \n    }\n    \n    fileprivate func setNeedsUpdateIndicators() {\n        self.needsUpdateIndicators = true\n        self.setNeedsLayout()\n        DispatchQueue.main.async {\n            self.updateIndicatorsIfNecessary()\n        }\n    }\n    \n    fileprivate func updateIndicatorsIfNecessary() {\n        guard self.needsUpdateIndicators else {\n            return\n        }\n        guard self.indicatorLayers.count > 0 else {\n            return\n        }\n        self.needsUpdateIndicators = false\n        self.contentView.isHidden = self.hidesForSinglePage && self.numberOfPages <= 1\n        if !self.contentView.isHidden {\n            self.indicatorLayers.forEach { (layer) in\n                layer.isHidden = false\n                self.updateIndicatorAttributes(for: layer)\n            }\n        }\n    }\n    \n    fileprivate func updateIndicatorAttributes(for layer: CAShapeLayer) {\n        let index = self.indicatorLayers.firstIndex(of: layer)\n        let state: UIControl.State = index == self.currentPage ? .selected : .normal\n        if let image = self.images[state] {\n            layer.strokeColor = nil\n            layer.fillColor = nil\n            layer.path = nil\n            layer.contents = image.cgImage\n        } else {\n            layer.contents = nil\n            let strokeColor = self.strokeColors[state]\n            let fillColor = self.fillColors[state]\n            if strokeColor == nil && fillColor == nil {\n                layer.fillColor = (state == .selected ? UIColor.white : UIColor.gray).cgColor\n                layer.strokeColor = nil\n            } else {\n                layer.strokeColor = strokeColor?.cgColor\n                layer.fillColor = fillColor?.cgColor\n            }\n            layer.path = self.paths[state]?.cgPath ?? UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: self.itemSpacing, height: self.itemSpacing)).cgPath\n        }\n        if let transform = self.transforms[state] {\n            layer.transform = CATransform3DMakeAffineTransform(transform)\n        }\n        layer.opacity = Float(self.alphas[state] ?? 1.0)\n    }\n    \n    fileprivate func setNeedsCreateIndicators() {\n        self.needsCreateIndicators = true\n        DispatchQueue.main.async {\n            self.createIndicatorsIfNecessary()\n        }\n    }\n    \n    fileprivate func createIndicatorsIfNecessary() {\n        guard self.needsCreateIndicators else {\n            return\n        }\n        self.needsCreateIndicators = false\n        CATransaction.begin()\n        CATransaction.setDisableActions(true)\n        if self.currentPage >= self.numberOfPages {\n            self.currentPage = self.numberOfPages - 1\n        }\n        self.indicatorLayers.forEach { (layer) in\n            layer.removeFromSuperlayer()\n        }\n        self.indicatorLayers.removeAll()\n        for _ in 0..<self.numberOfPages {\n            let layer = CAShapeLayer()\n            layer.actions = [\"bounds\": NSNull()]\n            self.contentView.layer.addSublayer(layer)\n            self.indicatorLayers.append(layer)\n        }\n        self.setNeedsUpdateIndicators()\n        self.updateIndicatorsIfNecessary()\n        CATransaction.commit()\n    }\n    \n}\n\nextension UIControl.State: Hashable {\n    public var hashValue: Int {\n        return Int((6777*self.rawValue+3777)%UInt(UInt16.max))\n    }\n}\n\n"
  },
  {
    "path": "Sources/FSPageViewLayout.swift",
    "content": "//\n//  FSPagerViewLayout.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 20/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nclass FSPagerViewLayout: UICollectionViewLayout {\n    \n    internal var contentSize: CGSize = .zero\n    internal var leadingSpacing: CGFloat = 0\n    internal var itemSpacing: CGFloat = 0\n    internal var needsReprepare = true\n    internal var scrollDirection: FSPagerView.ScrollDirection = .horizontal\n    \n    open override class var layoutAttributesClass: AnyClass {\n        return FSPagerViewLayoutAttributes.self\n    }\n    \n    fileprivate var pagerView: FSPagerView? {\n        return self.collectionView?.superview?.superview as? FSPagerView\n    }\n    \n    fileprivate var collectionViewSize: CGSize = .zero\n    fileprivate var numberOfSections = 1\n    fileprivate var numberOfItems = 0\n    fileprivate var actualInteritemSpacing: CGFloat = 0\n    fileprivate var actualItemSize: CGSize = .zero\n    \n    override init() {\n        super.init()\n        self.commonInit()\n    }\n    \n    required public init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        self.commonInit()\n    }\n    \n    deinit {\n        #if !os(tvOS)\n        NotificationCenter.default.removeObserver(self, name: UIDevice.orientationDidChangeNotification, object: nil)\n        #endif\n    }\n    \n    override open func prepare() {\n        guard let collectionView = self.collectionView, let pagerView = self.pagerView else {\n            return\n        }\n        guard self.needsReprepare || self.collectionViewSize != collectionView.frame.size else {\n            return\n        }\n        self.needsReprepare = false\n        \n        self.collectionViewSize = collectionView.frame.size\n\n        // Calculate basic parameters/variables\n        self.numberOfSections = pagerView.numberOfSections(in: collectionView)\n        self.numberOfItems = pagerView.collectionView(collectionView, numberOfItemsInSection: 0)\n        self.actualItemSize = {\n            var size = pagerView.itemSize\n            if size == .zero {\n                size = collectionView.frame.size\n            }\n            return size\n        }()\n        \n        self.actualInteritemSpacing = {\n            if let transformer = pagerView.transformer {\n                return transformer.proposedInteritemSpacing()\n            }\n            return pagerView.interitemSpacing\n        }()\n        self.scrollDirection = pagerView.scrollDirection\n        self.leadingSpacing = self.scrollDirection == .horizontal ? (collectionView.frame.width-self.actualItemSize.width)*0.5 : (collectionView.frame.height-self.actualItemSize.height)*0.5\n        self.itemSpacing = (self.scrollDirection == .horizontal ? self.actualItemSize.width : self.actualItemSize.height) + self.actualInteritemSpacing\n        \n        // Calculate and cache contentSize, rather than calculating each time\n        self.contentSize = {\n            let numberOfItems = self.numberOfItems*self.numberOfSections\n            switch self.scrollDirection {\n                case .horizontal:\n                    var contentSizeWidth: CGFloat = self.leadingSpacing*2 // Leading & trailing spacing\n                    contentSizeWidth += CGFloat(numberOfItems-1)*self.actualInteritemSpacing // Interitem spacing\n                    contentSizeWidth += CGFloat(numberOfItems)*self.actualItemSize.width // Item sizes\n                    let contentSize = CGSize(width: contentSizeWidth, height: collectionView.frame.height)\n                    return contentSize\n                case .vertical:\n                    var contentSizeHeight: CGFloat = self.leadingSpacing*2 // Leading & trailing spacing\n                    contentSizeHeight += CGFloat(numberOfItems-1)*self.actualInteritemSpacing // Interitem spacing\n                    contentSizeHeight += CGFloat(numberOfItems)*self.actualItemSize.height // Item sizes\n                    let contentSize = CGSize(width: collectionView.frame.width, height: contentSizeHeight)\n                    return contentSize\n            }\n        }()\n        self.adjustCollectionViewBounds()\n    }\n    \n    override open var collectionViewContentSize: CGSize {\n        return self.contentSize\n    }\n    \n    override open func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {\n        return true\n    }\n    \n    override open func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {\n        var layoutAttributes = [UICollectionViewLayoutAttributes]()\n        guard self.itemSpacing > 0, !rect.isEmpty else {\n            return layoutAttributes\n        }\n        let rect = rect.intersection(CGRect(origin: .zero, size: self.contentSize))\n        guard !rect.isEmpty else {\n            return layoutAttributes\n        }\n        // Calculate start position and index of certain rects\n        let numberOfItemsBefore = self.scrollDirection == .horizontal ? max(Int((rect.minX-self.leadingSpacing)/self.itemSpacing),0) : max(Int((rect.minY-self.leadingSpacing)/self.itemSpacing),0)\n        let startPosition = self.leadingSpacing + CGFloat(numberOfItemsBefore)*self.itemSpacing\n        let startIndex = numberOfItemsBefore\n        // Create layout attributes\n        var itemIndex = startIndex\n        \n        var origin = startPosition\n        let maxPosition = self.scrollDirection == .horizontal ? min(rect.maxX,self.contentSize.width-self.actualItemSize.width-self.leadingSpacing) : min(rect.maxY,self.contentSize.height-self.actualItemSize.height-self.leadingSpacing)\n        // https://stackoverflow.com/a/10335601/2398107\n        while origin-maxPosition <= max(CGFloat(100.0) * .ulpOfOne * abs(origin+maxPosition), .leastNonzeroMagnitude) {\n            let indexPath = IndexPath(item: itemIndex%self.numberOfItems, section: itemIndex/self.numberOfItems)\n            let attributes = self.layoutAttributesForItem(at: indexPath) as! FSPagerViewLayoutAttributes\n            self.applyTransform(to: attributes, with: self.pagerView?.transformer)\n            layoutAttributes.append(attributes)\n            itemIndex += 1\n            origin += self.itemSpacing\n        }\n        return layoutAttributes\n        \n    }\n    \n    override open func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {\n        let attributes = FSPagerViewLayoutAttributes(forCellWith: indexPath)\n        attributes.indexPath = indexPath\n        let frame = self.frame(for: indexPath)\n        let center = CGPoint(x: frame.midX, y: frame.midY)\n        attributes.center = center\n        attributes.size = self.actualItemSize\n        return attributes\n    }\n    \n    override open func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {\n        guard let collectionView = self.collectionView, let pagerView = self.pagerView else {\n            return proposedContentOffset\n        }\n        var proposedContentOffset = proposedContentOffset\n        \n        func calculateTargetOffset(by proposedOffset: CGFloat, boundedOffset: CGFloat) -> CGFloat {\n            var targetOffset: CGFloat\n            if pagerView.decelerationDistance == FSPagerView.automaticDistance {\n                if abs(velocity.x) >= 0.3 {\n                    let vector: CGFloat = velocity.x >= 0 ? 1.0 : -1.0\n                    targetOffset = round(proposedOffset/self.itemSpacing+0.35*vector) * self.itemSpacing // Ceil by 0.15, rather than 0.5\n                } else {\n                    targetOffset = round(proposedOffset/self.itemSpacing) * self.itemSpacing\n                }\n            } else {\n                let extraDistance = max(pagerView.decelerationDistance-1, 0)\n                switch velocity.x {\n                case 0.3 ... CGFloat.greatestFiniteMagnitude:\n                    targetOffset = ceil(collectionView.contentOffset.x/self.itemSpacing+CGFloat(extraDistance)) * self.itemSpacing\n                case -CGFloat.greatestFiniteMagnitude ... -0.3:\n                    targetOffset = floor(collectionView.contentOffset.x/self.itemSpacing-CGFloat(extraDistance)) * self.itemSpacing\n                default:\n                    targetOffset = round(proposedOffset/self.itemSpacing) * self.itemSpacing\n                }\n            }\n            targetOffset = max(0, targetOffset)\n            targetOffset = min(boundedOffset, targetOffset)\n            return targetOffset\n        }\n        let proposedContentOffsetX: CGFloat = {\n            if self.scrollDirection == .vertical {\n                return proposedContentOffset.x\n            }\n            let boundedOffset = collectionView.contentSize.width-self.itemSpacing\n            return calculateTargetOffset(by: proposedContentOffset.x, boundedOffset: boundedOffset)\n        }()\n        let proposedContentOffsetY: CGFloat = {\n            if self.scrollDirection == .horizontal {\n                return proposedContentOffset.y\n            }\n            let boundedOffset = collectionView.contentSize.height-self.itemSpacing\n            return calculateTargetOffset(by: proposedContentOffset.y, boundedOffset: boundedOffset)\n        }()\n        proposedContentOffset = CGPoint(x: proposedContentOffsetX, y: proposedContentOffsetY)\n        return proposedContentOffset\n    }\n    \n    // MARK:- Internal functions\n    \n    internal func forceInvalidate() {\n        self.needsReprepare = true\n        self.invalidateLayout()\n    }\n    \n    internal func contentOffset(for indexPath: IndexPath) -> CGPoint {\n        let origin = self.frame(for: indexPath).origin\n        guard let collectionView = self.collectionView else {\n            return origin\n        }\n        let contentOffsetX: CGFloat = {\n            if self.scrollDirection == .vertical {\n                return 0\n            }\n            let contentOffsetX = origin.x - (collectionView.frame.width*0.5-self.actualItemSize.width*0.5)\n            return contentOffsetX\n        }()\n        let contentOffsetY: CGFloat = {\n            if self.scrollDirection == .horizontal {\n                return 0\n            }\n            let contentOffsetY = origin.y - (collectionView.frame.height*0.5-self.actualItemSize.height*0.5)\n            return contentOffsetY\n        }()\n        let contentOffset = CGPoint(x: contentOffsetX, y: contentOffsetY)\n        return contentOffset\n    }\n    \n    internal func frame(for indexPath: IndexPath) -> CGRect {\n        let numberOfItems = self.numberOfItems*indexPath.section + indexPath.item\n        let originX: CGFloat = {\n            if self.scrollDirection == .vertical {\n                return (self.collectionView!.frame.width-self.actualItemSize.width)*0.5\n            }\n            return self.leadingSpacing + CGFloat(numberOfItems)*self.itemSpacing\n        }()\n        let originY: CGFloat = {\n            if self.scrollDirection == .horizontal {\n                return (self.collectionView!.frame.height-self.actualItemSize.height)*0.5\n            }\n            return self.leadingSpacing + CGFloat(numberOfItems)*self.itemSpacing\n        }()\n        let origin = CGPoint(x: originX, y: originY)\n        let frame = CGRect(origin: origin, size: self.actualItemSize)\n        return frame\n    }\n    \n    // MARK:- Notification\n    @objc\n    fileprivate func didReceiveNotification(notification: Notification) {\n        if self.pagerView?.itemSize == .zero {\n            self.adjustCollectionViewBounds()\n        }\n    }\n    \n    // MARK:- Private functions\n    \n    fileprivate func commonInit() {\n        #if !os(tvOS)\n            NotificationCenter.default.addObserver(self, selector: #selector(didReceiveNotification(notification:)), name: UIDevice.orientationDidChangeNotification, object: nil)\n        #endif\n    }\n    \n    fileprivate func adjustCollectionViewBounds() {\n        guard let collectionView = self.collectionView, let pagerView = self.pagerView else {\n            return\n        }\n        let currentIndex = pagerView.currentIndex\n        let newIndexPath = IndexPath(item: currentIndex, section: pagerView.isInfinite ? self.numberOfSections/2 : 0)\n        let contentOffset = self.contentOffset(for: newIndexPath)\n        let newBounds = CGRect(origin: contentOffset, size: collectionView.frame.size)\n        collectionView.bounds = newBounds\n    }\n    \n    fileprivate func applyTransform(to attributes: FSPagerViewLayoutAttributes, with transformer: FSPagerViewTransformer?) {\n        guard let collectionView = self.collectionView else {\n            return\n        }\n        guard let transformer = transformer else {\n            return\n        }\n        switch self.scrollDirection {\n        case .horizontal:\n            let ruler = collectionView.bounds.midX\n            attributes.position = (attributes.center.x-ruler)/self.itemSpacing\n        case .vertical:\n            let ruler = collectionView.bounds.midY\n            attributes.position = (attributes.center.y-ruler)/self.itemSpacing\n        }\n        attributes.zIndex = Int(self.numberOfItems)-Int(attributes.position)\n        transformer.applyTransform(to: attributes)\n    }\n\n}\n\n\n"
  },
  {
    "path": "Sources/FSPageViewTransformer.swift",
    "content": "//\n//  FSPagerViewTransformer.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 05/01/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\n@objc\npublic enum FSPagerViewTransformerType: Int {\n    case crossFading\n    case zoomOut\n    case depth\n    case overlap\n    case linear\n    case coverFlow\n    case ferrisWheel\n    case invertedFerrisWheel\n    case cubic\n}\n\nopen class FSPagerViewTransformer: NSObject {\n    \n    open internal(set) weak var pagerView: FSPagerView?\n    open internal(set) var type: FSPagerViewTransformerType\n    \n    @objc open var minimumScale: CGFloat = 0.65\n    @objc open var minimumAlpha: CGFloat = 0.6\n    \n    @objc\n    public init(type: FSPagerViewTransformerType) {\n        self.type = type\n        switch type {\n        case .zoomOut:\n            self.minimumScale = 0.85\n        case .depth:\n            self.minimumScale = 0.5\n        default:\n            break\n        }\n    }\n    \n    // Apply transform to attributes - zIndex: Int, frame: CGRect, alpha: CGFloat, transform: CGAffineTransform or transform3D: CATransform3D.\n    open func applyTransform(to attributes: FSPagerViewLayoutAttributes) {\n        guard let pagerView = self.pagerView else {\n            return\n        }\n        let position = attributes.position\n        let scrollDirection = pagerView.scrollDirection\n        let itemSpacing = (scrollDirection == .horizontal ? attributes.bounds.width : attributes.bounds.height) + self.proposedInteritemSpacing()\n        switch self.type {\n        case .crossFading:\n            var zIndex = 0\n            var alpha: CGFloat = 0\n            var transform = CGAffineTransform.identity\n            switch scrollDirection {\n            case .horizontal:\n                transform.tx = -itemSpacing * position\n            case .vertical:\n                transform.ty = -itemSpacing * position\n            }\n            if (abs(position) < 1) { // [-1,1]\n                // Use the default slide transition when moving to the left page\n                alpha = 1 - abs(position)\n                zIndex = 1\n            } else { // (1,+Infinity]\n                // This page is way off-screen to the right.\n                alpha = 0\n                zIndex = Int.min\n            }\n            attributes.alpha = alpha\n            attributes.transform = transform\n            attributes.zIndex = zIndex\n        case .zoomOut:\n            var alpha: CGFloat = 0\n            var transform = CGAffineTransform.identity\n            switch position {\n            case -CGFloat.greatestFiniteMagnitude ..< -1 : // [-Infinity,-1)\n                // This page is way off-screen to the left.\n                alpha = 0\n            case -1 ... 1 :  // [-1,1]\n                // Modify the default slide transition to shrink the page as well\n                let scaleFactor = max(self.minimumScale, 1 - abs(position))\n                transform.a = scaleFactor\n                transform.d = scaleFactor\n                switch scrollDirection {\n                case .horizontal:\n                    let vertMargin = attributes.bounds.height * (1 - scaleFactor) / 2;\n                    let horzMargin = itemSpacing * (1 - scaleFactor) / 2;\n                    transform.tx = position < 0 ? (horzMargin - vertMargin*2) : (-horzMargin + vertMargin*2)\n                case .vertical:\n                    let horzMargin = attributes.bounds.width * (1 - scaleFactor) / 2;\n                    let vertMargin = itemSpacing * (1 - scaleFactor) / 2;\n                    transform.ty = position < 0 ? (vertMargin - horzMargin*2) : (-vertMargin + horzMargin*2)\n                }\n                // Fade the page relative to its size.\n                alpha = self.minimumAlpha + (scaleFactor-self.minimumScale)/(1-self.minimumScale)*(1-self.minimumAlpha)\n            case 1 ... CGFloat.greatestFiniteMagnitude :  // (1,+Infinity]\n                // This page is way off-screen to the right.\n                alpha = 0\n            default:\n                break\n            }\n            attributes.alpha = alpha\n            attributes.transform = transform\n        case .depth:\n            var transform = CGAffineTransform.identity\n            var zIndex = 0\n            var alpha: CGFloat = 0.0\n            switch position {\n            case -CGFloat.greatestFiniteMagnitude ..< -1: // [-Infinity,-1)\n                // This page is way off-screen to the left.\n                alpha = 0\n                zIndex = 0\n            case -1 ... 0:  // [-1,0]\n                // Use the default slide transition when moving to the left page\n                alpha = 1\n                transform.tx = 0\n                transform.a = 1\n                transform.d = 1\n                zIndex = 1\n            case 0 ..< 1: // (0,1)\n                // Fade the page out.\n                alpha = CGFloat(1.0) - position\n                // Counteract the default slide transition\n                switch scrollDirection {\n                case .horizontal:\n                    transform.tx = itemSpacing * -position\n                case .vertical:\n                    transform.ty = itemSpacing * -position\n                }\n                // Scale the page down (between minimumScale and 1)\n                let scaleFactor = self.minimumScale\n                    + (1.0 - self.minimumScale) * (1.0 - abs(position));\n                transform.a = scaleFactor\n                transform.d = scaleFactor\n                zIndex = 0\n            case 1 ... CGFloat.greatestFiniteMagnitude: // [1,+Infinity)\n                // This page is way off-screen to the right.\n                alpha = 0\n                zIndex = 0\n            default:\n                break\n            }\n            attributes.alpha = alpha\n            attributes.transform = transform\n            attributes.zIndex = zIndex\n        case .overlap,.linear:\n            guard scrollDirection == .horizontal else {\n                // This type doesn't support vertical mode\n                return\n            }\n            let scale = max(1 - (1-self.minimumScale) * abs(position), self.minimumScale)\n            let transform = CGAffineTransform(scaleX: scale, y: scale)\n            attributes.transform = transform\n            let alpha = (self.minimumAlpha + (1-abs(position))*(1-self.minimumAlpha))\n            attributes.alpha = alpha\n            let zIndex = (1-abs(position)) * 10\n            attributes.zIndex = Int(zIndex)\n        case .coverFlow:\n            guard scrollDirection == .horizontal else {\n                // This type doesn't support vertical mode\n                return\n            }\n            let position = min(max(-position,-1) ,1)\n            let rotation = sin(position*(.pi)*0.5)*(.pi)*0.25*1.5\n            let translationZ = -itemSpacing * 0.5 * abs(position)\n            var transform3D = CATransform3DIdentity\n            transform3D.m34 = -0.002\n            transform3D = CATransform3DRotate(transform3D, rotation, 0, 1, 0)\n            transform3D = CATransform3DTranslate(transform3D, 0, 0, translationZ)\n            attributes.zIndex = 100 - Int(abs(position))\n            attributes.transform3D = transform3D\n        case .ferrisWheel, .invertedFerrisWheel:\n            guard scrollDirection == .horizontal else {\n                // This type doesn't support vertical mode\n                return\n            }\n            // http://ronnqvi.st/translate-rotate-translate/\n            var zIndex = 0\n            var transform = CGAffineTransform.identity\n            switch position {\n            case -5 ... 5:\n                let itemSpacing = attributes.bounds.width+self.proposedInteritemSpacing()\n                let count: CGFloat = 14\n                let circle: CGFloat = .pi * 2.0\n                let radius = itemSpacing * count / circle\n                let ty = radius * (self.type == .ferrisWheel ? 1 : -1)\n                let theta = circle / count\n                let rotation = position * theta * (self.type == .ferrisWheel ? 1 : -1)\n                transform = transform.translatedBy(x: -position*itemSpacing, y: ty)\n                transform = transform.rotated(by: rotation)\n                transform = transform.translatedBy(x: 0, y: -ty)\n                zIndex = Int((4.0-abs(position)*10))\n            default:\n                break\n            }\n            attributes.alpha = abs(position) < 0.5 ? 1 : self.minimumAlpha\n            attributes.transform = transform\n            attributes.zIndex = zIndex\n        case .cubic:\n            switch position {\n            case -CGFloat.greatestFiniteMagnitude ... -1:\n                attributes.alpha = 0\n            case -1 ..< 1:\n                attributes.alpha = 1\n                attributes.zIndex = Int((1-position) * CGFloat(10))\n                let direction: CGFloat = position < 0 ? 1 : -1\n                let theta = position * .pi * 0.5 * (scrollDirection == .horizontal ? 1 : -1)\n                let radius = scrollDirection == .horizontal ? attributes.bounds.width : attributes.bounds.height\n                var transform3D = CATransform3DIdentity\n                transform3D.m34 = -0.002\n                switch scrollDirection {\n                case .horizontal:\n                    // ForwardX -> RotateY -> BackwardX\n                    attributes.center.x += direction*radius*0.5 // ForwardX\n                    transform3D = CATransform3DRotate(transform3D, theta, 0, 1, 0) // RotateY\n                    transform3D = CATransform3DTranslate(transform3D,-direction*radius*0.5, 0, 0) // BackwardX\n                case .vertical:\n                    // ForwardY -> RotateX -> BackwardY\n                    attributes.center.y += direction*radius*0.5 // ForwardY\n                    transform3D = CATransform3DRotate(transform3D, theta, 1, 0, 0) // RotateX\n                    transform3D = CATransform3DTranslate(transform3D,0, -direction*radius*0.5, 0) // BackwardY\n                }\n                attributes.transform3D = transform3D\n            case 1 ... CGFloat.greatestFiniteMagnitude:\n                attributes.alpha = 0\n            default:\n                attributes.alpha = 0\n                attributes.zIndex = 0\n            }\n        }\n    }\n    \n    // An interitem spacing proposed by transformer class. This will override the default interitemSpacing provided by the pager view.\n    open func proposedInteritemSpacing() -> CGFloat {\n        guard let pagerView = self.pagerView else {\n            return 0\n        }\n        let scrollDirection = pagerView.scrollDirection\n        switch self.type {\n        case .overlap:\n            guard scrollDirection == .horizontal else {\n                return 0\n            }\n            return pagerView.itemSize.width * -self.minimumScale * 0.6\n        case .linear:\n            guard scrollDirection == .horizontal else {\n                return 0\n            }\n            return pagerView.itemSize.width * -self.minimumScale * 0.2\n        case .coverFlow:\n            guard scrollDirection == .horizontal else {\n                return 0\n            }\n            return -pagerView.itemSize.width * sin(.pi*0.25*0.25*3.0)\n        case .ferrisWheel,.invertedFerrisWheel:\n            guard scrollDirection == .horizontal else {\n                return 0\n            }\n            return -pagerView.itemSize.width * 0.15\n        case .cubic:\n            return 0\n        default:\n            break\n        }\n        return pagerView.interitemSpacing\n    }\n    \n}\n\n"
  },
  {
    "path": "Sources/FSPagerCollectionView.swift",
    "content": "//\n//  FSPagerCollectionView.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 24/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  1. Reject -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary]\n//  2. Group initialized features\n\nimport UIKit\n\nclass FSPagerCollectionView: UICollectionView {\n    \n    #if !os(tvOS)\n    override var scrollsToTop: Bool {\n        set {\n            super.scrollsToTop = false\n        }\n        get {\n            return false\n        }\n    }\n    #endif\n    \n    override var contentInset: UIEdgeInsets {\n        set {\n            super.contentInset = .zero\n            if (newValue.top > 0) {\n                let contentOffset = CGPoint(x:self.contentOffset.x, y:self.contentOffset.y+newValue.top);\n                self.contentOffset = contentOffset\n            }\n        }\n        get {\n            return super.contentInset\n        }\n    }\n    \n    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {\n        super.init(frame: frame, collectionViewLayout: layout)\n        self.commonInit()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        self.commonInit()\n    }\n    \n    fileprivate func commonInit() {\n        self.contentInset = .zero\n        self.decelerationRate = UIScrollView.DecelerationRate.fast\n        self.showsVerticalScrollIndicator = false\n        self.showsHorizontalScrollIndicator = false\n        if #available(iOS 10.0, *) {\n            self.isPrefetchingEnabled = false\n        }\n        if #available(iOS 11.0, *) {\n            self.contentInsetAdjustmentBehavior = .never\n        }\n        #if !os(tvOS)\n            self.scrollsToTop = false\n            self.isPagingEnabled = false\n        #endif\n    }\n    \n}\n"
  },
  {
    "path": "Sources/FSPagerView.swift",
    "content": "//\n//  FSPagerView.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n//  https://github.com/WenchaoD\n//\n//  FSPagerView is an elegant Screen Slide Library implemented primarily with UICollectionView. It is extremely helpful for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders.\n//\n\nimport UIKit\n\n@objc\npublic protocol FSPagerViewDataSource: NSObjectProtocol {\n    \n    /// Asks your data source object for the number of items in the pager view.\n    @objc(numberOfItemsInPagerView:)\n    func numberOfItems(in pagerView: FSPagerView) -> Int\n    \n    /// Asks your data source object for the cell that corresponds to the specified item in the pager view.\n    @objc(pagerView:cellForItemAtIndex:)\n    func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell\n    \n}\n\n@objc\npublic protocol FSPagerViewDelegate: NSObjectProtocol {\n    \n    /// Asks the delegate if the item should be highlighted during tracking.\n    @objc(pagerView:shouldHighlightItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, shouldHighlightItemAt index: Int) -> Bool\n    \n    /// Tells the delegate that the item at the specified index was highlighted.\n    @objc(pagerView:didHighlightItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, didHighlightItemAt index: Int)\n    \n    /// Asks the delegate if the specified item should be selected.\n    @objc(pagerView:shouldSelectItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, shouldSelectItemAt index: Int) -> Bool\n    \n    /// Tells the delegate that the item at the specified index was selected.\n    @objc(pagerView:didSelectItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int)\n    \n    /// Tells the delegate that the specified cell is about to be displayed in the pager view.\n    @objc(pagerView:willDisplayCell:forItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int)\n    \n    /// Tells the delegate that the specified cell was removed from the pager view.\n    @objc(pagerView:didEndDisplayingCell:forItemAtIndex:)\n    optional func pagerView(_ pagerView: FSPagerView, didEndDisplaying cell: FSPagerViewCell, forItemAt index: Int)\n    \n    /// Tells the delegate when the pager view is about to start scrolling the content.\n    @objc(pagerViewWillBeginDragging:)\n    optional func pagerViewWillBeginDragging(_ pagerView: FSPagerView)\n    \n    /// Tells the delegate when the user finishes scrolling the content.\n    @objc(pagerViewWillEndDragging:targetIndex:)\n    optional func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int)\n    \n    /// Tells the delegate when the user scrolls the content view within the receiver.\n    @objc(pagerViewDidScroll:)\n    optional func pagerViewDidScroll(_ pagerView: FSPagerView)\n    \n    /// Tells the delegate when a scrolling animation in the pager view concludes.\n    @objc(pagerViewDidEndScrollAnimation:)\n    optional func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView)\n    \n    /// Tells the delegate that the pager view has ended decelerating the scrolling movement.\n    @objc(pagerViewDidEndDecelerating:)\n    optional func pagerViewDidEndDecelerating(_ pagerView: FSPagerView)\n    \n}\n\n@IBDesignable\nopen class FSPagerView: UIView,UICollectionViewDataSource,UICollectionViewDelegate {\n    \n    // MARK: - Public properties\n\n    /// The object that acts as the data source of the pager view.\n    @IBOutlet open weak var dataSource: FSPagerViewDataSource?\n    \n    /// The object that acts as the delegate of the pager view.\n    @IBOutlet open weak var delegate: FSPagerViewDelegate?\n    \n    /// The scroll direction of the pager view. Default is horizontal.\n    @objc\n    open var scrollDirection: FSPagerView.ScrollDirection = .horizontal {\n        didSet {\n            self.collectionViewLayout.forceInvalidate()\n        }\n    }\n    \n    /// The time interval of automatic sliding. 0 means disabling automatic sliding. Default is 0.\n    @IBInspectable\n    open var automaticSlidingInterval: CGFloat = 0.0 {\n        didSet {\n            self.cancelTimer()\n            if self.automaticSlidingInterval > 0 {\n                self.startTimer()\n            }\n        }\n    }\n    \n    /// The spacing to use between items in the pager view. Default is 0.\n    @IBInspectable\n    open var interitemSpacing: CGFloat = 0 {\n        didSet {\n            self.collectionViewLayout.forceInvalidate()\n        }\n    }\n    \n    /// The item size of the pager view. When the value of this property is FSPagerView.automaticSize, the items fill the entire visible area of the pager view. Default is FSPagerView.automaticSize.\n    @IBInspectable\n    open var itemSize: CGSize = automaticSize {\n        didSet {\n            self.collectionViewLayout.forceInvalidate()\n        }\n    }\n    \n    /// A Boolean value indicates that whether the pager view has infinite items. Default is false.\n    @IBInspectable\n    open var isInfinite: Bool = false {\n        didSet {\n            self.collectionViewLayout.needsReprepare = true\n            self.collectionView.reloadData()\n        }\n    }\n    \n    /// An unsigned integer value that determines the deceleration distance of the pager view, which indicates the number of passing items during the deceleration. When the value of this property is FSPagerView.automaticDistance, the actual 'distance' is automatically calculated according to the scrolling speed of the pager view. Default is 1.\n    @IBInspectable\n    open var decelerationDistance: UInt = 1\n    \n    /// A Boolean value that determines whether scrolling is enabled.\n    @IBInspectable\n    open var isScrollEnabled: Bool {\n        set { self.collectionView.isScrollEnabled = newValue }\n        get { return self.collectionView.isScrollEnabled }\n    }\n    \n    /// A Boolean value that controls whether the pager view bounces past the edge of content and back again.\n    @IBInspectable\n    open var bounces: Bool {\n        set { self.collectionView.bounces = newValue }\n        get { return self.collectionView.bounces }\n    }\n    \n    /// A Boolean value that determines whether bouncing always occurs when horizontal scrolling reaches the end of the content view.\n    @IBInspectable\n    open var alwaysBounceHorizontal: Bool {\n        set { self.collectionView.alwaysBounceHorizontal = newValue }\n        get { return self.collectionView.alwaysBounceHorizontal }\n    }\n    \n    /// A Boolean value that determines whether bouncing always occurs when vertical scrolling reaches the end of the content view.\n    @IBInspectable\n    open var alwaysBounceVertical: Bool {\n        set { self.collectionView.alwaysBounceVertical = newValue }\n        get { return self.collectionView.alwaysBounceVertical }\n    }\n    \n    /// A Boolean value that controls whether the infinite loop is removed if there is only one item. Default is false.\n    @IBInspectable\n    open var removesInfiniteLoopForSingleItem: Bool = false {\n        didSet {\n            self.reloadData()\n        }\n    }\n    \n    /// The background view of the pager view.\n    @IBInspectable\n    open var backgroundView: UIView? {\n        didSet {\n            if let backgroundView = self.backgroundView {\n                if backgroundView.superview != nil {\n                    backgroundView.removeFromSuperview()\n                }\n                self.insertSubview(backgroundView, at: 0)\n                self.setNeedsLayout()\n            }\n        }\n    }\n    \n    /// The transformer of the pager view.\n    @objc\n    open var transformer: FSPagerViewTransformer? {\n        didSet {\n            self.transformer?.pagerView = self\n            self.collectionViewLayout.forceInvalidate()\n        }\n    }\n    \n    // MARK: - Public readonly-properties\n    \n    /// Returns whether the user has touched the content to initiate scrolling.\n    @objc\n    open var isTracking: Bool {\n        return self.collectionView.isTracking\n    }\n    \n    /// The percentage of x position at which the origin of the content view is offset from the origin of the pagerView view.\n    @objc\n    open var scrollOffset: CGFloat {\n        let contentOffset = max(self.collectionView.contentOffset.x, self.collectionView.contentOffset.y)\n        let scrollOffset = Double(contentOffset/self.collectionViewLayout.itemSpacing)\n        return fmod(CGFloat(scrollOffset), CGFloat(self.numberOfItems))\n    }\n    \n    /// The underlying gesture recognizer for pan gestures.\n    @objc\n    open var panGestureRecognizer: UIPanGestureRecognizer {\n        return self.collectionView.panGestureRecognizer\n    }\n    \n    @objc open fileprivate(set) dynamic var currentIndex: Int = 0\n    \n    // MARK: - Private properties\n    \n    internal weak var collectionViewLayout: FSPagerViewLayout!\n    internal weak var collectionView: FSPagerCollectionView!\n    internal weak var contentView: UIView!\n    internal var timer: Timer?\n    internal var numberOfItems: Int = 0\n    internal var numberOfSections: Int = 0\n    \n    fileprivate var dequeingSection = 0\n    fileprivate var centermostIndexPath: IndexPath {\n        guard self.numberOfItems > 0, self.collectionView.contentSize != .zero else {\n            return IndexPath(item: 0, section: 0)\n        }\n        let sortedIndexPaths = self.collectionView.indexPathsForVisibleItems.sorted { (l, r) -> Bool in\n            let leftFrame = self.collectionViewLayout.frame(for: l)\n            let rightFrame = self.collectionViewLayout.frame(for: r)\n            var leftCenter: CGFloat,rightCenter: CGFloat,ruler: CGFloat\n            switch self.scrollDirection {\n            case .horizontal:\n                leftCenter = leftFrame.midX\n                rightCenter = rightFrame.midX\n                ruler = self.collectionView.bounds.midX\n            case .vertical:\n                leftCenter = leftFrame.midY\n                rightCenter = rightFrame.midY\n                ruler = self.collectionView.bounds.midY\n            }\n            return abs(ruler-leftCenter) < abs(ruler-rightCenter)\n        }\n        let indexPath = sortedIndexPaths.first\n        if let indexPath = indexPath {\n            return indexPath\n        }\n        return IndexPath(item: 0, section: 0)\n    }\n    fileprivate var isPossiblyRotating: Bool {\n        guard let animationKeys = self.contentView.layer.animationKeys() else {\n            return false\n        }\n        let rotationAnimationKeys = [\"position\", \"bounds.origin\", \"bounds.size\"]\n        return animationKeys.contains(where: { rotationAnimationKeys.contains($0) })\n    }\n    fileprivate var possibleTargetingIndexPath: IndexPath?\n    \n    // MARK: - Overriden functions\n    \n    public override init(frame: CGRect) {\n        super.init(frame: frame)\n        self.commonInit()\n    }\n    \n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        self.commonInit()\n    }\n    \n    open override func layoutSubviews() {\n        super.layoutSubviews()\n        self.backgroundView?.frame = self.bounds\n        self.contentView.frame = self.bounds\n        self.collectionView.frame = self.contentView.bounds\n    }\n    \n    open override func willMove(toWindow newWindow: UIWindow?) {\n        super.willMove(toWindow: newWindow)\n        if newWindow != nil {\n            self.startTimer()\n        } else {\n            self.cancelTimer()\n        }\n    }\n    \n    #if TARGET_INTERFACE_BUILDER\n    \n    open override func prepareForInterfaceBuilder() {\n        super.prepareForInterfaceBuilder()\n        self.contentView.layer.borderWidth = 1\n        self.contentView.layer.cornerRadius = 5\n        self.contentView.layer.masksToBounds = true\n        self.contentView.frame = self.bounds\n        let label = UILabel(frame: self.contentView.bounds)\n        label.textAlignment = .center\n        label.font = UIFont.boldSystemFont(ofSize: 25)\n        label.text = \"FSPagerView\"\n        self.contentView.addSubview(label)\n    }\n    \n    #endif\n\n    deinit {\n        self.collectionView.dataSource = nil\n        self.collectionView.delegate = nil\n    }\n\n    // MARK: - UICollectionViewDataSource\n    \n    public func numberOfSections(in collectionView: UICollectionView) -> Int {\n        guard let dataSource = self.dataSource else {\n            return 1\n        }\n        self.numberOfItems = dataSource.numberOfItems(in: self)\n        guard self.numberOfItems > 0 else {\n            return 0;\n        }\n        self.numberOfSections = self.isInfinite && (self.numberOfItems > 1 || !self.removesInfiniteLoopForSingleItem) ? Int(Int16.max)/self.numberOfItems : 1\n        return self.numberOfSections\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {\n        return self.numberOfItems\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {\n        let index = indexPath.item\n        self.dequeingSection = indexPath.section\n        let cell = self.dataSource!.pagerView(self, cellForItemAt: index)\n        return cell\n    }\n    \n    // MARK: - UICollectionViewDelegate\n    \n    public func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {\n        guard let function = self.delegate?.pagerView(_:shouldHighlightItemAt:) else {\n            return true\n        }\n        let index = indexPath.item % self.numberOfItems\n        return function(self,index)\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {\n        guard let function = self.delegate?.pagerView(_:didHighlightItemAt:) else {\n            return\n        }\n        let index = indexPath.item % self.numberOfItems\n        function(self,index)\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {\n        guard let function = self.delegate?.pagerView(_:shouldSelectItemAt:) else {\n            return true\n        }\n        let index = indexPath.item % self.numberOfItems\n        return function(self,index)\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {\n        guard let function = self.delegate?.pagerView(_:didSelectItemAt:) else {\n            return\n        }\n        self.possibleTargetingIndexPath = indexPath\n        defer {\n            self.possibleTargetingIndexPath = nil\n        }\n        let index = indexPath.item % self.numberOfItems\n        function(self,index)\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {\n        guard let function = self.delegate?.pagerView(_:willDisplay:forItemAt:) else {\n            return\n        }\n        let index = indexPath.item % self.numberOfItems\n        function(self,cell as! FSPagerViewCell,index)\n    }\n    \n    public func collectionView(_ collectionView: UICollectionView, didEndDisplaying cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {\n        guard let function = self.delegate?.pagerView(_:didEndDisplaying:forItemAt:) else {\n            return\n        }\n        let index = indexPath.item % self.numberOfItems\n        function(self,cell as! FSPagerViewCell,index)\n    }\n    \n    public func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        if !self.isPossiblyRotating && self.numberOfItems > 0 {\n            // In case someone is using KVO\n            let currentIndex = lround(Double(self.scrollOffset)) % self.numberOfItems\n            if (currentIndex != self.currentIndex) {\n                self.currentIndex = currentIndex\n            }\n        }\n        guard let function = self.delegate?.pagerViewDidScroll else {\n            return\n        }\n        function(self)\n    }\n    \n    public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {\n        if let function = self.delegate?.pagerViewWillBeginDragging(_:) {\n            function(self)\n        }\n        if self.automaticSlidingInterval > 0 {\n            self.cancelTimer()\n        }\n    }\n    \n    public func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {\n        if let function = self.delegate?.pagerViewWillEndDragging(_:targetIndex:) {\n            let contentOffset = self.scrollDirection == .horizontal ? targetContentOffset.pointee.x : targetContentOffset.pointee.y\n            let targetItem = lround(Double(contentOffset/self.collectionViewLayout.itemSpacing))\n            function(self, targetItem % self.numberOfItems)\n        }\n        if self.automaticSlidingInterval > 0 {\n            self.startTimer()\n        }\n    }\n    \n    public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {\n        if let function = self.delegate?.pagerViewDidEndDecelerating {\n            function(self)\n        }\n    }\n    \n    public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {\n        if let function = self.delegate?.pagerViewDidEndScrollAnimation {\n            function(self)\n        }\n    }\n    \n    // MARK: - Public functions\n    \n    /// Register a class for use in creating new pager view cells.\n    ///\n    /// - Parameters:\n    ///   - cellClass: The class of a cell that you want to use in the pager view.\n    ///   - identifier: The reuse identifier to associate with the specified class. This parameter must not be nil and must not be an empty string.\n    @objc(registerClass:forCellWithReuseIdentifier:)\n    open func register(_ cellClass: Swift.AnyClass?, forCellWithReuseIdentifier identifier: String) {\n        self.collectionView.register(cellClass, forCellWithReuseIdentifier: identifier)\n    }\n    \n    /// Register a nib file for use in creating new pager view cells.\n    ///\n    /// - Parameters:\n    ///   - nib: The nib object containing the cell object. The nib file must contain only one top-level object and that object must be of the type FSPagerViewCell.\n    ///   - identifier: The reuse identifier to associate with the specified nib file. This parameter must not be nil and must not be an empty string.\n    @objc(registerNib:forCellWithReuseIdentifier:)\n    open func register(_ nib: UINib?, forCellWithReuseIdentifier identifier: String) {\n        self.collectionView.register(nib, forCellWithReuseIdentifier: identifier)\n    }\n    \n    /// Returns a reusable cell object located by its identifier\n    ///\n    /// - Parameters:\n    ///   - identifier: The reuse identifier for the specified cell. This parameter must not be nil.\n    ///   - index: The index specifying the location of the cell.\n    /// - Returns: A valid FSPagerViewCell object.\n    @objc(dequeueReusableCellWithReuseIdentifier:atIndex:)\n    open func dequeueReusableCell(withReuseIdentifier identifier: String, at index: Int) -> FSPagerViewCell {\n        let indexPath = IndexPath(item: index, section: self.dequeingSection)\n        let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath)\n        guard cell.isKind(of: FSPagerViewCell.self) else {\n            fatalError(\"Cell class must be subclass of FSPagerViewCell\")\n        }\n        return cell as! FSPagerViewCell\n    }\n    \n    /// Reloads all of the data for the collection view.\n    @objc(reloadData)\n    open func reloadData() {\n        self.collectionViewLayout.needsReprepare = true;\n        self.collectionView.reloadData()\n    }\n    \n    /// Selects the item at the specified index and optionally scrolls it into view.\n    ///\n    /// - Parameters:\n    ///   - index: The index path of the item to select.\n    ///   - animated: Specify true to animate the change in the selection or false to make the change without animating it.\n    @objc(selectItemAtIndex:animated:)\n    open func selectItem(at index: Int, animated: Bool) {\n        let indexPath = self.nearbyIndexPath(for: index)\n        let scrollPosition: UICollectionView.ScrollPosition = self.scrollDirection == .horizontal ? .centeredHorizontally : .centeredVertically\n        self.collectionView.selectItem(at: indexPath, animated: animated, scrollPosition: scrollPosition)\n    }\n    \n    /// Deselects the item at the specified index.\n    ///\n    /// - Parameters:\n    ///   - index: The index of the item to deselect.\n    ///   - animated: Specify true to animate the change in the selection or false to make the change without animating it.\n    @objc(deselectItemAtIndex:animated:)\n    open func deselectItem(at index: Int, animated: Bool) {\n        let indexPath = self.nearbyIndexPath(for: index)\n        self.collectionView.deselectItem(at: indexPath, animated: animated)\n    }\n    \n    /// Scrolls the pager view contents until the specified item is visible.\n    ///\n    /// - Parameters:\n    ///   - index: The index of the item to scroll into view.\n    ///   - animated: Specify true to animate the scrolling behavior or false to adjust the pager view’s visible content immediately.\n    @objc(scrollToItemAtIndex:animated:)\n    open func scrollToItem(at index: Int, animated: Bool) {\n        guard index < self.numberOfItems else {\n            fatalError(\"index \\(index) is out of range [0...\\(self.numberOfItems-1)]\")\n        }\n        let indexPath = { () -> IndexPath in\n            if let indexPath = self.possibleTargetingIndexPath, indexPath.item == index {\n                defer {\n                    self.possibleTargetingIndexPath = nil\n                }\n                return indexPath\n            }\n            return self.numberOfSections > 1 ? self.nearbyIndexPath(for: index) : IndexPath(item: index, section: 0)\n        }()\n        let contentOffset = self.collectionViewLayout.contentOffset(for: indexPath)\n        self.collectionView.setContentOffset(contentOffset, animated: animated)\n    }\n    \n    /// Returns the index of the specified cell.\n    ///\n    /// - Parameter cell: The cell object whose index you want.\n    /// - Returns: The index of the cell or NSNotFound if the specified cell is not in the pager view.\n    @objc(indexForCell:)\n    open func index(for cell: FSPagerViewCell) -> Int {\n        guard let indexPath = self.collectionView.indexPath(for: cell) else {\n            return NSNotFound\n        }\n        return indexPath.item\n    }\n    \n    /// Returns the visible cell at the specified index.\n    ///\n    /// - Parameter index: The index that specifies the position of the cell.\n    /// - Returns: The cell object at the corresponding position or nil if the cell is not visible or index is out of range.\n    @objc(cellForItemAtIndex:)\n    open func cellForItem(at index: Int) -> FSPagerViewCell? {\n        let indexPath = self.nearbyIndexPath(for: index)\n        return self.collectionView.cellForItem(at: indexPath) as? FSPagerViewCell\n    }\n    \n    // MARK: - Private functions\n    \n    fileprivate func commonInit() {\n        \n        // Content View\n        let contentView = UIView(frame:CGRect.zero)\n        contentView.backgroundColor = UIColor.clear\n        self.addSubview(contentView)\n        self.contentView = contentView\n        \n        // UICollectionView\n        let collectionViewLayout = FSPagerViewLayout()\n        let collectionView = FSPagerCollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout)\n        collectionView.dataSource = self\n        collectionView.delegate = self\n        collectionView.backgroundColor = UIColor.clear\n        self.contentView.addSubview(collectionView)\n        self.collectionView = collectionView\n        self.collectionViewLayout = collectionViewLayout\n        \n    }\n    \n    fileprivate func startTimer() {\n        guard self.automaticSlidingInterval > 0 && self.timer == nil else {\n            return\n        }\n        self.timer = Timer.scheduledTimer(timeInterval: TimeInterval(self.automaticSlidingInterval), target: self, selector: #selector(self.flipNext(sender:)), userInfo: nil, repeats: true)\n        RunLoop.current.add(self.timer!, forMode: .common)\n    }\n    \n    @objc\n    fileprivate func flipNext(sender: Timer?) {\n        guard let _ = self.superview, let _ = self.window, self.numberOfItems > 0, !self.isTracking else {\n            return\n        }\n        let contentOffset: CGPoint = {\n            let indexPath = self.centermostIndexPath\n            let section = self.numberOfSections > 1 ? (indexPath.section+(indexPath.item+1)/self.numberOfItems) : 0\n            let item = (indexPath.item+1) % self.numberOfItems\n            return self.collectionViewLayout.contentOffset(for: IndexPath(item: item, section: section))\n        }()\n        self.collectionView.setContentOffset(contentOffset, animated: true)\n    }\n    \n    fileprivate func cancelTimer() {\n        guard self.timer != nil else {\n            return\n        }\n        self.timer!.invalidate()\n        self.timer = nil\n    }\n    \n    fileprivate func nearbyIndexPath(for index: Int) -> IndexPath {\n        // Is there a better algorithm?\n        let currentIndex = self.currentIndex\n        let currentSection = self.centermostIndexPath.section\n        if abs(currentIndex-index) <= self.numberOfItems/2 {\n            return IndexPath(item: index, section: currentSection)\n        } else if (index-currentIndex >= 0) {\n            return IndexPath(item: index, section: currentSection-1)\n        } else {\n            return IndexPath(item: index, section: currentSection+1)\n        }\n    }\n    \n}\n\nextension FSPagerView {\n    \n    /// Constants indicating the direction of scrolling for the pager view.\n    @objc\n    public enum ScrollDirection: Int {\n        /// The pager view scrolls content horizontally\n        case horizontal\n        /// The pager view scrolls content vertically\n        case vertical\n    }\n    \n    /// Requests that FSPagerView use the default value for a given distance.\n    public static let automaticDistance: UInt = 0\n    \n    /// Requests that FSPagerView use the default value for a given size.\n    public static let automaticSize: CGSize = .zero\n    \n}\n"
  },
  {
    "path": "Sources/FSPagerViewCell.swift",
    "content": "//\n//  FSPagerViewCell.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nopen class FSPagerViewCell: UICollectionViewCell {\n    \n    /// Returns the label used for the main textual content of the pager view cell.\n    @objc\n    open var textLabel: UILabel? {\n        if let _ = _textLabel {\n            return _textLabel\n        }\n        let view = UIView(frame: .zero)\n        view.isUserInteractionEnabled = false\n        view.backgroundColor = UIColor.black.withAlphaComponent(0.6)\n        \n        let textLabel = UILabel(frame: .zero)\n        textLabel.textColor = .white\n        textLabel.font = UIFont.preferredFont(forTextStyle: .body)\n        self.contentView.addSubview(view)\n        view.addSubview(textLabel)\n        \n        textLabel.addObserver(self, forKeyPath: \"font\", options: [.old,.new], context: kvoContext)\n        \n        _textLabel = textLabel\n        return textLabel\n    }\n    \n    /// Returns the image view of the pager view cell. Default is nil.\n    @objc\n    open var imageView: UIImageView? {\n        if let _ = _imageView {\n            return _imageView\n        }\n        let imageView = UIImageView(frame: .zero)\n        self.contentView.addSubview(imageView)\n        _imageView = imageView\n        return imageView\n    }\n    \n    fileprivate weak var _textLabel: UILabel?\n    fileprivate weak var _imageView: UIImageView?\n    \n    fileprivate let kvoContext = UnsafeMutableRawPointer(bitPattern: 0)\n    fileprivate let selectionColor = UIColor(white: 0.2, alpha: 0.2)\n    \n    fileprivate weak var _selectedForegroundView: UIView?\n    fileprivate var selectedForegroundView: UIView? {\n        guard _selectedForegroundView == nil else {\n            return _selectedForegroundView\n        }\n        guard let imageView = _imageView else {\n            return nil\n        }\n        let view = UIView(frame: imageView.bounds)\n        imageView.addSubview(view)\n        _selectedForegroundView = view\n        return view\n    }\n    \n    open override var isHighlighted: Bool {\n        set {\n            super.isHighlighted = newValue\n            if newValue {\n                self.selectedForegroundView?.layer.backgroundColor = self.selectionColor.cgColor\n            } else if !super.isSelected {\n                self.selectedForegroundView?.layer.backgroundColor = UIColor.clear.cgColor\n            }\n        }\n        get {\n            return super.isHighlighted\n        }\n    }\n    \n    open override var isSelected: Bool {\n        set {\n            super.isSelected = newValue\n            self.selectedForegroundView?.layer.backgroundColor = newValue ? self.selectionColor.cgColor : UIColor.clear.cgColor\n        }\n        get {\n            return super.isSelected\n        }\n    }\n    \n    public override init(frame: CGRect) {\n        super.init(frame: frame)\n        commonInit()\n    }\n    \n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        commonInit()\n    }\n    \n    fileprivate func commonInit() {\n        self.contentView.backgroundColor = UIColor.clear\n        self.backgroundColor = UIColor.clear\n        self.contentView.layer.shadowColor = UIColor.black.cgColor\n        self.contentView.layer.shadowRadius = 5\n        self.contentView.layer.shadowOpacity = 0.75\n        self.contentView.layer.shadowOffset = .zero\n    }\n    \n    deinit {\n        if let textLabel = _textLabel {\n            textLabel.removeObserver(self, forKeyPath: \"font\", context: kvoContext)\n        }\n    }\n    \n    override open func layoutSubviews() {\n        super.layoutSubviews()\n        if let imageView = _imageView {\n            imageView.frame = self.contentView.bounds\n        }\n        if let textLabel = _textLabel {\n            textLabel.superview!.frame = {\n                var rect = self.contentView.bounds\n                let height = textLabel.font.pointSize*1.5\n                rect.size.height = height\n                rect.origin.y = self.contentView.frame.height-height\n                return rect\n            }()\n            textLabel.frame = {\n                var rect = textLabel.superview!.bounds\n                rect = rect.insetBy(dx: 8, dy: 0)\n                rect.size.height -= 1\n                rect.origin.y += 1\n                return rect\n            }()\n        }\n        if let selectedForegroundView = _selectedForegroundView {\n            selectedForegroundView.frame = self.contentView.bounds\n        }\n    }\n\n    open override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {\n        if context == kvoContext {\n            if keyPath == \"font\" {\n                self.setNeedsLayout()\n            }\n        } else {\n            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Sources/FSPagerViewLayoutAttributes.swift",
    "content": "//\n//  FSPagerViewLayoutAttributes.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 26/02/2017.\n//  Copyright © 2017 Wenchao Ding. All rights reserved.\n//\n\nimport UIKit\n\nopen class FSPagerViewLayoutAttributes: UICollectionViewLayoutAttributes {\n\n    open var position: CGFloat = 0\n    \n    open override func isEqual(_ object: Any?) -> Bool {\n        guard let object = object as? FSPagerViewLayoutAttributes else {\n            return false\n        }\n        var isEqual = super.isEqual(object)\n        isEqual = isEqual && (self.position == object.position)\n        return isEqual\n    }\n    \n    open override func copy(with zone: NSZone? = nil) -> Any {\n        let copy = super.copy(with: zone) as! FSPagerViewLayoutAttributes\n        copy.position = self.position\n        return copy\n    }\n    \n}\n"
  },
  {
    "path": "Sources/FSPagerViewObjcCompat.h",
    "content": "//\n//  FSPagerViewObjcCompat.h\n//  FSPagerView\n//\n//  Created by 丁文超 on 2018/9/18.\n//  Copyright © 2018 Wenchao Ding. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <Foundation/Foundation.h>\n\n#define FSPagerViewExtern extern\n\n/**\n Requests that FSPagerView use the default value for a given distance.\n */\nFSPagerViewExtern NSUInteger const FSPagerViewAutomaticDistance;\n\n/**\n Requests that FSPagerView use the default value for a given size.\n */\nFSPagerViewExtern CGSize const FSPagerViewAutomaticSize;\n\n"
  },
  {
    "path": "Sources/FSPagerViewObjcCompat.m",
    "content": "//\n//  FSPagerViewObjcCompat.m\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 2018/9/24.\n//  Copyright © 2018 Wenchao Ding. All rights reserved.\n//\n\n#import \"FSPagerViewObjcCompat.h\"\n\nNSUInteger const FSPagerViewAutomaticDistance = 0;\nCGSize const FSPagerViewAutomaticSize = { .width = 0, .height = 0 };\n"
  }
]