Full Code of WenchaoD/FSPagerView for AI

master f90ab7d2ee68 cached
53 files
312.3 KB
84.5k tokens
1 requests
Download .txt
Showing preview only (331K chars total). Download the full file or copy to clipboard to get everything.
Repository: WenchaoD/FSPagerView
Branch: master
Commit: f90ab7d2ee68
Files: 53
Total size: 312.3 KB

Directory structure:
gitextract_gieyc_z4/

├── .gitignore
├── .swiftpm/
│   └── xcode/
│       └── package.xcworkspace/
│           └── contents.xcworkspacedata
├── FSPageViewExample-Swift/
│   ├── FSPagerViewExample/
│   │   ├── AppDelegate.swift
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BasicExampleViewController.swift
│   │   ├── Info.plist
│   │   ├── PageControlExampleViewController.swift
│   │   └── TransformerExampleViewController.swift
│   ├── FSPagerViewExample.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── FSPagerViewExampleUITests/
│       ├── FSPagerViewExampleUITests.swift
│       └── Info.plist
├── FSPagerView/
│   ├── FSPagerView/
│   │   ├── FSPagerView.h
│   │   └── Info.plist
│   └── FSPagerView.xcodeproj/
│       ├── project.pbxproj
│       ├── project.xcworkspace/
│       │   └── contents.xcworkspacedata
│       └── xcshareddata/
│           └── xcschemes/
│               └── FSPagerView.xcscheme
├── FSPagerView.podspec
├── FSPagerViewExample-Objc/
│   ├── FSPagerViewExample-Objc/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BasicExampleViewController.h
│   │   ├── BasicExampleViewController.m
│   │   ├── Info.plist
│   │   ├── PageControlExampleViewController.h
│   │   ├── PageControlExampleViewController.m
│   │   ├── TransformerExampleViewController.h
│   │   ├── TransformerExampleViewController.m
│   │   └── main.m
│   ├── FSPagerViewExample-Objc.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── FSPagerViewExample-ObjcUITests/
│       ├── FSPagerViewExample_ObjcUITests.swift
│       └── Info.plist
├── FSPagerViewExamples.xcworkspace/
│   └── contents.xcworkspacedata
├── LICENSE
├── Package.swift
├── README-OBJECTIVE-C.md
├── README.md
├── Resources/
│   └── Assets.xcassets/
│       ├── AppIcon.appiconset/
│       │   └── Contents.json
│       ├── Contents.json
│       ├── icon_cat.imageset/
│       │   └── Contents.json
│       └── icon_footprint.imageset/
│           └── Contents.json
└── Sources/
    ├── FSPageControl.swift
    ├── FSPageViewLayout.swift
    ├── FSPageViewTransformer.swift
    ├── FSPagerCollectionView.swift
    ├── FSPagerView.swift
    ├── FSPagerViewCell.swift
    ├── FSPagerViewLayoutAttributes.swift
    ├── FSPagerViewObjcCompat.h
    └── FSPagerViewObjcCompat.m

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint
*.xcuserstate

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output

