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 = "<
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": "\n\n[!"
},
{
"path": "README.md",
"chars": 12093,
"preview": "\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.