Index/*

================================================
FILE: .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:">
   </FileRef>
</Workspace>


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  FSPagerViewExample
//
//  Created by Wenchao Ding on 06/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // 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.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // 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.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // 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.
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // 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.
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }


}



================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
        <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Navigation Controller-->
        <scene sceneID="1gZ-cN-8UU">
            <objects>
                <navigationController id="65m-zG-Zjb" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="sdq-d2-T0f">
                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="QFv-CW-07W" kind="relationship" relationship="rootViewController" id="LEb-Q1-2GK"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="XrD-t8-fKf" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-1302" y="58"/>
        </scene>
        <!--FSPagerView-->
        <scene sceneID="BUU-qk-sys">
            <objects>
                <tableViewController id="QFv-CW-07W" sceneMemberID="viewController">
                    <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">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <sections>
                            <tableViewSection id="dcb-AR-Y6o">
                                <cells>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="xbh-ag-gwU" style="IBUITableViewCellStyleDefault" id="c8R-jz-NC9">
                                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="c8R-jz-NC9" id="Xt2-E6-SSP">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Banner Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xbh-ag-gwU">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="8S4-ui-raa" kind="show" id="CA7-wi-OYv"/>
                                        </connections>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="tbD-GK-bJ9" style="IBUITableViewCellStyleDefault" id="FxB-ZA-C8d">
                                        <rect key="frame" x="0.0" y="44" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="FxB-ZA-C8d" id="3kH-YG-RlN">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Transformer Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tbD-GK-bJ9">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="UOf-Wx-Dm5" kind="show" id="u1f-IZ-XjV"/>
                                        </connections>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="kw1-Wq-GDF" style="IBUITableViewCellStyleDefault" id="Z9U-TY-wA5">
                                        <rect key="frame" x="0.0" y="88" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Z9U-TY-wA5" id="ebB-1o-WJk">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="PageControl Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kw1-Wq-GDF">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="lma-uy-r7Q" kind="show" id="Ywb-QZ-BEV"/>
                                        </connections>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                        </sections>
                        <connections>
                            <outlet property="dataSource" destination="QFv-CW-07W" id="BKi-in-Tr5"/>
                            <outlet property="delegate" destination="QFv-CW-07W" id="z5U-b1-65X"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="FSPagerView" id="Lpl-eu-Fmc"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="odI-aG-hCn" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-540" y="57"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="Dj3-5U-Hsj">
            <objects>
                <viewController id="8S4-ui-raa" customClass="BasicExampleViewController" customModule="FSPagerViewExample" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="ZIn-7Z-O0c"/>
                        <viewControllerLayoutGuide type="bottom" id="FEf-c6-LBu"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="JGI-7R-hPw">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CTG-eH-B7s" customClass="FSPagerView" customModule="FSPagerViewExample" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="64" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="CTG-eH-B7s" secondAttribute="height" multiplier="375:193" id="rZx-r3-VSz"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="alwaysBounceHorizontal" value="YES"/>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="removesInfiniteLoopForSingleItem" value="YES"/>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="isInfinite" value="YES"/>
                                </userDefinedRuntimeAttributes>
                                <connections>
                                    <outlet property="dataSource" destination="8S4-ui-raa" id="55w-g7-XAv"/>
                                    <outlet property="delegate" destination="8S4-ui-raa" id="ZXc-ha-CLU"/>
                                </connections>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mWZ-ul-B44" customClass="FSPageControl" customModule="FSPagerViewExample" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="232" width="375" height="25"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="25" id="wm0-Qk-cZE"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="hidesForSinglePage" value="YES"/>
                                </userDefinedRuntimeAttributes>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="257" width="375" height="410"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="pAf-pQ-W1L"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="tk3-eI-HIS" style="IBUITableViewCellStyleDefault" id="VNC-TS-zto">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VNC-TS-zto" id="zR3-db-xZl">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tk3-eI-HIS">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="slider_cell" id="Mhy-Af-ukz">
                                        <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mhy-Af-ukz" id="a5X-4s-PcO">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <slider opaque="NO" tag="100" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="O0o-pU-RV0">
                                                    <rect key="frame" x="20" y="6" width="334" height="31"/>
                                                    <connections>
                                                        <action selector="sliderValueChanged:" destination="8S4-ui-raa" eventType="valueChanged" id="Aoi-Bd-jLc"/>
                                                    </connections>
                                                </slider>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="O0o-pU-RV0" firstAttribute="leading" secondItem="a5X-4s-PcO" secondAttribute="leadingMargin" constant="14" id="DVA-cV-yUQ"/>
                                                <constraint firstItem="O0o-pU-RV0" firstAttribute="centerY" secondItem="a5X-4s-PcO" secondAttribute="centerY" id="JWD-EM-rrQ"/>
                                                <constraint firstItem="O0o-pU-RV0" firstAttribute="centerX" secondItem="a5X-4s-PcO" secondAttribute="centerX" id="lxA-Dh-fpZ"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="8S4-ui-raa" id="g7q-Ol-O1u"/>
                                    <outlet property="delegate" destination="8S4-ui-raa" id="nQ4-SL-rUR"/>
                                </connections>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="trailing" secondItem="mWZ-ul-B44" secondAttribute="trailing" id="1CQ-or-Rzw"/>
                            <constraint firstItem="mWZ-ul-B44" firstAttribute="bottom" secondItem="CTG-eH-B7s" secondAttribute="bottom" id="7eO-T3-IeH"/>
                            <constraint firstItem="yIp-0M-Jf9" firstAttribute="trailing" secondItem="CTG-eH-B7s" secondAttribute="trailing" id="DlN-Cq-Dge"/>
                            <constraint firstItem="mWZ-ul-B44" firstAttribute="leading" secondItem="JGI-7R-hPw" secondAttribute="leading" id="LiP-jF-2wi"/>
                            <constraint firstItem="CTG-eH-B7s" firstAttribute="leading" secondItem="JGI-7R-hPw" secondAttribute="leading" id="NcO-li-Ntq"/>
                            <constraint firstItem="yIp-0M-Jf9" firstAttribute="top" secondItem="CTG-eH-B7s" secondAttribute="bottom" id="RZU-tW-lUH"/>
                            <constraint firstItem="FEf-c6-LBu" firstAttribute="top" secondItem="yIp-0M-Jf9" secondAttribute="bottom" id="WdD-ac-p9r"/>
                            <constraint firstAttribute="trailing" secondItem="CTG-eH-B7s" secondAttribute="trailing" id="bf6-lY-6M7"/>
                            <constraint firstItem="CTG-eH-B7s" firstAttribute="top" secondItem="ZIn-7Z-O0c" secondAttribute="bottom" id="egB-9j-VUH"/>
                            <constraint firstItem="yIp-0M-Jf9" firstAttribute="leading" secondItem="CTG-eH-B7s" secondAttribute="leading" id="gAk-gv-dNu"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" title="FSPagerView" id="mmk-5e-Dbw"/>
                    <connections>
                        <outlet property="pageControl" destination="mWZ-ul-B44" id="Rgw-YS-NtE"/>
                        <outlet property="pagerView" destination="CTG-eH-B7s" id="wL1-ea-IwW"/>
                        <outlet property="tableView" destination="yIp-0M-Jf9" id="yBP-Gq-WRT"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="GVQ-ty-CGK" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="269.60000000000002" y="-634.632683658171"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="YvR-xA-dZd">
            <objects>
                <viewController id="UOf-Wx-Dm5" customClass="TransformerExampleViewController" customModule="FSPagerViewExample" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="YqO-fo-CV0"/>
                        <viewControllerLayoutGuide type="bottom" id="SYq-Ou-9Hm"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="gyH-Fj-vjS">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tSq-4e-Jil" customClass="FSPagerView" customModule="FSPagerViewExample" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="84" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="tSq-4e-Jil" secondAttribute="height" multiplier="375:193" id="8cc-kO-s6Y"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="isInfinite" value="YES"/>
                                </userDefinedRuntimeAttributes>
                                <connections>
                                    <outlet property="dataSource" destination="UOf-Wx-Dm5" id="Xcy-kf-B7Y"/>
                                    <outlet property="delegate" destination="UOf-Wx-Dm5" id="cQD-fS-FFJ"/>
                                </connections>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="277" width="375" height="400"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="NRZ-QP-i1t"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="zyL-iX-55x" style="IBUITableViewCellStyleDefault" id="5d8-B4-K8u">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5d8-B4-K8u" id="uyz-07-btn">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="zyL-iX-55x">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="UOf-Wx-Dm5" id="qPE-fr-jiM"/>
                                    <outlet property="delegate" destination="UOf-Wx-Dm5" id="8QI-As-UQ9"/>
                                </connections>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="tSq-4e-Jil" firstAttribute="leading" secondItem="gyH-Fj-vjS" secondAttribute="leading" id="4JR-wM-Hj6"/>
                            <constraint firstAttribute="trailing" secondItem="TEB-Em-38e" secondAttribute="trailing" id="9aI-K5-eVK"/>
                            <constraint firstItem="TEB-Em-38e" firstAttribute="leading" secondItem="gyH-Fj-vjS" secondAttribute="leading" id="Nzy-x1-I37"/>
                            <constraint firstAttribute="trailing" secondItem="tSq-4e-Jil" secondAttribute="trailing" id="RgI-TS-XNy"/>
                            <constraint firstItem="SYq-Ou-9Hm" firstAttribute="top" secondItem="TEB-Em-38e" secondAttribute="bottom" priority="900" id="SvE-DZ-QZZ"/>
                            <constraint firstItem="TEB-Em-38e" firstAttribute="top" secondItem="tSq-4e-Jil" secondAttribute="bottom" id="Y6P-xg-PBD"/>
                            <constraint firstItem="tSq-4e-Jil" firstAttribute="top" secondItem="YqO-fo-CV0" secondAttribute="bottom" id="aLW-5l-Ysv"/>
                        </constraints>
                    </view>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="FSPagerView" id="TLb-uP-T5p"/>
                    <connections>
                        <outlet property="pagerView" destination="tSq-4e-Jil" id="gIC-GK-Dy2"/>
                        <outlet property="tableView" destination="TEB-Em-38e" id="IVC-J2-DaD"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="umh-fh-emi" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="270" y="78"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="ubH-x9-Tsd">
            <objects>
                <viewController id="lma-uy-r7Q" customClass="PageControlExampleViewController" customModule="FSPagerViewExample" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="g8E-NI-6cy"/>
                        <viewControllerLayoutGuide type="bottom" id="LRp-ZY-5aK"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="te4-kA-aq3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dn3-eb-Xp7" customClass="FSPagerView" customModule="FSPagerViewExample" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="64" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="Dn3-eb-Xp7" secondAttribute="height" multiplier="375:193" id="i9F-Jy-ACA"/>
                                </constraints>
                                <connections>
                                    <outlet property="dataSource" destination="lma-uy-r7Q" id="c52-NV-b2h"/>
                                    <outlet property="delegate" destination="lma-uy-r7Q" id="smq-bL-KUh"/>
                                </connections>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="257" width="375" height="410"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="DJv-Gh-cqi"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="BsM-5g-055" style="IBUITableViewCellStyleDefault" id="xKM-zP-mhA">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xKM-zP-mhA" id="e6f-eC-LPJ">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="BsM-5g-055">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="slider_cell" id="5vo-WJ-LAV">
                                        <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5vo-WJ-LAV" id="4El-3j-sQo">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <slider opaque="NO" tag="100" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="po6-ni-APz">
                                                    <rect key="frame" x="20" y="6" width="334" height="31"/>
                                                    <connections>
                                                        <action selector="sliderValueChanged:" destination="lma-uy-r7Q" eventType="valueChanged" id="gFi-4y-tQy"/>
                                                    </connections>
                                                </slider>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="centerX" secondItem="4El-3j-sQo" secondAttribute="centerX" id="foX-sD-T7e"/>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="leading" secondItem="4El-3j-sQo" secondAttribute="leadingMargin" constant="14" id="mq9-Ba-kWP"/>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="centerY" secondItem="4El-3j-sQo" secondAttribute="centerY" id="vUz-88-Rc7"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="lma-uy-r7Q" id="LkY-bg-T5I"/>
                                    <outlet property="delegate" destination="lma-uy-r7Q" id="2q3-xG-a4L"/>
                                </connections>
                            </tableView>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6XD-Hd-JIV" customClass="FSPageControl" customModule="FSPagerViewExample" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="227" width="375" height="30"/>
                                <color key="backgroundColor" white="0.0" alpha="0.5" colorSpace="calibratedWhite"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="30" id="T3E-mc-eGj"/>
                                </constraints>
                            </view>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="LRp-ZY-5aK" firstAttribute="top" secondItem="1nD-dr-afd" secondAttribute="bottom" id="CPh-jp-Uyb"/>
                            <constraint firstAttribute="trailing" secondItem="1nD-dr-afd" secondAttribute="trailing" id="ClN-uY-lET"/>
                            <constraint firstItem="1nD-dr-afd" firstAttribute="top" secondItem="Dn3-eb-Xp7" secondAttribute="bottom" id="G58-E2-cgd"/>
                            <constraint firstAttribute="trailing" secondItem="Dn3-eb-Xp7" secondAttribute="trailing" id="e9e-i7-ujY"/>
                            <constraint firstAttribute="trailing" secondItem="6XD-Hd-JIV" secondAttribute="trailing" id="iKX-Nj-2S8"/>
                            <constraint firstItem="1nD-dr-afd" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="jWs-RY-JCp"/>
                            <constraint firstItem="Dn3-eb-Xp7" firstAttribute="top" secondItem="g8E-NI-6cy" secondAttribute="bottom" id="kns-bN-gzL"/>
                            <constraint firstItem="Dn3-eb-Xp7" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="mbX-uc-m8F"/>
                            <constraint firstItem="6XD-Hd-JIV" firstAttribute="bottom" secondItem="Dn3-eb-Xp7" secondAttribute="bottom" id="p91-lV-jBL"/>
                            <constraint firstItem="6XD-Hd-JIV" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="qsg-zG-lYB"/>
                        </constraints>
                    </view>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="FSPagerView" id="OcE-VL-TYq"/>
                    <connections>
                        <outlet property="pageControl" destination="6XD-Hd-JIV" id="Obv-i1-0Gv"/>
                        <outlet property="pagerView" destination="Dn3-eb-Xp7" id="8jk-Ur-q3d"/>
                        <outlet property="tableView" destination="1nD-dr-afd" id="uO4-v0-qCU"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="pdp-h1-Udb" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="270" y="818"/>
        </scene>
    </scenes>
</document>


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/BasicExampleViewController.swift
================================================
//
//  ViewController.swift
//  FSPagerViewExample
//
//  Created by Wenchao Ding on 17/12/2016.
//  Copyright © 2016 Wenchao Ding. All rights reserved.
//

import UIKit

class BasicExampleViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate {
    
    fileprivate let sectionTitles = ["Configurations", "Decelaration Distance", "Item Size", "Interitem Spacing", "Number Of Items"]
    fileprivate let configurationTitles = ["Automatic sliding","Infinite"]
    fileprivate let decelerationDistanceOptions = ["Automatic", "1", "2"]
    fileprivate let imageNames = ["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg"]
    fileprivate var numberOfItems = 7
    
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var pagerView: FSPagerView! {
        didSet {
            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
            self.pagerView.itemSize = FSPagerView.automaticSize
        }
    }
    
    @IBOutlet weak var pageControl: FSPageControl! {
        didSet {
            self.pageControl.numberOfPages = self.imageNames.count
            self.pageControl.contentHorizontalAlignment = .right
            self.pageControl.contentInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
        }
    }
    
    // MARK:- UITableViewDataSource
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.sectionTitles.count
    }
    
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            return self.configurationTitles.count
        case 1:
            return self.decelerationDistanceOptions.count
        case 2,3,4:
            return 1
        default:
            return 0
        }
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch indexPath.section {
        case 0:
            // Configurations
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
            cell.textLabel?.text = self.configurationTitles[indexPath.row]
            if indexPath.row == 0 {
                // Automatic Sliding
                cell.accessoryType = self.pagerView.automaticSlidingInterval > 0 ? .checkmark : .none
            } else if indexPath.row == 1 {
                // IsInfinite
                cell.accessoryType = self.pagerView.isInfinite ? .checkmark : .none
            }
            return cell
        case 1:
            // Decelaration Distance
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
            cell.textLabel?.text = self.decelerationDistanceOptions[indexPath.row]
            switch indexPath.row {
            case 0:
                cell.accessoryType = self.pagerView.decelerationDistance == FSPagerView.automaticDistance ? .checkmark : .none
            case 1:
                cell.accessoryType = self.pagerView.decelerationDistance == 1 ? .checkmark : .none
            case 2:
                cell.accessoryType = self.pagerView.decelerationDistance == 2 ? .checkmark : .none
            default:
                break;
            }
            return cell;
        case 2:
            // Item Spacing
            let cell = tableView.dequeueReusableCell(withIdentifier: "slider_cell")!
            let slider = cell.contentView.subviews.first as! UISlider
            slider.tag = 1
            slider.value = {
                let scale: CGFloat = self.pagerView.itemSize.width/self.pagerView.frame.width
                let value: CGFloat = (0.5-scale)*2
                return Float(value)
            }()
            slider.isContinuous = true
            return cell
        case 3:
            // Interitem Spacing
            let cell = tableView.dequeueReusableCell(withIdentifier: "slider_cell")!
            let slider = cell.contentView.subviews.first as! UISlider
            slider.tag = 2
            slider.value = Float(self.pagerView.interitemSpacing/20.0)
            slider.isContinuous = true
            return cell
        case 4:
            // Number Of Items
            let cell = tableView.dequeueReusableCell(withIdentifier: "slider_cell")!
            let slider = cell.contentView.subviews.first as! UISlider
            slider.tag = 3
            slider.minimumValue = 1.0 / 7
            slider.maximumValue = 1.0
            slider.value = Float(self.numberOfItems) / 7.0
            slider.isContinuous = false
            return cell
        default:
            break
        }
        return tableView.dequeueReusableCell(withIdentifier: "cell")!
    }
    
    // MARK:- UITableViewDelegate
    
    func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
        return indexPath.section == 0 || indexPath.section == 1
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        switch indexPath.section {
        case 0:
            if indexPath.row == 0 { // Automatic Sliding
                self.pagerView.automaticSlidingInterval = 3.0 - self.pagerView.automaticSlidingInterval
            } else if indexPath.row == 1 { // IsInfinite
                self.pagerView.isInfinite = !self.pagerView.isInfinite
            }
            tableView.reloadSections([indexPath.section], with: .automatic)
        case 1:
            switch indexPath.row {
            case 0:
                self.pagerView.decelerationDistance = FSPagerView.automaticDistance
            case 1:
                self.pagerView.decelerationDistance = 1
            case 2:
                self.pagerView.decelerationDistance = 2
            default:
                break
            }
            tableView.reloadSections([indexPath.section], with: .automatic)
        default:
            break
        }
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return self.sectionTitles[section]
    }
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return section == 0 ? 40 : 20
    }
    
    // MARK:- FSPagerView DataSource
    
    public func numberOfItems(in pagerView: FSPagerView) -> Int {
        return self.numberOfItems
    }
    
    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        cell.imageView?.clipsToBounds = true
        cell.textLabel?.text = index.description+index.description
        return cell
    }
    
    // MARK:- FSPagerView Delegate
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
    
    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
        self.pageControl.currentPage = targetIndex
    }
    
    func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
        self.pageControl.currentPage = pagerView.currentIndex
    }
    
    @IBAction func sliderValueChanged(_ sender: UISlider) {
        switch sender.tag {
        case 1:
            let newScale = 0.5+CGFloat(sender.value)*0.5 // [0.5 - 1.0]
            self.pagerView.itemSize = self.pagerView.frame.size.applying(CGAffineTransform(scaleX: newScale, y: newScale))
        case 2:
            self.pagerView.interitemSpacing = CGFloat(sender.value) * 20 // [0 - 20]
        case 3:
            self.numberOfItems = Int(roundf(sender.value*7.0))
            self.pageControl.numberOfPages = self.numberOfItems
            self.pagerView.reloadData()
        default:
            break
        }
    }
}




================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/PageControlExampleViewController.swift
================================================
//
//  PageControlExampleViewController.swift
//  FSPagerViewExample
//
//  Created by Wenchao Ding on 17/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

import UIKit

class PageControlExampleViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate {
    
    fileprivate let imageNames = ["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg"]
    fileprivate let pageControlStyles = ["Default", "Ring", "UIImage", "UIBezierPath - Star", "UIBezierPath - Heart"]
    fileprivate let pageControlAlignments = ["Right", "Center", "Left"]
    fileprivate let sectionTitles = ["Style", "Item Spacing", "Interitem Spacing", "Horizontal Alignment"]
    
    fileprivate var styleIndex = 0 {
        didSet {
            // Clean up
            self.pageControl.setStrokeColor(nil, for: .normal)
            self.pageControl.setStrokeColor(nil, for: .selected)
            self.pageControl.setFillColor(nil, for: .normal)
            self.pageControl.setFillColor(nil, for: .selected)
            self.pageControl.setImage(nil, for: .normal)
            self.pageControl.setImage(nil, for: .selected)
            self.pageControl.setPath(nil, for: .normal)
            self.pageControl.setPath(nil, for: .selected)
            switch self.styleIndex {
            case 0:
                // Default
                break
            case 1:
                // Ring
                self.pageControl.setStrokeColor(.green, for: .normal)
                self.pageControl.setStrokeColor(.green, for: .selected)
                self.pageControl.setFillColor(.green, for: .selected)
            case 2:
                // Image
                self.pageControl.setImage(UIImage(named:"icon_footprint"), for: .normal)
                self.pageControl.setImage(UIImage(named:"icon_cat"), for: .selected)
            case 3:
                // UIBezierPath - Star
                self.pageControl.setStrokeColor(.yellow, for: .normal)
                self.pageControl.setStrokeColor(.yellow, for: .selected)
                self.pageControl.setFillColor(.yellow, for: .selected)
                self.pageControl.setPath(self.starPath, for: .normal)
                self.pageControl.setPath(self.starPath, for: .selected)
            case 4:
                // UIBezierPath - Heart
                let color = UIColor(red: 255/255.0, green: 102/255.0, blue: 255/255.0, alpha: 1.0)
                self.pageControl.setStrokeColor(color, for: .normal)
                self.pageControl.setStrokeColor(color, for: .selected)
                self.pageControl.setFillColor(color, for: .selected)
                self.pageControl.setPath(self.heartPath, for: .normal)
                self.pageControl.setPath(self.heartPath, for: .selected)
            default:
                break
            }
        }
    }
    fileprivate var alignmentIndex = 0 {
        didSet {
            self.pageControl.contentHorizontalAlignment = [.right,.center,.left][self.alignmentIndex]
        }
    }
    
    // ⭐️
    fileprivate var starPath: UIBezierPath {
        let width = self.pageControl.itemSpacing
        let height = self.pageControl.itemSpacing
        let starPath = UIBezierPath()
        starPath.move(to: CGPoint(x: width*0.5, y: 0))
        starPath.addLine(to: CGPoint(x: width*0.677, y: height*0.257))
        starPath.addLine(to: CGPoint(x: width*0.975, y: height*0.345))
        starPath.addLine(to: CGPoint(x: width*0.785, y: height*0.593))
        starPath.addLine(to: CGPoint(x: width*0.794, y: height*0.905))
        starPath.addLine(to: CGPoint(x: width*0.5, y: height*0.8))
        starPath.addLine(to: CGPoint(x: width*0.206, y: height*0.905))
        starPath.addLine(to: CGPoint(x: width*0.215, y: height*0.593))
        starPath.addLine(to: CGPoint(x: width*0.025, y: height*0.345))
        starPath.addLine(to: CGPoint(x: width*0.323, y: height*0.257))
        starPath.close()
        return starPath
    }
    
    // ❤️
    fileprivate var heartPath: UIBezierPath {
        let width = self.pageControl.itemSpacing
        let height = self.pageControl.itemSpacing
        let heartPath = UIBezierPath()
        heartPath.move(to: CGPoint(x: width*0.5, y: height))
        heartPath.addCurve(
            to: CGPoint(x: 0, y: height*0.25),
            controlPoint1: CGPoint(x: width*0.5, y: height*0.75) ,
            controlPoint2: CGPoint(x: 0, y: height*0.5)
        )
        heartPath.addArc(
            withCenter: CGPoint(x: width*0.25,y: height*0.25),
            radius: width * 0.25,
            startAngle: .pi,
            endAngle: 0,
            clockwise: true
        )
        heartPath.addArc(
            withCenter: CGPoint(x: width*0.75, y: height*0.25),
            radius: width * 0.25,
            startAngle: .pi,
            endAngle: 0,
            clockwise: true
        )
        heartPath.addCurve(
            to: CGPoint(x: width*0.5, y: height),
            controlPoint1: CGPoint(x: width, y: height*0.5),
            controlPoint2: CGPoint(x: width*0.5, y: height*0.75)
        )
        heartPath.close()
        return heartPath
    }
    
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var pagerView: FSPagerView! {
        didSet {
            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
        }
    }
    
    @IBOutlet weak var pageControl: FSPageControl! {
        didSet {
            self.pageControl.numberOfPages = self.imageNames.count
            self.pageControl.contentHorizontalAlignment = .right
            self.pageControl.contentInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
            self.pageControl.hidesForSinglePage = true
        }
    }
    
    // MARK:- UITableViewDataSource
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return self.sectionTitles.count
    }
    
    @available(iOS 2.0, *)
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            return self.pageControlStyles.count
        case 1,2:
            return 1
        case 3:
            return self.pageControlAlignments.count
        default:
            break
        }
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        switch indexPath.section {
        case 0:
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
            cell.textLabel?.text = self.pageControlStyles[indexPath.row]
            cell.accessoryType = self.styleIndex==indexPath.row ? .checkmark : .none
            return cell
        case 1:
            let cell = tableView.dequeueReusableCell(withIdentifier: "slider_cell")!
            let slider = cell.contentView.subviews.first as! UISlider
            slider.tag = indexPath.section
            slider.value = Float((self.pageControl.itemSpacing-6.0)/10.0)
            return cell
        case 2:
            let cell = tableView.dequeueReusableCell(withIdentifier: "slider_cell")!
            let slider = cell.contentView.subviews.first as! UISlider
            slider.tag = indexPath.section
            slider.value = Float((self.pageControl.interitemSpacing-6.0)/10.0)
            return cell
        case 3:
            let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
            cell.textLabel?.text = self.pageControlAlignments[indexPath.row]
            cell.accessoryType = self.alignmentIndex==indexPath.row ? .checkmark : .none
            return cell
        default:
            break
        }
        return tableView.dequeueReusableCell(withIdentifier: "cell")!
    }
    
    // MARK:- UITableViewDelegate
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return self.sectionTitles[section]
    }
    
    func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
        return [0,3].contains(indexPath.section) // 0 or 3
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        switch indexPath.section {
        case 0:
            self.styleIndex = indexPath.row
            tableView.reloadSections([indexPath.section], with: .automatic)
        case 3:
            self.alignmentIndex = indexPath.row
            tableView.reloadSections([indexPath.section], with: .automatic)
        default:
            break
        }
    }
    
    // MARK:- FSPagerViewDataSource
    
    func numberOfItems(in pagerView: FSPagerView) -> Int {
        return self.imageNames.count
    }
    
    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        return cell
    }
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
    }
    
    // MARK:- FSPagerViewDelegate
    
    func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
        self.pageControl.currentPage = targetIndex
    }
    
    // MARK:- Target Actions
    
    @IBAction func sliderValueChanged(_ sender: UISlider) {
        switch sender.tag {
        case 1:
            self.pageControl.itemSpacing = 6.0 + CGFloat(sender.value*10.0) // [6 - 16]
            // Redraw UIBezierPath
            if [3,4].contains(self.styleIndex) {
                let index = self.styleIndex
                self.styleIndex = index
            }
        case 2:
            self.pageControl.interitemSpacing = 6.0 + CGFloat(sender.value*10.0) // [6 - 16]
        default:
            break
        }
    }
    
}



================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample/TransformerExampleViewController.swift
================================================
//
//  TransformerExampleViewController.swift
//  FSPagerViewExample
//
//  Created by Wenchao Ding on 09/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

import UIKit

class TransformerExampleViewController: UIViewController,FSPagerViewDataSource,FSPagerViewDelegate, UITableViewDataSource,UITableViewDelegate {
    
    fileprivate let imageNames = ["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg"]
    fileprivate let transformerNames = ["cross fading", "zoom out", "depth", "linear", "overlap", "ferris wheel", "inverted ferris wheel", "coverflow", "cubic"]
    fileprivate let transformerTypes: [FSPagerViewTransformerType] = [.crossFading,
                                                                      .zoomOut,
                                                                      .depth,
                                                                      .linear,
                                                                      .overlap,
                                                                      .ferrisWheel,
                                                                      .invertedFerrisWheel,
                                                                      .coverFlow,
                                                                      .cubic]
    fileprivate var typeIndex = 0 {
        didSet {
            let type = self.transformerTypes[typeIndex]
            self.pagerView.transformer = FSPagerViewTransformer(type:type)
            switch type {
            case .crossFading, .zoomOut, .depth:
                self.pagerView.itemSize = FSPagerView.automaticSize
                self.pagerView.decelerationDistance = 1
            case .linear, .overlap:
                let transform = CGAffineTransform(scaleX: 0.6, y: 0.75)
                self.pagerView.itemSize = self.pagerView.frame.size.applying(transform)
                self.pagerView.decelerationDistance = FSPagerView.automaticDistance
            case .ferrisWheel, .invertedFerrisWheel:
                self.pagerView.itemSize = CGSize(width: 180, height: 140)
                self.pagerView.decelerationDistance = FSPagerView.automaticDistance
            case .coverFlow:
                self.pagerView.itemSize = CGSize(width: 220, height: 170)
                self.pagerView.decelerationDistance = FSPagerView.automaticDistance
            case .cubic:
                let transform = CGAffineTransform(scaleX: 0.9, y: 0.9)
                self.pagerView.itemSize = self.pagerView.frame.size.applying(transform)
                self.pagerView.decelerationDistance = 1
            }
        }
    }
    
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var pagerView: FSPagerView! {
        didSet {
            self.pagerView.register(FSPagerViewCell.self, forCellWithReuseIdentifier: "cell")
            self.typeIndex = 0
        }
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let index = self.typeIndex
        self.typeIndex = index // Manually trigger didSet
    }
    
    // MARK:- UITableViewDataSource
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    @available(iOS 2.0, *)
    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.transformerNames.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
        cell.textLabel?.text = self.transformerNames[indexPath.row]
        cell.accessoryType = indexPath.row == self.typeIndex ? .checkmark : .none
        return cell
    }
    
    // MARK:- UITableViewDelegate
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        self.typeIndex = indexPath.row
        if let visibleRows = tableView.indexPathsForVisibleRows {
            tableView.reloadRows(at: visibleRows, with: .automatic)
        }
    }
    
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Transformers"
    }
    
    // MARK:- FSPagerViewDataSource
    
    public func numberOfItems(in pagerView: FSPagerView) -> Int {
        return imageNames.count
    }
    
    public func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
        let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index)
        cell.imageView?.image = UIImage(named: self.imageNames[index])
        cell.imageView?.contentMode = .scaleAspectFill
        cell.imageView?.clipsToBounds = true
        return cell
    }
    
    func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
        pagerView.deselectItem(at: index, animated: true)
        pagerView.scrollToItem(at: index, animated: true)
    }
    
}


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		F931E00C2158A1F3001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */; };
		F954839A1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */; };
		F954839B1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */; };
		F9580B571E5D995400C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B511E5D995400C5B267 /* FSPageControl.swift */; };
		F9580B581E5D995400C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */; };
		F9580B591E5D995400C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B531E5D995400C5B267 /* FSPagerView.swift */; };
		F9580B5A1E5D995400C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B541E5D995400C5B267 /* FSPagerViewCell.swift */; };
		F9580B5B1E5D995400C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B551E5D995400C5B267 /* FSPageViewLayout.swift */; };
		F9580B5C1E5D995400C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */; };
		F9C6942F1E40C583007084B6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C694241E40C583007084B6 /* AppDelegate.swift */; };
		F9C694311E40C583007084B6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9C694261E40C583007084B6 /* LaunchScreen.storyboard */; };
		F9C694321E40C583007084B6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9C694281E40C583007084B6 /* Main.storyboard */; };
		F9C694331E40C583007084B6 /* BasicExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */; };
		F9C694351E40C583007084B6 /* PageControlExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */; };
		F9C694361E40C583007084B6 /* TransformerExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */; };
		F9C6945A1E40C720007084B6 /* FSPagerViewExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */; };
		F9C694711E40C8DA007084B6 /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C694621E40C8DA007084B6 /* 1.jpg */; };
		F9C694791E40C8DA007084B6 /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946A1E40C8DA007084B6 /* 2.jpg */; };
		F9C6947A1E40C8DA007084B6 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946B1E40C8DA007084B6 /* 3.jpg */; };
		F9C6947B1E40C8DA007084B6 /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946C1E40C8DA007084B6 /* 4.jpg */; };
		F9C6947C1E40C8DA007084B6 /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946D1E40C8DA007084B6 /* 5.jpg */; };
		F9C6947D1E40C8DA007084B6 /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946E1E40C8DA007084B6 /* 6.jpg */; };
		F9C6947E1E40C8DA007084B6 /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F9C6946F1E40C8DA007084B6 /* 7.jpg */; };
		F9DF961F1E7F5B360010506C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9DF961E1E7F5B360010506C /* Assets.xcassets */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		F9C6945C1E40C720007084B6 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = F97C966F1E1FDE25002D9E7E /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = F97C96761E1FDE25002D9E7E;
			remoteInfo = FSPagerViewExample;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		50989DFE2151DB29004DBB4A /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = "<group>"; };
		F931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = "<group>"; };
		F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = "<group>"; };
		F9580B511E5D995400C5B267 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = "<group>"; };
		F9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = "<group>"; };
		F9580B531E5D995400C5B267 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = "<group>"; };
		F9580B541E5D995400C5B267 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = "<group>"; };
		F9580B551E5D995400C5B267 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = "<group>"; };
		F9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = "<group>"; };
		F97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FSPagerViewExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
		F9C694241E40C583007084B6 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		F9C694271E40C583007084B6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		F9C694291E40C583007084B6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		F9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicExampleViewController.swift; sourceTree = "<group>"; };
		F9C6942B1E40C583007084B6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		F9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PageControlExampleViewController.swift; sourceTree = "<group>"; };
		F9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransformerExampleViewController.swift; sourceTree = "<group>"; };
		F9C694571E40C720007084B6 /* FSPagerViewExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FSPagerViewExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		F9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSPagerViewExampleUITests.swift; sourceTree = "<group>"; };
		F9C6945B1E40C720007084B6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		F9C694621E40C8DA007084B6 /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = "<group>"; };
		F9C6946A1E40C8DA007084B6 /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = "<group>"; };
		F9C6946B1E40C8DA007084B6 /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = "<group>"; };
		F9C6946C1E40C8DA007084B6 /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = "<group>"; };
		F9C6946D1E40C8DA007084B6 /* 5.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 5.jpg; sourceTree = "<group>"; };
		F9C6946E1E40C8DA007084B6 /* 6.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 6.jpg; sourceTree = "<group>"; };
		F9C6946F1E40C8DA007084B6 /* 7.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 7.jpg; sourceTree = "<group>"; };
		F9DF961E1E7F5B360010506C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		F97C96741E1FDE25002D9E7E /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		F9C694541E40C720007084B6 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		F9580B501E5D995400C5B267 /* Sources */ = {
			isa = PBXGroup;
			children = (
				F9580B511E5D995400C5B267 /* FSPageControl.swift */,
				F9580B521E5D995400C5B267 /* FSPagerCollectionView.swift */,
				F9580B531E5D995400C5B267 /* FSPagerView.swift */,
				F9580B541E5D995400C5B267 /* FSPagerViewCell.swift */,
				F9580B551E5D995400C5B267 /* FSPageViewLayout.swift */,
				F9580B561E5D995400C5B267 /* FSPageViewTransformer.swift */,
				F95483991E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift */,
				50989DFE2151DB29004DBB4A /* FSPagerViewObjcCompat.h */,
				F931E00B2158A1F3001B2A01 /* FSPagerViewObjcCompat.m */,
			);
			name = Sources;
			path = ../Sources;
			sourceTree = "<group>";
		};
		F97C966E1E1FDE25002D9E7E = {
			isa = PBXGroup;
			children = (
				F9580B501E5D995400C5B267 /* Sources */,
				F9C694231E40C583007084B6 /* FSPagerViewExample */,
				F9C694581E40C720007084B6 /* FSPagerViewExampleUITests */,
				F97C96781E1FDE25002D9E7E /* Products */,
			);
			sourceTree = "<group>";
		};
		F97C96781E1FDE25002D9E7E /* Products */ = {
			isa = PBXGroup;
			children = (
				F97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */,
				F9C694571E40C720007084B6 /* FSPagerViewExampleUITests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		F9C694231E40C583007084B6 /* FSPagerViewExample */ = {
			isa = PBXGroup;
			children = (
				F9C694241E40C583007084B6 /* AppDelegate.swift */,
				F9C6942A1E40C583007084B6 /* BasicExampleViewController.swift */,
				F9C6942E1E40C583007084B6 /* TransformerExampleViewController.swift */,
				F9C6942C1E40C583007084B6 /* PageControlExampleViewController.swift */,
				F9C694261E40C583007084B6 /* LaunchScreen.storyboard */,
				F9C694281E40C583007084B6 /* Main.storyboard */,
				F9C694611E40C8DA007084B6 /* Resources */,
				F9C694371E40C59E007084B6 /* Supporting Files */,
			);
			path = FSPagerViewExample;
			sourceTree = "<group>";
		};
		F9C694371E40C59E007084B6 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				F9C6942B1E40C583007084B6 /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		F9C694581E40C720007084B6 /* FSPagerViewExampleUITests */ = {
			isa = PBXGroup;
			children = (
				F9C694591E40C720007084B6 /* FSPagerViewExampleUITests.swift */,
				F9C6945B1E40C720007084B6 /* Info.plist */,
			);
			path = FSPagerViewExampleUITests;
			sourceTree = "<group>";
		};
		F9C694611E40C8DA007084B6 /* Resources */ = {
			isa = PBXGroup;
			children = (
				F9DF961E1E7F5B360010506C /* Assets.xcassets */,
				F9C694621E40C8DA007084B6 /* 1.jpg */,
				F9C6946A1E40C8DA007084B6 /* 2.jpg */,
				F9C6946B1E40C8DA007084B6 /* 3.jpg */,
				F9C6946C1E40C8DA007084B6 /* 4.jpg */,
				F9C6946D1E40C8DA007084B6 /* 5.jpg */,
				F9C6946E1E40C8DA007084B6 /* 6.jpg */,
				F9C6946F1E40C8DA007084B6 /* 7.jpg */,
			);
			name = Resources;
			path = ../../Resources;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		F97C96761E1FDE25002D9E7E /* FSPagerViewExample */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = F97C969F1E1FDE25002D9E7E /* Build configuration list for PBXNativeTarget "FSPagerViewExample" */;
			buildPhases = (
				F97C96731E1FDE25002D9E7E /* Sources */,
				F97C96741E1FDE25002D9E7E /* Frameworks */,
				F97C96751E1FDE25002D9E7E /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = FSPagerViewExample;
			productName = FSPageSliderExample;
			productReference = F97C96771E1FDE25002D9E7E /* FSPagerViewExample.app */;
			productType = "com.apple.product-type.application";
		};
		F9C694561E40C720007084B6 /* FSPagerViewExampleUITests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = F9C6945E1E40C720007084B6 /* Build configuration list for PBXNativeTarget "FSPagerViewExampleUITests" */;
			buildPhases = (
				F9C694531E40C720007084B6 /* Sources */,
				F9C694541E40C720007084B6 /* Frameworks */,
				F9C694551E40C720007084B6 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				F9C6945D1E40C720007084B6 /* PBXTargetDependency */,
			);
			name = FSPagerViewExampleUITests;
			productName = FSPagerViewExampleUITests;
			productReference = F9C694571E40C720007084B6 /* FSPagerViewExampleUITests.xctest */;
			productType = "com.apple.product-type.bundle.ui-testing";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		F97C966F1E1FDE25002D9E7E /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 0820;
				LastUpgradeCheck = 1030;
				ORGANIZATIONNAME = "Wenchao Ding";
				TargetAttributes = {
					F97C96761E1FDE25002D9E7E = {
						CreatedOnToolsVersion = 8.2.1;
						DevelopmentTeam = HZF422TY46;
						LastSwiftMigration = 0900;
						ProvisioningStyle = Automatic;
					};
					F9C694561E40C720007084B6 = {
						CreatedOnToolsVersion = 8.2.1;
						DevelopmentTeam = HZF422TY46;
						LastSwiftMigration = 0900;
						ProvisioningStyle = Automatic;
						TestTargetID = F97C96761E1FDE25002D9E7E;
					};
				};
			};
			buildConfigurationList = F97C96721E1FDE25002D9E7E /* Build configuration list for PBXProject "FSPagerViewExample" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = F97C966E1E1FDE25002D9E7E;
			productRefGroup = F97C96781E1FDE25002D9E7E /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				F97C96761E1FDE25002D9E7E /* FSPagerViewExample */,
				F9C694561E40C720007084B6 /* FSPagerViewExampleUITests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		F97C96751E1FDE25002D9E7E /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F9C694321E40C583007084B6 /* Main.storyboard in Resources */,
				F9C6947B1E40C8DA007084B6 /* 4.jpg in Resources */,
				F9C6947A1E40C8DA007084B6 /* 3.jpg in Resources */,
				F9C6947D1E40C8DA007084B6 /* 6.jpg in Resources */,
				F9DF961F1E7F5B360010506C /* Assets.xcassets in Resources */,
				F9C6947C1E40C8DA007084B6 /* 5.jpg in Resources */,
				F9C694311E40C583007084B6 /* LaunchScreen.storyboard in Resources */,
				F9C694791E40C8DA007084B6 /* 2.jpg in Resources */,
				F9C6947E1E40C8DA007084B6 /* 7.jpg in Resources */,
				F9C694711E40C8DA007084B6 /* 1.jpg in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		F9C694551E40C720007084B6 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		F97C96731E1FDE25002D9E7E /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F9580B571E5D995400C5B267 /* FSPageControl.swift in Sources */,
				F9580B581E5D995400C5B267 /* FSPagerCollectionView.swift in Sources */,
				F9C6942F1E40C583007084B6 /* AppDelegate.swift in Sources */,
				F954839A1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */,
				F9580B591E5D995400C5B267 /* FSPagerView.swift in Sources */,
				F9C694351E40C583007084B6 /* PageControlExampleViewController.swift in Sources */,
				F9C694361E40C583007084B6 /* TransformerExampleViewController.swift in Sources */,
				F9580B5C1E5D995400C5B267 /* FSPageViewTransformer.swift in Sources */,
				F9C694331E40C583007084B6 /* BasicExampleViewController.swift in Sources */,
				F9580B5A1E5D995400C5B267 /* FSPagerViewCell.swift in Sources */,
				F9580B5B1E5D995400C5B267 /* FSPageViewLayout.swift in Sources */,
				F931E00C2158A1F3001B2A01 /* FSPagerViewObjcCompat.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		F9C694531E40C720007084B6 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F954839B1E625F1E0069FD7E /* FSPagerViewLayoutAttributes.swift in Sources */,
				F9C6945A1E40C720007084B6 /* FSPagerViewExampleUITests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		F9C6945D1E40C720007084B6 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = F97C96761E1FDE25002D9E7E /* FSPagerViewExample */;
			targetProxy = F9C6945C1E40C720007084B6 /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin PBXVariantGroup section */
		F9C694261E40C583007084B6 /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				F9C694271E40C583007084B6 /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
		F9C694281E40C583007084B6 /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				F9C694291E40C583007084B6 /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		F97C969D1E1FDE25002D9E7E /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		F97C969E1E1FDE25002D9E7E /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		F97C96A01E1FDE25002D9E7E /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				DEVELOPMENT_TEAM = HZF422TY46;
				INFOPLIST_FILE = "$(SRCROOT)/FSPagerViewExample/Info.plist";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExample;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 5.0;
			};
			name = Debug;
		};
		F97C96A11E1FDE25002D9E7E /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				DEVELOPMENT_TEAM = HZF422TY46;
				INFOPLIST_FILE = "$(SRCROOT)/FSPagerViewExample/Info.plist";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExample;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 5.0;
			};
			name = Release;
		};
		F9C6945F1E40C720007084B6 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				DEVELOPMENT_TEAM = HZF422TY46;
				INFOPLIST_FILE = FSPagerViewExampleUITests/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 10.2;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExampleUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 5.0;
				TEST_TARGET_NAME = FSPagerViewExample;
			};
			name = Debug;
		};
		F9C694601E40C720007084B6 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				DEVELOPMENT_TEAM = HZF422TY46;
				INFOPLIST_FILE = FSPagerViewExampleUITests/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 10.2;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerViewExampleUITests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
				SWIFT_VERSION = 5.0;
				TEST_TARGET_NAME = FSPagerViewExample;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		F97C96721E1FDE25002D9E7E /* Build configuration list for PBXProject "FSPagerViewExample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				F97C969D1E1FDE25002D9E7E /* Debug */,
				F97C969E1E1FDE25002D9E7E /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		F97C969F1E1FDE25002D9E7E /* Build configuration list for PBXNativeTarget "FSPagerViewExample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				F97C96A01E1FDE25002D9E7E /* Debug */,
				F97C96A11E1FDE25002D9E7E /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		F9C6945E1E40C720007084B6 /* Build configuration list for PBXNativeTarget "FSPagerViewExampleUITests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				F9C6945F1E40C720007084B6 /* Debug */,
				F9C694601E40C720007084B6 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = F97C966F1E1FDE25002D9E7E /* Project object */;
}


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:/Users/wenchaoding/Developer/Xcode/FSPageSlider/FSPageSliderExample-Swift/FSPagerViewExample.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExampleUITests/FSPagerViewExampleUITests.swift
================================================
//
//  FSPagerViewExampleUITests.swift
//  FSPagerViewExampleUITests
//
//  Created by Wenchao Ding on 31/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

import XCTest

class FSPagerViewExampleUITests: XCTestCase {
        
    override func setUp() {
        super.setUp()
        
        // Put setup code here. This method is called before the invocation of each test method in the class.
        
        // In UI tests it is usually best to stop immediately when a failure occurs.
        continueAfterFailure = false
        // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
        XCUIApplication().launch()

        // 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.
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }
    
    func testExample() {
        // Use recording to get started writing UI tests.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }
    
}


================================================
FILE: FSPageViewExample-Swift/FSPagerViewExampleUITests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>BNDL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
</dict>
</plist>


================================================
FILE: FSPagerView/FSPagerView/FSPagerView.h
================================================
//
//  FSPagerView.h
//  FSPagerView
//
//  Created by Wenchao Ding on 22/02/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>

//! Project version number for FSPagerView.
FOUNDATION_EXPORT double FSPagerViewVersionNumber;

//! Project version string for FSPagerView.
FOUNDATION_EXPORT const unsigned char FSPagerViewVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <FSPagerView/PublicHeader.h>




================================================
FILE: FSPagerView/FSPagerView/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleShortVersionString</key>
	<string>0.8.3</string>
	<key>CFBundleVersion</key>
	<string>$(CURRENT_PROJECT_VERSION)</string>
	<key>NSPrincipalClass</key>
	<string></string>
</dict>
</plist>


================================================
FILE: FSPagerView/FSPagerView.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		50C44A1D2150E7800093B3E9 /* FSPagerViewObjcCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */; };
		F931E0062158A062001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */; };
		F9580B7B1E5D9F0600C5B267 /* FSPagerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F9580B791E5D9F0600C5B267 /* FSPagerView.h */; settings = {ATTRIBUTES = (Public, ); }; };
		F9580B881E5D9F2B00C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B821E5D9F2B00C5B267 /* FSPageControl.swift */; };
		F9580B891E5D9F2B00C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */; };
		F9580B8A1E5D9F2B00C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B841E5D9F2B00C5B267 /* FSPagerView.swift */; };
		F9580B8B1E5D9F2B00C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */; };
		F9580B8C1E5D9F2B00C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */; };
		F9580B8D1E5D9F2B00C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */; };
		F9D7BD2A1E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = "<group>"; };
		F931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FSPagerViewObjcCompat.m; sourceTree = "<group>"; };
		F9580B761E5D9F0600C5B267 /* FSPagerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FSPagerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		F9580B791E5D9F0600C5B267 /* FSPagerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FSPagerView.h; sourceTree = "<group>"; };
		F9580B7A1E5D9F0600C5B267 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		F9580B821E5D9F2B00C5B267 /* FSPageControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageControl.swift; sourceTree = "<group>"; };
		F9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerCollectionView.swift; sourceTree = "<group>"; };
		F9580B841E5D9F2B00C5B267 /* FSPagerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerView.swift; sourceTree = "<group>"; };
		F9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewCell.swift; sourceTree = "<group>"; };
		F9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewLayout.swift; sourceTree = "<group>"; };
		F9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPageViewTransformer.swift; sourceTree = "<group>"; };
		F9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FSPagerViewLayoutAttributes.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		F9580B721E5D9F0600C5B267 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		F9580B6C1E5D9F0600C5B267 = {
			isa = PBXGroup;
			children = (
				F9580B811E5D9F2B00C5B267 /* Sources */,
				F9580B781E5D9F0600C5B267 /* FSPagerView */,
				F9580B771E5D9F0600C5B267 /* Products */,
			);
			sourceTree = "<group>";
		};
		F9580B771E5D9F0600C5B267 /* Products */ = {
			isa = PBXGroup;
			children = (
				F9580B761E5D9F0600C5B267 /* FSPagerView.framework */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		F9580B781E5D9F0600C5B267 /* FSPagerView */ = {
			isa = PBXGroup;
			children = (
				F9580B791E5D9F0600C5B267 /* FSPagerView.h */,
				F9580B7A1E5D9F0600C5B267 /* Info.plist */,
			);
			path = FSPagerView;
			sourceTree = "<group>";
		};
		F9580B811E5D9F2B00C5B267 /* Sources */ = {
			isa = PBXGroup;
			children = (
				F9580B821E5D9F2B00C5B267 /* FSPageControl.swift */,
				F9580B831E5D9F2B00C5B267 /* FSPagerCollectionView.swift */,
				F9580B841E5D9F2B00C5B267 /* FSPagerView.swift */,
				F9580B851E5D9F2B00C5B267 /* FSPagerViewCell.swift */,
				F9580B861E5D9F2B00C5B267 /* FSPageViewLayout.swift */,
				F9D7BD291E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift */,
				F9580B871E5D9F2B00C5B267 /* FSPageViewTransformer.swift */,
				50C44A1C2150E7800093B3E9 /* FSPagerViewObjcCompat.h */,
				F931E0052158A062001B2A01 /* FSPagerViewObjcCompat.m */,
			);
			name = Sources;
			path = ../Sources;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXHeadersBuildPhase section */
		F9580B731E5D9F0600C5B267 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F9580B7B1E5D9F0600C5B267 /* FSPagerView.h in Headers */,
				50C44A1D2150E7800093B3E9 /* FSPagerViewObjcCompat.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXHeadersBuildPhase section */

/* Begin PBXNativeTarget section */
		F9580B751E5D9F0600C5B267 /* FSPagerView */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = F9580B7E1E5D9F0600C5B267 /* Build configuration list for PBXNativeTarget "FSPagerView" */;
			buildPhases = (
				F9580B711E5D9F0600C5B267 /* Sources */,
				F9580B721E5D9F0600C5B267 /* Frameworks */,
				F9580B731E5D9F0600C5B267 /* Headers */,
				F9580B741E5D9F0600C5B267 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = FSPagerView;
			productName = FSPagerView;
			productReference = F9580B761E5D9F0600C5B267 /* FSPagerView.framework */;
			productType = "com.apple.product-type.framework";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		F9580B6D1E5D9F0600C5B267 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 1030;
				ORGANIZATIONNAME = "Wenchao Ding";
				TargetAttributes = {
					F9580B751E5D9F0600C5B267 = {
						CreatedOnToolsVersion = 8.2.1;
						DevelopmentTeam = HZF422TY46;
						LastSwiftMigration = 1000;
						ProvisioningStyle = Automatic;
					};
				};
			};
			buildConfigurationList = F9580B701E5D9F0600C5B267 /* Build configuration list for PBXProject "FSPagerView" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = F9580B6C1E5D9F0600C5B267;
			productRefGroup = F9580B771E5D9F0600C5B267 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				F9580B751E5D9F0600C5B267 /* FSPagerView */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		F9580B741E5D9F0600C5B267 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		F9580B711E5D9F0600C5B267 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F9D7BD2A1E63DD5F003F6A0E /* FSPagerViewLayoutAttributes.swift in Sources */,
				F9580B8D1E5D9F2B00C5B267 /* FSPageViewTransformer.swift in Sources */,
				F9580B881E5D9F2B00C5B267 /* FSPageControl.swift in Sources */,
				F9580B891E5D9F2B00C5B267 /* FSPagerCollectionView.swift in Sources */,
				F9580B8C1E5D9F2B00C5B267 /* FSPageViewLayout.swift in Sources */,
				F9580B8A1E5D9F2B00C5B267 /* FSPagerView.swift in Sources */,
				F9580B8B1E5D9F2B00C5B267 /* FSPagerViewCell.swift in Sources */,
				F931E0062158A062001B2A01 /* FSPagerViewObjcCompat.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		F9580B7C1E5D9F0600C5B267 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				CURRENT_PROJECT_VERSION = 1;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Debug;
		};
		F9580B7D1E5D9F0600C5B267 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				CURRENT_PROJECT_VERSION = 1;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Release;
		};
		F9580B7F1E5D9F0600C5B267 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_IDENTITY = "";
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = HZF422TY46;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = FSPagerView/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerView;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
			};
			name = Debug;
		};
		F9580B801E5D9F0600C5B267 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_IDENTITY = "";
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = HZF422TY46;
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = FSPagerView/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.wenchaod.FSPagerView;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 5.0;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		F9580B701E5D9F0600C5B267 /* Build configuration list for PBXProject "FSPagerView" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				F9580B7C1E5D9F0600C5B267 /* Debug */,
				F9580B7D1E5D9F0600C5B267 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		F9580B7E1E5D9F0600C5B267 /* Build configuration list for PBXNativeTarget "FSPagerView" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				F9580B7F1E5D9F0600C5B267 /* Debug */,
				F9580B801E5D9F0600C5B267 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = F9580B6D1E5D9F0600C5B267 /* Project object */;
}


================================================
FILE: FSPagerView/FSPagerView.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:FSPagerView.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: FSPagerView/FSPagerView.xcodeproj/xcshareddata/xcschemes/FSPagerView.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1030"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "F9580B751E5D9F0600C5B267"
               BuildableName = "FSPagerView.framework"
               BlueprintName = "FSPagerView"
               ReferencedContainer = "container:FSPagerView.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
      </Testables>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "F9580B751E5D9F0600C5B267"
            BuildableName = "FSPagerView.framework"
            BlueprintName = "FSPagerView"
            ReferencedContainer = "container:FSPagerView.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "F9580B751E5D9F0600C5B267"
            BuildableName = "FSPagerView.framework"
            BlueprintName = "FSPagerView"
            ReferencedContainer = "container:FSPagerView.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: FSPagerView.podspec
================================================
Pod::Spec.new do |s|

  s.name             = "FSPagerView"
  s.version          = "0.8.3"
  s.summary          = "FSPagerView is an elegant Screen Slide Library for making Banner、Product Show、Welcome/Guide Pages、Screen/ViewController Sliders."
  
  s.homepage         = "https://github.com/WenchaoD/FSPagerView"
  s.screenshots      = "https://cloud.githubusercontent.com/assets/5186464/22686432/19b567f8-ed5f-11e6-885d-bd660c98b507.gif"
  s.license          = 'MIT'
  s.author           = { "Wenchao Ding" => "f33chobits@gmail.com" }
  s.source           = { :git => "https://github.com/WenchaoD/FSPagerView.git", :tag => s.version.to_s }

  s.platform     = :ios
  s.ios.deployment_target = '9.0'
  s.requires_arc = true
  s.framework    = 'UIKit'
  s.source_files = 'Sources/*.{swift,h,m}'
  s.swift_version = '5.3'
  s.cocoapods_version = '>= 1.4.0'

end


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.h
================================================
//
//  AppDelegate.h
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end



================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.m
================================================
//
//  AppDelegate.m
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    return YES;
}


- (void)applicationWillResignActive:(UIApplication *)application {
    // 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.
    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}


- (void)applicationDidEnterBackground:(UIApplication *)application {
    // 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.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}


- (void)applicationWillEnterForeground:(UIApplication *)application {
    // 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.
}


- (void)applicationDidBecomeActive:(UIApplication *)application {
    // 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.
}


- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}


@end


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11106"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
        <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Navigation Controller-->
        <scene sceneID="1gZ-cN-8UU">
            <objects>
                <navigationController id="65m-zG-Zjb" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="sdq-d2-T0f">
                        <rect key="frame" x="0.0" y="20" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="QFv-CW-07W" kind="relationship" relationship="rootViewController" id="LEb-Q1-2GK"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="XrD-t8-fKf" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-1302" y="58"/>
        </scene>
        <!--FSPagerView-->
        <scene sceneID="BUU-qk-sys">
            <objects>
                <tableViewController id="QFv-CW-07W" sceneMemberID="viewController">
                    <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">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <sections>
                            <tableViewSection id="dcb-AR-Y6o">
                                <cells>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="xbh-ag-gwU" style="IBUITableViewCellStyleDefault" id="c8R-jz-NC9">
                                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="c8R-jz-NC9" id="Xt2-E6-SSP">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Banner Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xbh-ag-gwU">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="7zq-aB-pr6" kind="show" id="uwf-fW-o5e"/>
                                        </connections>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" textLabel="tbD-GK-bJ9" style="IBUITableViewCellStyleDefault" id="FxB-ZA-C8d">
                                        <rect key="frame" x="0.0" y="44" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="FxB-ZA-C8d" id="3kH-YG-RlN">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Transformer Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="tbD-GK-bJ9">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="UOf-Wx-Dm5" kind="show" id="u1f-IZ-XjV"/>
                                        </connections>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="kw1-Wq-GDF" style="IBUITableViewCellStyleDefault" id="Z9U-TY-wA5">
                                        <rect key="frame" x="0.0" y="88" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Z9U-TY-wA5" id="ebB-1o-WJk">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="PageControl Example" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kw1-Wq-GDF">
                                                    <rect key="frame" x="16" y="0.0" width="344" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                        <connections>
                                            <segue destination="lma-uy-r7Q" kind="show" id="Ywb-QZ-BEV"/>
                                        </connections>
                                    </tableViewCell>
                                </cells>
                            </tableViewSection>
                        </sections>
                        <connections>
                            <outlet property="dataSource" destination="QFv-CW-07W" id="BKi-in-Tr5"/>
                            <outlet property="delegate" destination="QFv-CW-07W" id="z5U-b1-65X"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="FSPagerView" id="Lpl-eu-Fmc"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="odI-aG-hCn" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-540" y="57"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="YvR-xA-dZd">
            <objects>
                <viewController id="UOf-Wx-Dm5" customClass="TransformerExampleViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="YqO-fo-CV0"/>
                        <viewControllerLayoutGuide type="bottom" id="SYq-Ou-9Hm"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="gyH-Fj-vjS">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tSq-4e-Jil" customClass="FSPagerView" customModule="FSPagerViewExample_Objc" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="64" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="tSq-4e-Jil" secondAttribute="height" multiplier="375:193" id="8cc-kO-s6Y"/>
                                </constraints>
                                <connections>
                                    <outlet property="dataSource" destination="UOf-Wx-Dm5" id="nee-RV-WAQ"/>
                                    <outlet property="delegate" destination="UOf-Wx-Dm5" id="umc-sl-eYD"/>
                                </connections>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="257" width="375" height="410"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="NRZ-QP-i1t"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="zyL-iX-55x" style="IBUITableViewCellStyleDefault" id="5d8-B4-K8u">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5d8-B4-K8u" id="uyz-07-btn">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="zyL-iX-55x">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="UOf-Wx-Dm5" id="OyG-Zv-zse"/>
                                    <outlet property="delegate" destination="UOf-Wx-Dm5" id="M6x-pe-ONn"/>
                                </connections>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="tSq-4e-Jil" firstAttribute="leading" secondItem="gyH-Fj-vjS" secondAttribute="leading" id="4JR-wM-Hj6"/>
                            <constraint firstAttribute="trailing" secondItem="TEB-Em-38e" secondAttribute="trailing" id="9aI-K5-eVK"/>
                            <constraint firstItem="TEB-Em-38e" firstAttribute="leading" secondItem="gyH-Fj-vjS" secondAttribute="leading" id="Nzy-x1-I37"/>
                            <constraint firstAttribute="trailing" secondItem="tSq-4e-Jil" secondAttribute="trailing" id="RgI-TS-XNy"/>
                            <constraint firstItem="SYq-Ou-9Hm" firstAttribute="top" secondItem="TEB-Em-38e" secondAttribute="bottom" priority="900" id="SvE-DZ-QZZ"/>
                            <constraint firstItem="TEB-Em-38e" firstAttribute="top" secondItem="tSq-4e-Jil" secondAttribute="bottom" id="Y6P-xg-PBD"/>
                            <constraint firstItem="tSq-4e-Jil" firstAttribute="top" secondItem="YqO-fo-CV0" secondAttribute="bottom" id="aLW-5l-Ysv"/>
                        </constraints>
                    </view>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="FSPagerView" id="TLb-uP-T5p"/>
                    <connections>
                        <outlet property="pagerView" destination="tSq-4e-Jil" id="8Jc-7p-Ufz"/>
                        <outlet property="tableView" destination="TEB-Em-38e" id="IVC-J2-DaD"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="umh-fh-emi" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="270" y="57"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="ubH-x9-Tsd">
            <objects>
                <viewController id="lma-uy-r7Q" customClass="PageControlExampleViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="g8E-NI-6cy"/>
                        <viewControllerLayoutGuide type="bottom" id="LRp-ZY-5aK"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="te4-kA-aq3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dn3-eb-Xp7" customClass="FSPagerView" customModule="FSPagerViewExample_Objc" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="64" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="Dn3-eb-Xp7" secondAttribute="height" multiplier="375:193" id="i9F-Jy-ACA"/>
                                </constraints>
                                <connections>
                                    <outlet property="dataSource" destination="lma-uy-r7Q" id="Azx-IG-5WF"/>
                                    <outlet property="delegate" destination="lma-uy-r7Q" id="fEg-8g-dJb"/>
                                </connections>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="257" width="375" height="410"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="DJv-Gh-cqi"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="BsM-5g-055" style="IBUITableViewCellStyleDefault" id="xKM-zP-mhA">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xKM-zP-mhA" id="e6f-eC-LPJ">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="BsM-5g-055">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="slider_cell" id="5vo-WJ-LAV">
                                        <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5vo-WJ-LAV" id="4El-3j-sQo">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <slider opaque="NO" tag="100" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="po6-ni-APz">
                                                    <rect key="frame" x="20" y="6" width="334" height="31"/>
                                                    <connections>
                                                        <action selector="sliderValueChanged:" destination="lma-uy-r7Q" eventType="valueChanged" id="gFi-4y-tQy"/>
                                                    </connections>
                                                </slider>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="centerX" secondItem="4El-3j-sQo" secondAttribute="centerX" id="foX-sD-T7e"/>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="leading" secondItem="4El-3j-sQo" secondAttribute="leadingMargin" constant="14" id="mq9-Ba-kWP"/>
                                                <constraint firstItem="po6-ni-APz" firstAttribute="centerY" secondItem="4El-3j-sQo" secondAttribute="centerY" id="vUz-88-Rc7"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="lma-uy-r7Q" id="lKf-ae-tE0"/>
                                    <outlet property="delegate" destination="lma-uy-r7Q" id="c3M-CG-U6P"/>
                                </connections>
                            </tableView>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6XD-Hd-JIV" customClass="FSPageControl" customModule="FSPagerViewExample_Objc" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="227" width="375" height="30"/>
                                <color key="backgroundColor" white="0.0" alpha="0.5" colorSpace="calibratedWhite"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="30" id="T3E-mc-eGj"/>
                                </constraints>
                            </view>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="LRp-ZY-5aK" firstAttribute="top" secondItem="1nD-dr-afd" secondAttribute="bottom" id="CPh-jp-Uyb"/>
                            <constraint firstAttribute="trailing" secondItem="1nD-dr-afd" secondAttribute="trailing" id="ClN-uY-lET"/>
                            <constraint firstItem="1nD-dr-afd" firstAttribute="top" secondItem="Dn3-eb-Xp7" secondAttribute="bottom" id="G58-E2-cgd"/>
                            <constraint firstAttribute="trailing" secondItem="Dn3-eb-Xp7" secondAttribute="trailing" id="e9e-i7-ujY"/>
                            <constraint firstAttribute="trailing" secondItem="6XD-Hd-JIV" secondAttribute="trailing" id="iKX-Nj-2S8"/>
                            <constraint firstItem="1nD-dr-afd" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="jWs-RY-JCp"/>
                            <constraint firstItem="Dn3-eb-Xp7" firstAttribute="top" secondItem="g8E-NI-6cy" secondAttribute="bottom" id="kns-bN-gzL"/>
                            <constraint firstItem="Dn3-eb-Xp7" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="mbX-uc-m8F"/>
                            <constraint firstItem="6XD-Hd-JIV" firstAttribute="bottom" secondItem="Dn3-eb-Xp7" secondAttribute="bottom" id="p91-lV-jBL"/>
                            <constraint firstItem="6XD-Hd-JIV" firstAttribute="leading" secondItem="te4-kA-aq3" secondAttribute="leading" id="qsg-zG-lYB"/>
                        </constraints>
                    </view>
                    <toolbarItems/>
                    <navigationItem key="navigationItem" title="FSPagerView" id="OcE-VL-TYq"/>
                    <connections>
                        <outlet property="pageControl" destination="6XD-Hd-JIV" id="Obv-i1-0Gv"/>
                        <outlet property="pagerView" destination="Dn3-eb-Xp7" id="ZCf-yT-eh3"/>
                        <outlet property="tableView" destination="1nD-dr-afd" id="uO4-v0-qCU"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="pdp-h1-Udb" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="270" y="818"/>
        </scene>
        <!--Data Source-->
        <scene sceneID="tPJ-rw-QQI">
            <objects>
                <viewController id="7zq-aB-pr6" customClass="BasicExampleViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="3bN-RB-78f"/>
                        <viewControllerLayoutGuide type="bottom" id="rZq-8C-6dC"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="zhe-8b-S4r">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ch4-Dh-rc6" customClass="FSPagerView" customModule="FSPagerViewExample_Objc" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="64" width="375" height="193"/>
                                <constraints>
                                    <constraint firstAttribute="width" secondItem="ch4-Dh-rc6" secondAttribute="height" multiplier="375:193" id="q7s-YA-wpI"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="alwaysBounceHorizontal" value="YES"/>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="removesInfiniteLoopForSingleItem" value="YES"/>
                                </userDefinedRuntimeAttributes>
                                <connections>
                                    <outlet property="dataSource" destination="7zq-aB-pr6" id="PzF-f2-zA4"/>
                                    <outlet property="delegate" destination="7zq-aB-pr6" id="qBU-1d-2ib"/>
                                </connections>
                            </view>
                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h5f-nu-Doz" customClass="FSPageControl" customModule="FSPagerViewExample_Objc" customModuleProvider="target">
                                <rect key="frame" x="0.0" y="232" width="375" height="25"/>
                                <constraints>
                                    <constraint firstAttribute="height" constant="25" id="awi-gp-ifB"/>
                                </constraints>
                                <userDefinedRuntimeAttributes>
                                    <userDefinedRuntimeAttribute type="boolean" keyPath="hidesForSinglePage" value="YES"/>
                                </userDefinedRuntimeAttributes>
                            </view>
                            <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">
                                <rect key="frame" x="0.0" y="257" width="375" height="410"/>
                                <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
                                <constraints>
                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="400" id="Ix2-fM-f0e"/>
                                </constraints>
                                <prototypes>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="cell" textLabel="LWk-3K-WmP" style="IBUITableViewCellStyleDefault" id="wPj-3l-HCm">
                                        <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wPj-3l-HCm" id="QTf-kp-J16">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="LWk-3K-WmP">
                                                    <rect key="frame" x="15" y="0.0" width="345" height="43.5"/>
                                                    <autoresizingMask key="autoresizingMask"/>
                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                                    <nil key="textColor"/>
                                                    <nil key="highlightedColor"/>
                                                </label>
                                            </subviews>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="slider_cell" id="nbi-ZR-nDk">
                                        <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
                                        <autoresizingMask key="autoresizingMask"/>
                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="nbi-ZR-nDk" id="cD9-AG-y92">
                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43.5"/>
                                            <autoresizingMask key="autoresizingMask"/>
                                            <subviews>
                                                <slider opaque="NO" tag="100" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="WnD-c9-GfM">
                                                    <rect key="frame" x="20" y="6" width="334" height="31"/>
                                                    <connections>
                                                        <action selector="sliderValueChanged:" destination="7zq-aB-pr6" eventType="valueChanged" id="kGM-Jj-qfl"/>
                                                    </connections>
                                                </slider>
                                            </subviews>
                                            <constraints>
                                                <constraint firstItem="WnD-c9-GfM" firstAttribute="centerX" secondItem="cD9-AG-y92" secondAttribute="centerX" id="KwF-5u-JF0"/>
                                                <constraint firstItem="WnD-c9-GfM" firstAttribute="leading" secondItem="cD9-AG-y92" secondAttribute="leadingMargin" constant="14" id="VlZ-XN-1on"/>
                                                <constraint firstItem="WnD-c9-GfM" firstAttribute="centerY" secondItem="cD9-AG-y92" secondAttribute="centerY" id="q7d-vC-5gP"/>
                                            </constraints>
                                        </tableViewCellContentView>
                                    </tableViewCell>
                                </prototypes>
                                <connections>
                                    <outlet property="dataSource" destination="7zq-aB-pr6" id="iMl-vb-qKd"/>
                                    <outlet property="delegate" destination="7zq-aB-pr6" id="xPe-k6-GJ5"/>
                                </connections>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="h5f-nu-Doz" firstAttribute="bottom" secondItem="ch4-Dh-rc6" secondAttribute="bottom" id="2Ba-Ep-xus"/>
                            <constraint firstItem="226-3E-RRx" firstAttribute="trailing" secondItem="ch4-Dh-rc6" secondAttribute="trailing" id="9qq-11-ogh"/>
                            <constraint firstItem="rZq-8C-6dC" firstAttribute="top" secondItem="226-3E-RRx" secondAttribute="bottom" id="Bc4-AO-203"/>
                            <constraint firstItem="ch4-Dh-rc6" firstAttribute="top" secondItem="3bN-RB-78f" secondAttribute="bottom" id="Cvt-wn-ItH"/>
                            <constraint firstItem="226-3E-RRx" firstAttribute="leading" secondItem="ch4-Dh-rc6" secondAttribute="leading" id="DIt-KV-x4D"/>
                            <constraint firstItem="h5f-nu-Doz" firstAttribute="leading" secondItem="zhe-8b-S4r" secondAttribute="leading" id="EC9-XN-MBg"/>
                            <constraint firstItem="226-3E-RRx" firstAttribute="top" secondItem="ch4-Dh-rc6" secondAttribute="bottom" id="bAA-Q2-Um6"/>
                            <constraint firstAttribute="trailing" secondItem="ch4-Dh-rc6" secondAttribute="trailing" id="bIU-eX-6a7"/>
                            <constraint firstAttribute="trailing" secondItem="h5f-nu-Doz" secondAttribute="trailing" id="iNL-kr-zlK"/>
                            <constraint firstItem="ch4-Dh-rc6" firstAttribute="leading" secondItem="zhe-8b-S4r" secondAttribute="leading" id="u1K-Fr-jm0"/>
                        </constraints>
                    </view>
                    <navigationItem key="navigationItem" title="FSPagerView" id="QMU-sT-Kbv"/>
                    <connections>
                        <outlet property="pageControl" destination="h5f-nu-Doz" id="u5x-u0-UQk"/>
                        <outlet property="pagerView" destination="ch4-Dh-rc6" id="uVl-Rj-GWx"/>
                        <outlet property="tableView" destination="226-3E-RRx" id="iIv-Hz-eae"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Pvu-FJ-vJz" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="270" y="-615"/>
        </scene>
    </scenes>
</document>


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.h
================================================
//
//  BasicExampleViewController.h
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface BasicExampleViewController : UIViewController


@end



================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.m
================================================
//
//  BasicExampleViewController.m
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import "BasicExampleViewController.h"
#import "FSPagerViewExample_Objc-Swift.h"
#import "FSPagerViewObjcCompat.h"

@interface BasicExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>

@property (strong, nonatomic) NSArray<NSString *> *sectionTitles;
@property (strong, nonatomic) NSArray<NSString *> *configurationTitles;
@property (strong, nonatomic) NSArray<NSString *> *decelerationDistanceOptions;
@property (strong, nonatomic) NSArray<NSString *> *imageNames;
@property (assign, nonatomic) NSInteger numberOfItems;

@property (weak  , nonatomic) IBOutlet UITableView *tableView;
@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;
@property (weak  , nonatomic) IBOutlet FSPageControl *pageControl;

- (IBAction)sliderValueChanged:(UISlider *)sender;

@end

@implementation BasicExampleViewController

#pragma mark - Life cycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.sectionTitles = @[@"Configurations", @"Deceleration Distance", @"Item Size", @"Interitem Spacing", @"Number Of Items"];
    self.configurationTitles = @[@"Automatic sliding", @"Infinite"];
    self.decelerationDistanceOptions = @[@"Automatic", @"1", @"2"];
    self.imageNames = @[@"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"5.jpg", @"6.jpg", @"7.jpg"];
    self.numberOfItems = 7;
    
    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@"cell"];
    self.pagerView.itemSize = FSPagerViewAutomaticSize;
    self.pageControl.numberOfPages = self.imageNames.count;
    self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
    self.pageControl.contentInsets = UIEdgeInsetsMake(0, 20, 0, 20);
    
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.sectionTitles.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            return self.configurationTitles.count;
        case 1:
            return self.decelerationDistanceOptions.count;
        case 2:
        case 3:
        case 4:
            return 1;
        default:
            break;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0: {
            // Configurations
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
            cell.textLabel.text = self.configurationTitles[indexPath.row];
            if (indexPath.row == 0) {
                // Automatic Sliding
                cell.accessoryType = self.pagerView.automaticSlidingInterval > 0 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
            } else if (indexPath.row == 1) {
                // IsInfinite
                cell.accessoryType = self.pagerView.isInfinite ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
            }
            return cell;
        }
        case 1: {
            // Decelaration Distance
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
            cell.textLabel.text = self.decelerationDistanceOptions[indexPath.row];
            switch (indexPath.row) {
                case 0:
                    // Hardcode like '-1' is bad for readability, but there haven't been a better solution to export a swift constant to objective-c yet.
                    cell.accessoryType = self.pagerView.decelerationDistance == FSPagerViewAutomaticDistance ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
                    break;
                case 1:
                    cell.accessoryType = self.pagerView.decelerationDistance == 1 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
                    break;
                case 2:
                    cell.accessoryType = self.pagerView.decelerationDistance == 2 ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
                    break;
                default:
                    break;
            }
            return cell;
        }
        case 2: {
            // Item Spacing
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"slider_cell"];
            UISlider *slider = cell.contentView.subviews.firstObject;
            slider.tag = 1;
            slider.value = ({
                CGFloat scale = self.pagerView.itemSize.width/self.pagerView.frame.size.width;
                CGFloat value = (0.5-scale)*2;
                value;
            });
            slider.continuous = YES;
            return cell;
        }
        case 3: {
            // Interitem Spacing
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"slider_cell"];
            UISlider *slider = cell.contentView.subviews.firstObject;
            slider.tag = 2;
            slider.value = self.pagerView.interitemSpacing / 20.0;
            slider.continuous = YES;
            return cell;
        }
        case 4: {
            // Number Of Items
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"slider_cell"];
            UISlider *slider = cell.contentView.subviews.firstObject;
            slider.tag = 3;
            slider.value = self.numberOfItems / 7.0;
            slider.minimumValue = 1.0 / 7;
            slider.maximumValue = 1.0;
            slider.continuous = NO;
            return cell;
        }
        default:
            break;
    }
    return [tableView dequeueReusableCellWithIdentifier:@"cell"];
}

#pragma mark - UITableViewDelegate

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return indexPath.section == 0 || indexPath.section == 1;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    switch (indexPath.section) {
        case 0: {
            if (indexPath.row == 0) {
                // Automatic Sliding
                self.pagerView.automaticSlidingInterval = 3.0 - self.pagerView.automaticSlidingInterval;
            } else if (indexPath.row == 1) {
                // IsInfinite
                self.pagerView.isInfinite = !self.pagerView.isInfinite;
            }
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
            break;
        }
        case 1: {
            switch (indexPath.row) {
                case 0:
                    self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;
                    break;
                case 1:
                    self.pagerView.decelerationDistance = 1;
                    break;
                case 2:
                    self.pagerView.decelerationDistance = 2;
                    break;
                default:
                    break;
            }
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
            break;
        }
        default:
            break;
    }
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return self.sectionTitles[section];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return section == 0 ? 40 : 20;
}

#pragma mark - FSPagerViewDataSource

- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView
{
    return self.numberOfItems;
}

- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index
{
    FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"cell" atIndex:index];
    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];
    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
    cell.imageView.clipsToBounds = YES;
    cell.textLabel.text = [NSString stringWithFormat:@"%@%@",@(index),@(index)];
    return cell;
}

#pragma mark - FSPagerView Delegate

- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index
{
    [pagerView deselectItemAtIndex:index animated:YES];
    [pagerView scrollToItemAtIndex:index animated:YES];
}

- (void)pagerViewWillEndDragging:(FSPagerView *)pagerView targetIndex:(NSInteger)targetIndex
{
    self.pageControl.currentPage = targetIndex;
}

- (void)pagerViewDidEndScrollAnimation:(FSPagerView *)pagerView
{
    self.pageControl.currentPage = pagerView.currentIndex;
}

#pragma mark - Target actions

- (void)sliderValueChanged:(UISlider *)sender
{
    switch (sender.tag) {
        case 1: {
            CGFloat scale = 0.5 * (1 + sender.value); // [0.5 - 1.0]
            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, CGAffineTransformMakeScale(scale, scale));
            break;
        }
        case 2: {
            self.pagerView.interitemSpacing = sender.value * 20; // [0 - 20]
            break;
        }
        case 3: {
            self.numberOfItems = roundf(sender.value * 7);
            self.pageControl.numberOfPages = self.numberOfItems;
            [self.pagerView reloadData];
            break;
        }
        default:
            break;
    }
}

@end



================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.h
================================================
//
//  PageControlExampleViewController.h
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 20/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface PageControlExampleViewController : UIViewController

@end


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.m
================================================
//
//  PageControlExampleViewController.m
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 20/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import "PageControlExampleViewController.h"
#import "FSPagerViewExample_Objc-Swift.h"
#import "FSPagerViewObjcCompat.h"

@interface PageControlExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>

@property (strong, nonatomic) NSArray<NSString *> *imageNames;
@property (strong, nonatomic) NSArray<NSString *> *pageControlStyles;
@property (strong, nonatomic) NSArray<NSString *> *pageControlAlignments;
@property (strong, nonatomic) NSArray<NSString *> *sectionTitles;

@property (weak  , nonatomic) IBOutlet UITableView *tableView;
@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;
@property (weak  , nonatomic) IBOutlet FSPageControl *pageControl;

@property (assign, nonatomic) NSInteger styleIndex;
@property (assign, nonatomic) NSInteger alignmentIndex;

// ⭐️
@property (readonly, nonatomic) UIBezierPath *starPath;
// ❤️
@property (readonly, nonatomic) UIBezierPath *heartPath;

- (IBAction)sliderValueChanged:(UISlider *)sender;

@end

@implementation PageControlExampleViewController

#pragma mark - Life cycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.imageNames = @[@"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"5.jpg", @"6.jpg", @"7.jpg"];
    self.pageControlStyles = @[@"Default", @"Ring", @"UIImage", @"UIBezierPath - Star", @"UIBezierPath - Heart"];
    self.pageControlAlignments = @[@"Right", @"Center", @"Left"];
    self.sectionTitles = @[@"Style", @"Item Spacing", @"Interitem Spacing", @"Horizontal Alignment"];
    
    self.pageControl.numberOfPages = self.imageNames.count;
    self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
    self.pageControl.contentInsets = UIEdgeInsetsMake(0, 20, 0, 20);
    
    self.pagerView.itemSize = FSPagerViewAutomaticSize; // Fill parent
    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@"cell"];
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.sectionTitles.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {
        case 0:
            return self.pageControlStyles.count;
        case 1:
        case 2:
            return 1;
        case 3:
            return self.pageControlAlignments.count;
        default:
            break;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case 0: {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
            cell.textLabel.text = self.pageControlStyles[indexPath.row];
            cell.accessoryType = self.styleIndex==indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
            return cell;
        }
        case 1: {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"slider_cell"];
            UISlider *slider = cell.contentView.subviews.firstObject;
            slider.tag = indexPath.section;
            slider.value = (self.pageControl.itemSpacing-6.0)/10.0;
            return cell;
        }
        case 2: {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"slider_cell"];
            UISlider *slider = cell.contentView.subviews.firstObject;
            slider.tag = indexPath.section;
            slider.value = (self.pageControl.interitemSpacing-6.0)/10.0;
            return cell;
        }
        case 3: {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
            cell.textLabel.text = self.pageControlAlignments[indexPath.row];
            cell.accessoryType = self.alignmentIndex==indexPath.row ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
            return cell;
        }
        default:
            break;
    }
    return [tableView dequeueReusableCellWithIdentifier:@"cell"];
}

#pragma mark - UITableViewDelegate

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return self.sectionTitles[section];
}

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    return indexPath.section == 0 || indexPath.section == 3;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    switch (indexPath.section) {
        case 0: {
            self.styleIndex = indexPath.row;
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
            break;
        }
        case 3: {
            self.alignmentIndex = indexPath.row;
            [tableView reloadSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
            break;
        }
            
        default:
            break;
    }
}

#pragma mark - FSPagerViewDataSource

- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView
{
    return self.imageNames.count;
}

- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index
{
    FSPagerViewCell *cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"cell" atIndex:index];
    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];
    return cell;
}

#pragma mark - FSPagerViewDelegate

- (void)pagerViewWillEndDragging:(FSPagerView *)pagerView targetIndex:(NSInteger)targetIndex
{
    self.pageControl.currentPage = targetIndex;
}

#pragma mark - Target actions

- (void)sliderValueChanged:(UISlider *)sender
{
    switch (sender.tag) {
        case 1: {
            self.pageControl.itemSpacing = 6.0 + sender.value*10.0; // [6 - 16]
            // Redraw UIBezierPath
            if (self.styleIndex == 3 || self.styleIndex == 4) {
                self.styleIndex = self.styleIndex;
            }
            break;
        }
        case 2: {
            self.pageControl.interitemSpacing = 6.0 + sender.value*10.0; // [6 - 16]
            break;
        }
        default:
            break;
    }
}

#pragma mark - Private properties

- (void)setStyleIndex:(NSInteger)styleIndex
{
    _styleIndex = styleIndex;
    // Clean up
    [self.pageControl setStrokeColor:nil forState:UIControlStateNormal];
    [self.pageControl setStrokeColor:nil forState:UIControlStateSelected];
    [self.pageControl setFillColor:nil forState:UIControlStateNormal];
    [self.pageControl setFillColor:nil forState:UIControlStateSelected];
    [self.pageControl setImage:nil forState:UIControlStateNormal];
    [self.pageControl setImage:nil forState:UIControlStateSelected];
    [self.pageControl setPath:nil forState:UIControlStateNormal];
    [self.pageControl setPath:nil forState:UIControlStateSelected];
    switch (styleIndex) {
        case 0: {
            // Default
            break;
        }
        case 1: {
            // Ring
            [self.pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateNormal];
            [self.pageControl setStrokeColor:[UIColor greenColor] forState:UIControlStateSelected];
            [self.pageControl setFillColor:[UIColor greenColor] forState:UIControlStateSelected];
            break;
        }
        case 2: {
            // UIImage
            [self.pageControl setImage:[UIImage imageNamed:@"icon_footprint"] forState:UIControlStateNormal];
            [self.pageControl setImage:[UIImage imageNamed:@"icon_cat"] forState:UIControlStateSelected];
            break;
        }
        case 3: {
            // UIBezierPath - Star
            [self.pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateNormal];
            [self.pageControl setStrokeColor:[UIColor yellowColor] forState:UIControlStateSelected];
            [self.pageControl setFillColor:[UIColor yellowColor] forState:UIControlStateSelected];
            [self.pageControl setPath:self.starPath forState:UIControlStateNormal];
            [self.pageControl setPath:self.starPath forState:UIControlStateSelected];
            break;
        }
        case 4: {
            // UIBezierPath - Heart
            UIColor *color = [UIColor colorWithRed:255/255.0 green:102/255.0 blue:255/255.0 alpha:1.0];
            [self.pageControl setStrokeColor:color forState:UIControlStateNormal];
            [self.pageControl setStrokeColor:color forState:UIControlStateSelected];
            [self.pageControl setFillColor:color forState:UIControlStateSelected];
            [self.pageControl setPath:self.heartPath forState:UIControlStateNormal];
            [self.pageControl setPath:self.heartPath forState:UIControlStateSelected];
            break;
        }
        default:
            break;
    }
    
}

- (void)setAlignmentIndex:(NSInteger)alignmentIndex
{
    _alignmentIndex = alignmentIndex;
    switch (alignmentIndex) {
        case 0: {
            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
            break;
        }
        case 1: {
            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
            break;
        }
        case 2: {
            self.pageControl.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
            break;
        }
        default:
            break;
    }
}

// ⭐️
- (UIBezierPath *)starPath
{
    CGFloat width = self.pageControl.itemSpacing;
    CGFloat height = self.pageControl.itemSpacing;
    UIBezierPath *starPath = [[UIBezierPath alloc] init];
    [starPath moveToPoint:CGPointMake(width*0.5, 0)];
    [starPath addLineToPoint:CGPointMake(width*0.677, height*0.257)];
    [starPath addLineToPoint:CGPointMake(width*0.975, height*0.345)];
    [starPath addLineToPoint:CGPointMake(width*0.785, height*0.593)];
    [starPath addLineToPoint:CGPointMake(width*0.794, height*0.905)];
    [starPath addLineToPoint:CGPointMake(width*0.5, height*0.8)];
    [starPath addLineToPoint:CGPointMake(width*0.206, height*0.905)];
    [starPath addLineToPoint:CGPointMake(width*0.215, height*0.593)];
    [starPath addLineToPoint:CGPointMake(width*0.025, height*0.345)];
    [starPath addLineToPoint:CGPointMake(width*0.323, height*0.257)];
    [starPath closePath];
    return starPath;
}

// ❤️
- (UIBezierPath *)heartPath
{
    CGFloat width = self.pageControl.itemSpacing;
    CGFloat height = self.pageControl.itemSpacing;
    UIBezierPath *heartPath = [[UIBezierPath alloc] init];
    [heartPath moveToPoint:CGPointMake(width*0.5, height)];
    [heartPath addCurveToPoint:CGPointMake(0, height*0.25)
                 controlPoint1:CGPointMake(width*0.5, height*0.75)
                 controlPoint2:CGPointMake(0, height*0.5)];
    [heartPath addArcWithCenter:CGPointMake(width*0.25, height*0.25)
                         radius:width*0.25
                     startAngle:M_PI
                       endAngle:0
                      clockwise:YES];
    [heartPath addArcWithCenter:CGPointMake(width*0.75, height*0.25)
                         radius:width*0.25
                     startAngle:M_PI
                       endAngle:0
                      clockwise:YES];
    [heartPath addCurveToPoint:CGPointMake(width*0.5, height)
                 controlPoint1:CGPointMake(width, height*0.5)
                 controlPoint2:CGPointMake(width*0.5, height*0.75)];
    [heartPath closePath];
    return heartPath;
}


@end


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.h
================================================
//
//  ViewController.h
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TransformerExampleViewController : UIViewController

@end


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.m
================================================
//
//  TransformerExampleViewController.m
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import "TransformerExampleViewController.h"
#import "FSPagerViewExample_Objc-Swift.h"
#import "FSPagerViewObjcCompat.h"

@interface TransformerExampleViewController () <UITableViewDataSource,UITableViewDelegate,FSPagerViewDataSource,FSPagerViewDelegate>

@property (strong, nonatomic) NSArray<NSString *> *imageNames;
@property (strong, nonatomic) NSArray<NSString *> *transformerNames;
@property (assign, nonatomic) NSInteger typeIndex;

@property (weak  , nonatomic) IBOutlet UITableView *tableView;
@property (weak  , nonatomic) IBOutlet FSPagerView *pagerView;

@end

@implementation TransformerExampleViewController

#pragma mark - Life cycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.imageNames = @[@"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"5.jpg", @"6.jpg", @"7.jpg"];
    self.transformerNames = @[@"cross fading", @"zoom out", @"depth", @"linear", @"overlap", @"ferris wheel", @"inverted ferris wheel", @"coverflow", @"cubic"];
    [self.pagerView registerClass:[FSPagerViewCell class] forCellWithReuseIdentifier:@"cell"];
    self.pagerView.isInfinite = YES;
    self.typeIndex = 0;
}

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.typeIndex = self.typeIndex;
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.transformerNames.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.textLabel.text = self.transformerNames[indexPath.row];
    cell.accessoryType = indexPath.row == self.typeIndex ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    self.typeIndex = indexPath.row;
    [tableView reloadRowsAtIndexPaths:tableView.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationAutomatic];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"Transformers";
}

#pragma mark - FSPagerViewDataSource

- (NSInteger)numberOfItemsInPagerView:(FSPagerView *)pagerView
{
    return self.imageNames.count;
}

- (FSPagerViewCell *)pagerView:(FSPagerView *)pagerView cellForItemAtIndex:(NSInteger)index
{
    FSPagerViewCell * cell = [pagerView dequeueReusableCellWithReuseIdentifier:@"cell" atIndex:index];
    cell.imageView.image = [UIImage imageNamed:self.imageNames[index]];
    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
    cell.imageView.clipsToBounds = YES;
    return cell;
}

#pragma mark - FSPagerViewDelegate

- (void)pagerView:(FSPagerView *)pagerView didSelectItemAtIndex:(NSInteger)index
{
    [pagerView deselectItemAtIndex:index animated:YES];
    [pagerView scrollToItemAtIndex:index animated:YES];
}

#pragma mark - Private properties

- (void)setTypeIndex:(NSInteger)typeIndex
{
    _typeIndex = typeIndex;
    FSPagerViewTransformerType type;
    switch (typeIndex) {
        case 0: {
            type = FSPagerViewTransformerTypeCrossFading;
            break;
        }
        case 1: {
            type = FSPagerViewTransformerTypeZoomOut;
            break;
        }
        case 2: {
            type = FSPagerViewTransformerTypeDepth;
            break;
        }
        case 3: {
            type = FSPagerViewTransformerTypeLinear;
            break;
        }
        case 4: {
            type = FSPagerViewTransformerTypeOverlap;
            break;
        }
        case 5: {
            type = FSPagerViewTransformerTypeFerrisWheel;
            break;
        }
        case 6: {
            type = FSPagerViewTransformerTypeInvertedFerrisWheel;
            break;
        }
        case 7: {
            type = FSPagerViewTransformerTypeCoverFlow;
            break;
        }
        case 8: {
            type = FSPagerViewTransformerTypeCubic;
            break;
        }
        default:
            type = FSPagerViewTransformerTypeZoomOut;
            break;
    }
    self.pagerView.transformer = [[FSPagerViewTransformer alloc] initWithType:type];
    switch (type) {
        case FSPagerViewTransformerTypeCrossFading:
        case FSPagerViewTransformerTypeZoomOut:
        case FSPagerViewTransformerTypeDepth: {
            self.pagerView.itemSize = FSPagerViewAutomaticSize;
            self.pagerView.decelerationDistance = 1;
            break;
        }
        case FSPagerViewTransformerTypeLinear:
        case FSPagerViewTransformerTypeOverlap: {
            CGAffineTransform transform = CGAffineTransformMakeScale(0.6, 0.75);
            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, transform);
            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;
            break;
        }
        case FSPagerViewTransformerTypeFerrisWheel:
        case FSPagerViewTransformerTypeInvertedFerrisWheel: {
            self.pagerView.itemSize = CGSizeMake(180, 140);
            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;
            break;
        }
        case FSPagerViewTransformerTypeCoverFlow: {
            self.pagerView.itemSize = CGSizeMake(220, 170);
            self.pagerView.decelerationDistance = FSPagerViewAutomaticDistance;
            break;
        }
        case FSPagerViewTransformerTypeCubic: {
            CGAffineTransform transform = CGAffineTransformMakeScale(0.9, 0.9);
            self.pagerView.itemSize = CGSizeApplyAffineTransform(self.pagerView.frame.size, transform);
            self.pagerView.decelerationDistance = 1;
            break;
        }
        default:
            break;
    }
}

@end




================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc/main.m
================================================
//
//  main.m
//  FSPagerViewExample-Objc
//
//  Created by Wenchao Ding on 19/01/2017.
//  Copyright © 2017 Wenchao Ding. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


================================================
FILE: FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		F908BC411E35AAE4002B2F51 /* 1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC321E35AAE4002B2F51 /* 1.jpg */; };
		F908BC491E35AAE4002B2F51 /* 2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3A1E35AAE4002B2F51 /* 2.jpg */; };
		F908BC4A1E35AAE4002B2F51 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3B1E35AAE4002B2F51 /* 3.jpg */; };
		F908BC4B1E35AAE4002B2F51 /* 4.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3C1E35AAE4002B2F51 /* 4.jpg */; };
		F908BC4C1E35AAE4002B2F51 /* 5.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3D1E35AAE4002B2F51 /* 5.jpg */; };
		F908BC4D1E35AAE4002B2F51 /* 6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3E1E35AAE4002B2F51 /* 6.jpg */; };
		F908BC4E1E35AAE4002B2F51 /* 7.jpg in Resources */ = {isa = PBXBuildFile; fileRef = F908BC3F1E35AAE4002B2F51 /* 7.jpg */; };
		F931E00A2158A1E4001B2A01 /* FSPagerViewObjcCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F931E0092158A1E4001B2A01 /* FSPagerViewObjcCompat.m */; };
		F93F5E141E319AE8006B7082 /* PageControlExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F93F5E131E319AE8006B7082 /* PageControlExampleViewController.m */; };
		F9580B641E5D997200C5B267 /* FSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B5E1E5D997200C5B267 /* FSPageControl.swift */; };
		F9580B651E5D997200C5B267 /* FSPagerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B5F1E5D997200C5B267 /* FSPagerCollectionView.swift */; };
		F9580B661E5D997200C5B267 /* FSPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B601E5D997200C5B267 /* FSPagerView.swift */; };
		F9580B671E5D997200C5B267 /* FSPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B611E5D997200C5B267 /* FSPagerViewCell.swift */; };
		F9580B681E5D997200C5B267 /* FSPageViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B621E5D997200C5B267 /* FSPageViewLayout.swift */; };
		F9580B691E5D997200C5B267 /* FSPageViewTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9580B631E5D997200C5B267 /* FSPageViewTransformer.swift */; };
		F9C6944C1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C6944B1E40C6C1007084B6 /* FSPagerViewExample_ObjcUITests.swift */; };
		F9DF961D1E7F5B240010506C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F9DF961C1E7F5B240010506C /* Assets.xcassets */; };
		F9EC371E1E304A830022B6D6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC371D1E304A830022B6D6 /* main.m */; };
		F9EC37211E304A830022B6D6 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC37201E304A830022B6D6 /* AppDelegate.m */; };
		F9EC37241E304A830022B6D6 /* BasicExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9EC37231E304A830022B6D6 /* BasicExampleViewController.m */; };
		F9EC37271E304A830022B6D6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9EC37251E304A830022B6D6 /* Main.storyboard */; };
		F9EC372C1E304A830022B6D6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F9EC372A1E304A830022B6D6 /* LaunchScreen.storyboard */; };
		F9F00A901E310FF600790735 /* TransformerExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F9F00A8F1E310FF600790735 /* TransformerExampleViewController.m */; };
		F9FF349F1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */; };
		F9FF34A01E65B38C001E943F /* FSPagerViewLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9FF349E1E65B38C001E943F /* FSPagerViewLayoutAttributes.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		F9C6944E1E40C6C1007084B6 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = F9EC37111E304A830022B6D6 /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = F9EC37181E304A830022B6D6;
			remoteInfo = "FSPagerViewExample-Objc";
		};
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
		50989DFD2151DB25004DBB4A /* FSPagerViewObjcCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSPagerViewObjcCompat.h; sourceTree = "<group>"; };
		F908BC321E35AAE4002B2F51 /* 1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 1.jpg; sourceTree = "<group>"; };
		F908BC3A1E35AAE4002B2F51 /* 2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 2.jpg; sourceTree = "<group>"; };
		F908BC3B1E35AAE4002B2F51 /* 3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 3.jpg; sourceTree = "<group>"; };
		F908BC3C1E35AAE4002B2F51 /* 4.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = 4.jpg; sourceTree = "<
Download .txt
gitextract_gieyc_z4/

├── .gitignore
├── .swiftpm/
│   └── xcode/
│       └── package.xcworkspace/
│           └── contents.xcworkspacedata
├── FSPageViewExample-Swift/
│   ├── FSPagerViewExample/
│   │   ├── AppDelegate.swift
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BasicExampleViewController.swift
│   │   ├── Info.plist
│   │   ├── PageControlExampleViewController.swift
│   │   └── TransformerExampleViewController.swift
│   ├── FSPagerViewExample.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── FSPagerViewExampleUITests/
│       ├── FSPagerViewExampleUITests.swift
│       └── Info.plist
├── FSPagerView/
│   ├── FSPagerView/
│   │   ├── FSPagerView.h
│   │   └── Info.plist
│   └── FSPagerView.xcodeproj/
│       ├── project.pbxproj
│       ├── project.xcworkspace/
│       │   └── contents.xcworkspacedata
│       └── xcshareddata/
│           └── xcschemes/
│               └── FSPagerView.xcscheme
├── FSPagerView.podspec
├── FSPagerViewExample-Objc/
│   ├── FSPagerViewExample-Objc/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BasicExampleViewController.h
│   │   ├── BasicExampleViewController.m
│   │   ├── Info.plist
│   │   ├── PageControlExampleViewController.h
│   │   ├── PageControlExampleViewController.m
│   │   ├── TransformerExampleViewController.h
│   │   ├── TransformerExampleViewController.m
│   │   └── main.m
│   ├── FSPagerViewExample-Objc.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── FSPagerViewExample-ObjcUITests/
│       ├── FSPagerViewExample_ObjcUITests.swift
│       └── Info.plist
├── FSPagerViewExamples.xcworkspace/
│   └── contents.xcworkspacedata
├── LICENSE
├── Package.swift
├── README-OBJECTIVE-C.md
├── README.md
├── Resources/
│   └── Assets.xcassets/
│       ├── AppIcon.appiconset/
│       │   └── Contents.json
│       ├── Contents.json
│       ├── icon_cat.imageset/
│       │   └── Contents.json
│       └── icon_footprint.imageset/
│           └── Contents.json
└── Sources/
    ├── FSPageControl.swift
    ├── FSPageViewLayout.swift
    ├── FSPageViewTransformer.swift
    ├── FSPagerCollectionView.swift
    ├── FSPagerView.swift
    ├── FSPagerViewCell.swift
    ├── FSPagerViewLayoutAttributes.swift
    ├── FSPagerViewObjcCompat.h
    └── FSPagerViewObjcCompat.m
Condensed preview — 53 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (342K chars).
[
  {
    "path": ".gitignore",
    "chars": 1470,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": ".swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/AppDelegate.swift",
    "chars": 2187,
    "preview": "//\n//  AppDelegate.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 06/01/2017.\n//  Copyright © 2017 Wench"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/Base.lproj/LaunchScreen.storyboard",
    "chars": 1740,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/Base.lproj/Main.storyboard",
    "chars": 38036,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/BasicExampleViewController.swift",
    "chars": 8070,
    "preview": "//\n//  ViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 We"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/Info.plist",
    "chars": 1442,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/PageControlExampleViewController.swift",
    "chars": 10030,
    "preview": "//\n//  PageControlExampleViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 17/01/2017.\n//  C"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample/TransformerExampleViewController.swift",
    "chars": 5032,
    "preview": "//\n//  TransformerExampleViewController.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 09/01/2017.\n//  C"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample.xcodeproj/project.pbxproj",
    "chars": 26412,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 237,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/wenchaod"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExampleUITests/FSPagerViewExampleUITests.swift",
    "chars": 1279,
    "preview": "//\n//  FSPagerViewExampleUITests.swift\n//  FSPagerViewExampleUITests\n//\n//  Created by Wenchao Ding on 31/01/2017.\n//  C"
  },
  {
    "path": "FSPageViewExample-Swift/FSPagerViewExampleUITests/Info.plist",
    "chars": 680,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "FSPagerView/FSPagerView/FSPagerView.h",
    "chars": 514,
    "preview": "//\n//  FSPagerView.h\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 22/02/2017.\n//  Copyright © 2017 Wenchao Ding. Al"
  },
  {
    "path": "FSPagerView/FSPagerView/Info.plist",
    "chars": 755,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "FSPagerView/FSPagerView.xcodeproj/project.pbxproj",
    "chars": 15743,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "FSPagerView/FSPagerView.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 156,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:FSPagerView.xco"
  },
  {
    "path": "FSPagerView/FSPagerView.xcodeproj/xcshareddata/xcschemes/FSPagerView.xcscheme",
    "chars": 2886,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1030\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "FSPagerView.podspec",
    "chars": 859,
    "preview": "Pod::Spec.new do |s|\n\n  s.name             = \"FSPagerView\"\n  s.version          = \"0.8.3\"\n  s.summary          = \"FSPage"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.h",
    "chars": 298,
    "preview": "//\n//  AppDelegate.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenc"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/AppDelegate.m",
    "chars": 2060,
    "preview": "//\n//  AppDelegate.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenc"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/Base.lproj/LaunchScreen.storyboard",
    "chars": 1740,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/Base.lproj/Main.storyboard",
    "chars": 37458,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.h",
    "chars": 260,
    "preview": "//\n//  BasicExampleViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyri"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/BasicExampleViewController.m",
    "chars": 9632,
    "preview": "//\n//  BasicExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyri"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/Info.plist",
    "chars": 1442,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.h",
    "chars": 270,
    "preview": "//\n//  PageControlExampleViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 20/01/2017.\n//  "
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/PageControlExampleViewController.m",
    "chars": 11840,
    "preview": "//\n//  PageControlExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 20/01/2017.\n//  "
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.h",
    "chars": 252,
    "preview": "//\n//  ViewController.h\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 W"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/TransformerExampleViewController.m",
    "chars": 6116,
    "preview": "//\n//  TransformerExampleViewController.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  "
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc/main.m",
    "chars": 355,
    "preview": "//\n//  main.m\n//  FSPagerViewExample-Objc\n//\n//  Created by Wenchao Ding on 19/01/2017.\n//  Copyright © 2017 Wenchao Din"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj/project.pbxproj",
    "chars": 28715,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-Objc.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 240,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:/Users/wenchaod"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-ObjcUITests/FSPagerViewExample_ObjcUITests.swift",
    "chars": 1294,
    "preview": "//\n//  FSPagerViewExample_ObjcUITests.swift\n//  FSPagerViewExample-ObjcUITests\n//\n//  Created by Wenchao Ding on 31/01/2"
  },
  {
    "path": "FSPagerViewExample-Objc/FSPagerViewExample-ObjcUITests/Info.plist",
    "chars": 680,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "FSPagerViewExamples.xcworkspace/contents.xcworkspacedata",
    "chars": 384,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:FSPageViewExam"
  },
  {
    "path": "LICENSE",
    "chars": 1097,
    "preview": "Copyright (c) 2017 FSPagerView (https://github.com/WenchaoD/FSPagerView)\n\nPermission is hereby granted, free of charge, "
  },
  {
    "path": "Package.swift",
    "chars": 410,
    "preview": "// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: \"FSPagerView\",\n    platforms: [\n "
  },
  {
    "path": "README-OBJECTIVE-C.md",
    "chars": 12715,
    "preview": "![fspagerview](https://cloud.githubusercontent.com/assets/5186464/24086370/45e7e8dc-0d49-11e7-86aa-139354fe00c5.jpg)\n\n[!"
  },
  {
    "path": "README.md",
    "chars": 12093,
    "preview": "![fspagerview](https://cloud.githubusercontent.com/assets/5186464/24086370/45e7e8dc-0d49-11e7-86aa-139354fe00c5.jpg)\n\n[!"
  },
  {
    "path": "Resources/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2298,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-40.png\",\n      \"scale\""
  },
  {
    "path": "Resources/Assets.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Resources/Assets.xcassets/icon_cat.imageset/Contents.json",
    "chars": 308,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Resources/Assets.xcassets/icon_footprint.imageset/Contents.json",
    "chars": 314,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Sources/FSPageControl.swift",
    "chars": 10743,
    "preview": "//\n//  FSPageControl.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Di"
  },
  {
    "path": "Sources/FSPageViewLayout.swift",
    "chars": 13092,
    "preview": "//\n//  FSPagerViewLayout.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 20/12/2016.\n//  Copyright © 2016 Wencha"
  },
  {
    "path": "Sources/FSPageViewTransformer.swift",
    "chars": 11439,
    "preview": "//\n//  FSPagerViewTransformer.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 05/01/2017.\n//  Copyright © 2017 W"
  },
  {
    "path": "Sources/FSPagerCollectionView.swift",
    "chars": 1793,
    "preview": "//\n//  FSPagerCollectionView.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 24/12/2016.\n//  Copyright © 2016 We"
  },
  {
    "path": "Sources/FSPagerView.swift",
    "chars": 26161,
    "preview": "//\n//  FSPagerView.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao Ding"
  },
  {
    "path": "Sources/FSPagerViewCell.swift",
    "chars": 4922,
    "preview": "//\n//  FSPagerViewCell.swift\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 17/12/2016.\n//  Copyright © 2016 Wenchao "
  },
  {
    "path": "Sources/FSPagerViewLayoutAttributes.swift",
    "chars": 815,
    "preview": "//\n//  FSPagerViewLayoutAttributes.swift\n//  FSPagerViewExample\n//\n//  Created by Wenchao Ding on 26/02/2017.\n//  Copyri"
  },
  {
    "path": "Sources/FSPagerViewObjcCompat.h",
    "chars": 514,
    "preview": "//\n//  FSPagerViewObjcCompat.h\n//  FSPagerView\n//\n//  Created by 丁文超 on 2018/9/18.\n//  Copyright © 2018 Wenchao Ding. Al"
  },
  {
    "path": "Sources/FSPagerViewObjcCompat.m",
    "chars": 307,
    "preview": "//\n//  FSPagerViewObjcCompat.m\n//  FSPagerView\n//\n//  Created by Wenchao Ding on 2018/9/24.\n//  Copyright © 2018 Wenchao"
  }
]

About this extraction

This page contains the full source code of the WenchaoD/FSPagerView GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 53 files (312.3 KB), approximately 84.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!