├── .swift-version
├── _Pods.xcodeproj
├── Example
├── demo.gif
├── Pods
│ ├── Pods.xcodeproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcuserdata
│ │ │ │ └── Tbxark.xcuserdatad
│ │ │ │ ├── UserInterfaceState.xcuserstate
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ ├── xcuserdata
│ │ │ └── Tbxark.xcuserdatad
│ │ │ │ └── xcschemes
│ │ │ │ ├── xcschememanagement.plist
│ │ │ │ ├── Pods-TKRubberPageControl_Tests.xcscheme
│ │ │ │ └── Pods-TKRubberPageControl_Example.xcscheme
│ │ ├── xcshareddata
│ │ │ └── xcschemes
│ │ │ │ └── TKRubberPageControl.xcscheme
│ │ └── project.pbxproj
│ ├── Target Support Files
│ │ ├── TKRubberPageControl
│ │ │ ├── TKRubberPageControl.modulemap
│ │ │ ├── TKRubberPageControl-dummy.m
│ │ │ ├── TKRubberPageControl-prefix.pch
│ │ │ ├── TKRubberPageControl-umbrella.h
│ │ │ ├── TKRubberPageControl.xcconfig
│ │ │ └── Info.plist
│ │ ├── Pods-TKRubberPageControl_Tests
│ │ │ ├── Pods-TKRubberPageControl_Tests-acknowledgements.markdown
│ │ │ ├── Pods-TKRubberPageControl_Tests.modulemap
│ │ │ ├── Pods-TKRubberPageControl_Tests-dummy.m
│ │ │ ├── Pods-TKRubberPageControl_Tests-umbrella.h
│ │ │ ├── Pods-TKRubberPageControl_Tests.debug.xcconfig
│ │ │ ├── Pods-TKRubberPageControl_Tests.release.xcconfig
│ │ │ ├── Info.plist
│ │ │ ├── Pods-TKRubberPageControl_Tests-acknowledgements.plist
│ │ │ ├── Pods-TKRubberPageControl_Tests-resources.sh
│ │ │ └── Pods-TKRubberPageControl_Tests-frameworks.sh
│ │ └── Pods-TKRubberPageControl_Example
│ │ │ ├── Pods-TKRubberPageControl_Example.modulemap
│ │ │ ├── Pods-TKRubberPageControl_Example-dummy.m
│ │ │ ├── Pods-TKRubberPageControl_Example-umbrella.h
│ │ │ ├── Pods-TKRubberPageControl_Example.debug.xcconfig
│ │ │ ├── Pods-TKRubberPageControl_Example.release.xcconfig
│ │ │ ├── Info.plist
│ │ │ ├── Pods-TKRubberPageControl_Example-acknowledgements.markdown
│ │ │ ├── Pods-TKRubberPageControl_Example-acknowledgements.plist
│ │ │ ├── Pods-TKRubberPageControl_Example-resources.sh
│ │ │ └── Pods-TKRubberPageControl_Example-frameworks.sh
│ ├── Manifest.lock
│ └── Local Podspecs
│ │ └── TKRubberPageControl.podspec.json
├── Podfile
├── TKRubberPageControl.xcworkspace
│ ├── xcuserdata
│ │ └── Tbxark.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ ├── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ └── contents.xcworkspacedata
├── TKRubberPageControl.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcuserdata
│ │ │ └── Tbxark.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── project.pbxproj
├── Podfile.lock
├── Tests
│ ├── Info.plist
│ └── Tests.swift
└── TKRubberPageControl
│ ├── Images.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
│ ├── Info.plist
│ ├── ViewController.swift
│ ├── AppDelegate.swift
│ └── Base.lproj
│ ├── LaunchScreen.xib
│ └── Main.storyboard
├── .gitattributes
├── .travis.yml
├── TKRubberPageControl.podspec
├── LICENSE
├── .gitignore
├── README.md
└── TKRubberPageControl
└── Classes
└── TKRubberPageControl.swift
/.swift-version:
--------------------------------------------------------------------------------
1 | 4.0
2 |
--------------------------------------------------------------------------------
/_Pods.xcodeproj:
--------------------------------------------------------------------------------
1 | Example/Pods/Pods.xcodeproj
--------------------------------------------------------------------------------
/Example/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TBXark/TKRubberIndicator/HEAD/Example/demo.gif
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | Example/** linguist-generated=true
2 | _Pods.xcodeproj/** linguist-generated=true
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | osx_image: xcode7.3
2 | language: swift
3 |
4 | xcode_project: Example/Pods/Pods.xcodeproj
5 | xcode_scheme: TKRubberPageControl
6 | xcode_sdk: iphonesimulator
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/TKRubberPageControl.modulemap:
--------------------------------------------------------------------------------
1 | framework module TKRubberPageControl {
2 | umbrella header "TKRubberPageControl-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/TKRubberPageControl-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_TKRubberPageControl : NSObject
3 | @end
4 | @implementation PodsDummy_TKRubberPageControl
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Podfile:
--------------------------------------------------------------------------------
1 | use_frameworks!
2 |
3 | target 'TKRubberPageControl_Example' do
4 | pod 'TKRubberPageControl', :path => '../'
5 |
6 | target 'TKRubberPageControl_Tests' do
7 | inherit! :search_paths
8 |
9 |
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TBXark/TKRubberIndicator/HEAD/Example/TKRubberPageControl.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TBXark/TKRubberIndicator/HEAD/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_TKRubberPageControl_Tests {
2 | umbrella header "Pods-TKRubberPageControl_Tests-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_TKRubberPageControl_Example {
2 | umbrella header "Pods-TKRubberPageControl_Example-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_TKRubberPageControl_Tests : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_TKRubberPageControl_Tests
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_TKRubberPageControl_Example : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_TKRubberPageControl_Example
5 | @end
6 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcodeproj/project.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TBXark/TKRubberIndicator/HEAD/Example/TKRubberPageControl.xcodeproj/project.xcworkspace/xcuserdata/Tbxark.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/TKRubberPageControl-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.xcworkspace/xcuserdata/Tbxark.xcuserdatad/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildLocationStyle
6 | UseTargetSettings
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - TKRubberPageControl (1.4.0)
3 |
4 | DEPENDENCIES:
5 | - TKRubberPageControl (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | TKRubberPageControl:
9 | :path: ../
10 |
11 | SPEC CHECKSUMS:
12 | TKRubberPageControl: 0eea65be56db49fc264402beb94fdc36b7dcd34f
13 |
14 | PODFILE CHECKSUM: b259ee75e85a254abee0a0821e8e1e02e0522bed
15 |
16 | COCOAPODS: 1.4.0
17 |
--------------------------------------------------------------------------------
/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - TKRubberPageControl (1.4.0)
3 |
4 | DEPENDENCIES:
5 | - TKRubberPageControl (from `../`)
6 |
7 | EXTERNAL SOURCES:
8 | TKRubberPageControl:
9 | :path: ../
10 |
11 | SPEC CHECKSUMS:
12 | TKRubberPageControl: 0eea65be56db49fc264402beb94fdc36b7dcd34f
13 |
14 | PODFILE CHECKSUM: b259ee75e85a254abee0a0821e8e1e02e0522bed
15 |
16 | COCOAPODS: 1.4.0
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/TKRubberPageControl-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double TKRubberPageControlVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char TKRubberPageControlVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_TKRubberPageControl_TestsVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_TKRubberPageControl_TestsVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_TKRubberPageControl_ExampleVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_TKRubberPageControl_ExampleVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/TKRubberPageControl.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "TKRubberPageControl"
3 | s.version = "1.4.0"
4 | s.summary = "A rubber pagec ontrol in Swift."
5 | s.license = { :type => 'MIT License', :file => 'LICENSE' }
6 | s.homepage = "https://github.com/TBXark/TKRubberIndicator"
7 | s.author = { "TBXark" => "tbxark@outlook.com" }
8 | s.source = { :git => "https://github.com/TBXark/TKRubberIndicator.git", :tag => s.version }
9 | s.platform = :ios, '8.0'
10 | s.source_files = 'TKRubberPageControl/Classes/**/*'
11 | s.requires_arc = true
12 | end
13 |
--------------------------------------------------------------------------------
/Example/Pods/Local Podspecs/TKRubberPageControl.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "TKRubberPageControl",
3 | "version": "1.4.0",
4 | "summary": "A rubber pagec ontrol in Swift.",
5 | "license": {
6 | "type": "MIT License",
7 | "file": "LICENSE"
8 | },
9 | "homepage": "https://github.com/TBXark/TKRubberIndicator",
10 | "authors": {
11 | "TBXark": "tbxark@outlook.com"
12 | },
13 | "source": {
14 | "git": "https://github.com/TBXark/TKRubberIndicator.git",
15 | "tag": "1.4.0"
16 | },
17 | "platforms": {
18 | "ios": "8.0"
19 | },
20 | "source_files": "TKRubberPageControl/Classes/**/*",
21 | "requires_arc": true
22 | }
23 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/TKRubberPageControl.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.debug.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl/TKRubberPageControl.framework/Headers"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.release.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl/TKRubberPageControl.framework/Headers"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
8 | PODS_ROOT = ${SRCROOT}/Pods
9 |
--------------------------------------------------------------------------------
/Example/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl/TKRubberPageControl.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -framework "TKRubberPageControl"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/TKRubberPageControl/TKRubberPageControl.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -framework "TKRubberPageControl"
7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS"
8 | PODS_BUILD_DIR = ${BUILD_DIR}
9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
11 | PODS_ROOT = ${SRCROOT}/Pods
12 |
--------------------------------------------------------------------------------
/Example/Tests/Tests.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import XCTest
3 | import TKRubberPageControl
4 |
5 | class Tests: XCTestCase {
6 |
7 | override func setUp() {
8 | super.setUp()
9 | // Put setup code here. This method is called before the invocation of each test method in the class.
10 | }
11 |
12 | override func tearDown() {
13 | // Put teardown code here. This method is called after the invocation of each test method in the class.
14 | super.tearDown()
15 | }
16 |
17 | func testExample() {
18 | // This is an example of a functional test case.
19 | XCTAssert(true, "Pass")
20 | }
21 |
22 | func testPerformanceExample() {
23 | // This is an example of a performance test case.
24 | self.measure {
25 | // Put the code you want to measure the time of here.
26 | }
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcuserdata/Tbxark.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pods-TKRubberPageControl_Example.xcscheme
8 |
9 | isShown
10 |
11 | orderHint
12 | 0
13 |
14 | Pods-TKRubberPageControl_Tests.xcscheme
15 |
16 | isShown
17 |
18 | orderHint
19 | 1
20 |
21 | TKRubberPageControl.xcscheme_^#shared#^_
22 |
23 | isShown
24 |
25 | orderHint
26 | 2
27 |
28 |
29 | SuppressBuildableAutocreation
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/TKRubberPageControl/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.4.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ios-marketing",
45 | "size" : "1024x1024",
46 | "scale" : "1x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 TBXark
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## TKRubberPageControl
5 |
6 | The MIT License (MIT)
7 |
8 | Copyright (c) 2015 TBXark
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy
11 | of this software and associated documentation files (the "Software"), to deal
12 | in the Software without restriction, including without limitation the rights
13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 | copies of the Software, and to permit persons to whom the Software is
15 | furnished to do so, subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 | SOFTWARE.
27 |
28 |
29 | Generated by CocoaPods - https://cocoapods.org
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/swift
2 |
3 | ### Swift ###
4 | # Xcode
5 | #
6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
7 |
8 | ## Build generated
9 | build/
10 | DerivedData/
11 |
12 | ## Various settings
13 | *.pbxuser
14 | !default.pbxuser
15 | *.mode1v3
16 | !default.mode1v3
17 | *.mode2v3
18 | !default.mode2v3
19 | *.perspectivev3
20 | !default.perspectivev3
21 | xcuserdata/
22 |
23 | ## Other
24 | *.moved-aside
25 | *.xccheckout
26 | *.xcscmblueprint
27 |
28 | ## Obj-C/Swift specific
29 | *.hmap
30 | *.ipa
31 | *.dSYM.zip
32 | *.dSYM
33 |
34 | ## Playgrounds
35 | timeline.xctimeline
36 | playground.xcworkspace
37 |
38 | # Swift Package Manager
39 | #
40 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
41 | # Packages/
42 | # Package.pins
43 | .build/
44 |
45 | # CocoaPods - Refactored to standalone file
46 |
47 | # Carthage - Refactored to standalone file
48 |
49 | # fastlane
50 | #
51 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
52 | # screenshots whenever they are needed.
53 | # For more information about the recommended setup visit:
54 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
55 |
56 | fastlane/report.xml
57 | fastlane/Preview.html
58 | fastlane/screenshots
59 | fastlane/test_output
60 |
61 |
62 | # End of https://www.gitignore.io/api/swift
63 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // TKRubberPageControl
4 | //
5 | // Created by TBXark on 01/25/2018.
6 | // Copyright (c) 2018 TBXark. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import TKRubberPageControl
11 |
12 | class ViewController: UIViewController {
13 |
14 | let page = TKRubberPageControl(frame: CGRect(x: 100, y: 100, width: 200, height: 100), count: 3)
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | // view.backgroundColor = UIColor.white
20 | page.center = view.center
21 | page.valueChange = {[weak self] (num) -> Void in
22 | guard let self = self else { return }
23 | print("Closure : Page is \(num)")
24 | print("Value : Page is \(self.page.currentIndex)")
25 | }
26 | page.addTarget(self, action: #selector(ViewController.targetActionValueChange(_:)), for: UIControlEvents.valueChanged)
27 | view.addSubview(page)
28 |
29 | page.numberOfPage = 3
30 | }
31 |
32 | @IBAction func pageCountChange(_ sender: UISegmentedControl) {
33 | page.numberOfPage = sender.selectedSegmentIndex + 3
34 | print("Value : Page is \(self.page.currentIndex)")
35 | }
36 | @objc func targetActionValueChange(_ page: TKRubberPageControl) {
37 | print("Target-Action : Page is \(page.currentIndex)")
38 | }
39 |
40 | override func didReceiveMemoryWarning() {
41 | super.didReceiveMemoryWarning()
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // TKRubberPageControl
4 | //
5 | // Created by TBXark on 01/25/2018.
6 | // Copyright (c) 2018 TBXark. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
17 | // Override point for customization after application launch.
18 | return true
19 | }
20 |
21 | func applicationWillResignActive(_ application: UIApplication) {
22 | // 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.
23 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
24 | }
25 |
26 | func applicationDidEnterBackground(_ application: UIApplication) {
27 | // 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.
28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
29 | }
30 |
31 | func applicationWillEnterForeground(_ application: UIApplication) {
32 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
33 | }
34 |
35 | func applicationDidBecomeActive(_ application: UIApplication) {
36 | // 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.
37 | }
38 |
39 | func applicationWillTerminate(_ application: UIApplication) {
40 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | The MIT License (MIT)
18 |
19 | Copyright (c) 2015 TBXark
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy
22 | of this software and associated documentation files (the "Software"), to deal
23 | in the Software without restriction, including without limitation the rights
24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25 | copies of the Software, and to permit persons to whom the Software is
26 | furnished to do so, subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37 | SOFTWARE.
38 |
39 |
40 | License
41 | MIT License
42 | Title
43 | TKRubberPageControl
44 | Type
45 | PSGroupSpecifier
46 |
47 |
48 | FooterText
49 | Generated by CocoaPods - https://cocoapods.org
50 | Title
51 |
52 | Type
53 | PSGroupSpecifier
54 |
55 |
56 | StringsTable
57 | Acknowledgements
58 | Title
59 | Acknowledgements
60 |
61 |
62 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TKRubberPageControl.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
54 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
68 |
69 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcuserdata/Tbxark.xcuserdatad/xcschemes/Pods-TKRubberPageControl_Tests.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
54 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
68 |
69 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/xcuserdata/Tbxark.xcuserdatad/xcschemes/Pods-TKRubberPageControl_Example.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
54 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
68 |
69 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TKRubberIndicator
2 | > A rubber animation pagecontrol
3 |
4 | 
5 | 
6 | 
7 | [](https://travis-ci.org/TBXark/TKRubberIndicator)
8 | [](http://cocoapods.org/?q=TKRubberPageControl)
9 | [](https://github.com/Carthage/Carthage)
10 | [](https://raw.githubusercontent.com/TBXark/TKRubberIndicator/master/LICENSE)
11 |
12 |
13 | 
14 |
15 | ## Requirements
16 |
17 | - Swift 4.0
18 | - iOS 8.0+
19 | - Xcode 9.0
20 |
21 | ## Installation
22 |
23 | #### CocoaPods
24 | You can use [CocoaPods](http://cocoapods.org/) to install `TKRubberPageControl` by adding it to your `Podfile`:
25 |
26 | ```ruby
27 | platform :ios, '8.0'
28 | use_frameworks!
29 | pod 'TKRubberPageControl'
30 | ```
31 |
32 | To get the full benefits import `TKRubberPageControl` wherever you import UIKit
33 |
34 | ``` swift
35 | import UIKit
36 | import TKRubberPageControl
37 | ```
38 | #### Carthage
39 | Create a `Cartfile` that lists the framework and run `carthage update`. Follow the [instructions](https://github.com/Carthage/Carthage#if-youre-building-for-ios) to add `$(SRCROOT)/Carthage/Build/iOS/TKRubberPageControl.framework` to an iOS project.
40 |
41 | ```
42 | github "tbxark/TKRubberIndicator"
43 | ```
44 | #### Manually
45 | 1. Download and drop ```TKRubberPageControl.swift``` in your project.
46 | 2. Congratulations!
47 |
48 | ## Usage example
49 |
50 | You can use closure or Target-Action to listen control event
51 |
52 | ```swift
53 | class ViewController: UIViewController {
54 |
55 | let page = TKRubberIndicator(frame: CGRectMake(100, 100, 200, 100), count: 6)
56 |
57 | override func viewDidLoad() {
58 | super.viewDidLoad()
59 |
60 |
61 | self.view.backgroundColor = UIColor(red:0.553, green:0.376, blue:0.549, alpha:1)
62 | page.center = self.view.center
63 | page.valueChange = {(num) -> Void in
64 | print("Closure : Page is \(num)")
65 | }
66 | page.addTarget(self, action: "targetActionValueChange:", forControlEvents: UIControlEvents.ValueChanged)
67 | self.view.addSubview(page)
68 |
69 | page.numberOfpage = 2
70 | }
71 |
72 | @IBAction func pageCountChange(sender: UISegmentedControl) {
73 | page.numberOfpage = (sender.selectedSegmentIndex + 1) * 2
74 | }
75 | func targetActionValueChange(page:TKRubberIndicator){
76 | print("Target-Action : Page is \(page.currentIndex)")
77 | }
78 |
79 | override func didReceiveMemoryWarning() {
80 | super.didReceiveMemoryWarning()
81 | }
82 | }
83 |
84 | ```
85 |
86 | ### Base
87 |
88 | |Key | Usage| |
89 | |---|---|---|
90 | |smallBubbleSize|未选中小球尺寸|unselect small ball size|
91 | |mainBubbleSize|选中大球尺寸|select big ball size|
92 | |bubbleXOffsetSpace|小球间距|The distance between the ball|
93 | |bubbleYOffsetSpace|纵向间距|bubble Y Offset Space|
94 | |animationDuration|动画时长|animation duration|
95 | |backgroundColor|背景颜色|control background color|
96 | |smallBubbleColor|小球颜色|unselect small ball color|
97 | |mainBubbleColor|大球颜色|select big ball color|
98 |
99 |
100 | ## Release History
101 |
102 | * 1.4.0
103 | Swift 4.0
104 |
105 | * 1.3.1
106 | Bug Fixed
107 |
108 | * 1.3.0
109 | Support Swift 3.0
110 |
111 | * 1.0.5
112 | Fix bug, add Cocoapod and Carthage support
113 |
114 | * 1.0.4
115 | Complete basic functions
116 |
117 | ## Contribute
118 |
119 | We would love for you to contribute to **TKRubberPageControl**, check the ``LICENSE`` file for more info.
120 |
121 | ## Meta
122 |
123 | TBXark – [@tbxark](https://twitter.com/tbxark) – tbxark@outlook.com
124 |
125 | Distributed under the MIT license. See ``LICENSE`` for more information.
126 |
127 | [https://github.com/TBXark](https://github.com/TBXark)
128 |
129 | [swift-image]:https://img.shields.io/badge/swift-3.0-orange.svg
130 | [swift-url]: https://swift.org/
131 | [license-image]: https://img.shields.io/badge/License-MIT-blue.svg
132 | [license-url]: LICENSE
133 | [travis-image]: https://img.shields.io/travis/dbader/node-datadog-metrics/master.svg?style=flat-square
134 | [travis-url]: https://travis-ci.org/dbader/node-datadog-metrics
135 | [codebeat-image]: https://codebeat.co/badges/c19b47ea-2f9d-45df-8458-b2d952fe9dad
136 | [codebeat-url]: https://codebeat.co/projects/github-com-vsouza-awesomeios-com
137 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
5 |
6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
7 | > "$RESOURCES_TO_COPY"
8 |
9 | XCASSET_FILES=()
10 |
11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
14 |
15 | case "${TARGETED_DEVICE_FAMILY}" in
16 | 1,2)
17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
18 | ;;
19 | 1)
20 | TARGET_DEVICE_ARGS="--target-device iphone"
21 | ;;
22 | 2)
23 | TARGET_DEVICE_ARGS="--target-device ipad"
24 | ;;
25 | 3)
26 | TARGET_DEVICE_ARGS="--target-device tv"
27 | ;;
28 | 4)
29 | TARGET_DEVICE_ARGS="--target-device watch"
30 | ;;
31 | *)
32 | TARGET_DEVICE_ARGS="--target-device mac"
33 | ;;
34 | esac
35 |
36 | install_resource()
37 | {
38 | if [[ "$1" = /* ]] ; then
39 | RESOURCE_PATH="$1"
40 | else
41 | RESOURCE_PATH="${PODS_ROOT}/$1"
42 | fi
43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
44 | cat << EOM
45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
46 | EOM
47 | exit 1
48 | fi
49 | case $RESOURCE_PATH in
50 | *.storyboard)
51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
53 | ;;
54 | *.xib)
55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
57 | ;;
58 | *.framework)
59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
63 | ;;
64 | *.xcdatamodel)
65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
67 | ;;
68 | *.xcdatamodeld)
69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
71 | ;;
72 | *.xcmappingmodel)
73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
75 | ;;
76 | *.xcassets)
77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
79 | ;;
80 | *)
81 | echo "$RESOURCE_PATH" || true
82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
83 | ;;
84 | esac
85 | }
86 |
87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
92 | fi
93 | rm -f "$RESOURCES_TO_COPY"
94 |
95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
96 | then
97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
99 | while read line; do
100 | if [[ $line != "${PODS_ROOT}*" ]]; then
101 | XCASSET_FILES+=("$line")
102 | fi
103 | done <<<"$OTHER_XCASSETS"
104 |
105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
106 | fi
107 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
5 |
6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
7 | > "$RESOURCES_TO_COPY"
8 |
9 | XCASSET_FILES=()
10 |
11 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
14 |
15 | case "${TARGETED_DEVICE_FAMILY}" in
16 | 1,2)
17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
18 | ;;
19 | 1)
20 | TARGET_DEVICE_ARGS="--target-device iphone"
21 | ;;
22 | 2)
23 | TARGET_DEVICE_ARGS="--target-device ipad"
24 | ;;
25 | 3)
26 | TARGET_DEVICE_ARGS="--target-device tv"
27 | ;;
28 | 4)
29 | TARGET_DEVICE_ARGS="--target-device watch"
30 | ;;
31 | *)
32 | TARGET_DEVICE_ARGS="--target-device mac"
33 | ;;
34 | esac
35 |
36 | install_resource()
37 | {
38 | if [[ "$1" = /* ]] ; then
39 | RESOURCE_PATH="$1"
40 | else
41 | RESOURCE_PATH="${PODS_ROOT}/$1"
42 | fi
43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
44 | cat << EOM
45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
46 | EOM
47 | exit 1
48 | fi
49 | case $RESOURCE_PATH in
50 | *.storyboard)
51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
53 | ;;
54 | *.xib)
55 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
56 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
57 | ;;
58 | *.framework)
59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
63 | ;;
64 | *.xcdatamodel)
65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
67 | ;;
68 | *.xcdatamodeld)
69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
71 | ;;
72 | *.xcmappingmodel)
73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
75 | ;;
76 | *.xcassets)
77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
79 | ;;
80 | *)
81 | echo "$RESOURCE_PATH" || true
82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
83 | ;;
84 | esac
85 | }
86 |
87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
92 | fi
93 | rm -f "$RESOURCES_TO_COPY"
94 |
95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
96 | then
97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
99 | while read line; do
100 | if [[ $line != "${PODS_ROOT}*" ]]; then
101 | XCASSET_FILES+=("$line")
102 | fi
103 | done <<<"$OTHER_XCASSETS"
104 |
105 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
106 | fi
107 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
6 |
7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
8 |
9 | # Used as a return value for each invocation of `strip_invalid_archs` function.
10 | STRIP_BINARY_RETVAL=0
11 |
12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
15 |
16 | # Copies and strips a vendored framework
17 | install_framework()
18 | {
19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
20 | local source="${BUILT_PRODUCTS_DIR}/$1"
21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
23 | elif [ -r "$1" ]; then
24 | local source="$1"
25 | fi
26 |
27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
28 |
29 | if [ -L "${source}" ]; then
30 | echo "Symlinked..."
31 | source="$(readlink "${source}")"
32 | fi
33 |
34 | # Use filter instead of exclude so missing patterns don't throw errors.
35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
37 |
38 | local basename
39 | basename="$(basename -s .framework "$1")"
40 | binary="${destination}/${basename}.framework/${basename}"
41 | if ! [ -r "$binary" ]; then
42 | binary="${destination}/${basename}"
43 | fi
44 |
45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
47 | strip_invalid_archs "$binary"
48 | fi
49 |
50 | # Resign the code if required by the build settings to avoid unstable apps
51 | code_sign_if_enabled "${destination}/$(basename "$1")"
52 |
53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
55 | local swift_runtime_libs
56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
57 | for lib in $swift_runtime_libs; do
58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
60 | code_sign_if_enabled "${destination}/${lib}"
61 | done
62 | fi
63 | }
64 |
65 | # Copies and strips a vendored dSYM
66 | install_dsym() {
67 | local source="$1"
68 | if [ -r "$source" ]; then
69 | # Copy the dSYM into a the targets temp dir.
70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
72 |
73 | local basename
74 | basename="$(basename -s .framework.dSYM "$source")"
75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
76 |
77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then
79 | strip_invalid_archs "$binary"
80 | fi
81 |
82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
83 | # Move the stripped file into its final destination.
84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
86 | else
87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
89 | fi
90 | fi
91 | }
92 |
93 | # Signs a framework with the provided identity
94 | code_sign_if_enabled() {
95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
96 | # Use the current code_sign_identitiy
97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'"
99 |
100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
101 | code_sign_cmd="$code_sign_cmd &"
102 | fi
103 | echo "$code_sign_cmd"
104 | eval "$code_sign_cmd"
105 | fi
106 | }
107 |
108 | # Strip invalid architectures
109 | strip_invalid_archs() {
110 | binary="$1"
111 | # Get architectures for current target binary
112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
113 | # Intersect them with the architectures we are building for
114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
115 | # If there are no archs supported by this binary then warn the user
116 | if [[ -z "$intersected_archs" ]]; then
117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
118 | STRIP_BINARY_RETVAL=0
119 | return
120 | fi
121 | stripped=""
122 | for arch in $binary_archs; do
123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
124 | # Strip non-valid architectures in-place
125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1
126 | stripped="$stripped $arch"
127 | fi
128 | done
129 | if [[ "$stripped" ]]; then
130 | echo "Stripped $binary of architectures:$stripped"
131 | fi
132 | STRIP_BINARY_RETVAL=1
133 | }
134 |
135 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
136 | wait
137 | fi
138 |
--------------------------------------------------------------------------------
/Example/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
6 |
7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
8 |
9 | # Used as a return value for each invocation of `strip_invalid_archs` function.
10 | STRIP_BINARY_RETVAL=0
11 |
12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
15 |
16 | # Copies and strips a vendored framework
17 | install_framework()
18 | {
19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
20 | local source="${BUILT_PRODUCTS_DIR}/$1"
21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
23 | elif [ -r "$1" ]; then
24 | local source="$1"
25 | fi
26 |
27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
28 |
29 | if [ -L "${source}" ]; then
30 | echo "Symlinked..."
31 | source="$(readlink "${source}")"
32 | fi
33 |
34 | # Use filter instead of exclude so missing patterns don't throw errors.
35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
37 |
38 | local basename
39 | basename="$(basename -s .framework "$1")"
40 | binary="${destination}/${basename}.framework/${basename}"
41 | if ! [ -r "$binary" ]; then
42 | binary="${destination}/${basename}"
43 | fi
44 |
45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
47 | strip_invalid_archs "$binary"
48 | fi
49 |
50 | # Resign the code if required by the build settings to avoid unstable apps
51 | code_sign_if_enabled "${destination}/$(basename "$1")"
52 |
53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
55 | local swift_runtime_libs
56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
57 | for lib in $swift_runtime_libs; do
58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
60 | code_sign_if_enabled "${destination}/${lib}"
61 | done
62 | fi
63 | }
64 |
65 | # Copies and strips a vendored dSYM
66 | install_dsym() {
67 | local source="$1"
68 | if [ -r "$source" ]; then
69 | # Copy the dSYM into a the targets temp dir.
70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
72 |
73 | local basename
74 | basename="$(basename -s .framework.dSYM "$source")"
75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
76 |
77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then
79 | strip_invalid_archs "$binary"
80 | fi
81 |
82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
83 | # Move the stripped file into its final destination.
84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
86 | else
87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
89 | fi
90 | fi
91 | }
92 |
93 | # Signs a framework with the provided identity
94 | code_sign_if_enabled() {
95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
96 | # Use the current code_sign_identitiy
97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'"
99 |
100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
101 | code_sign_cmd="$code_sign_cmd &"
102 | fi
103 | echo "$code_sign_cmd"
104 | eval "$code_sign_cmd"
105 | fi
106 | }
107 |
108 | # Strip invalid architectures
109 | strip_invalid_archs() {
110 | binary="$1"
111 | # Get architectures for current target binary
112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
113 | # Intersect them with the architectures we are building for
114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
115 | # If there are no archs supported by this binary then warn the user
116 | if [[ -z "$intersected_archs" ]]; then
117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
118 | STRIP_BINARY_RETVAL=0
119 | return
120 | fi
121 | stripped=""
122 | for arch in $binary_archs; do
123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
124 | # Strip non-valid architectures in-place
125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1
126 | stripped="$stripped $arch"
127 | fi
128 | done
129 | if [[ "$stripped" ]]; then
130 | echo "Stripped $binary of architectures:$stripped"
131 | fi
132 | STRIP_BINARY_RETVAL=1
133 | }
134 |
135 |
136 | if [[ "$CONFIGURATION" == "Debug" ]]; then
137 | install_framework "${BUILT_PRODUCTS_DIR}/TKRubberPageControl/TKRubberPageControl.framework"
138 | fi
139 | if [[ "$CONFIGURATION" == "Release" ]]; then
140 | install_framework "${BUILT_PRODUCTS_DIR}/TKRubberPageControl/TKRubberPageControl.framework"
141 | fi
142 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
143 | wait
144 | fi
145 |
--------------------------------------------------------------------------------
/TKRubberPageControl/Classes/TKRubberPageControl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TKRubberPageControl.swift
3 | // TKRubberPageControl
4 | //
5 | // Created by Tbxark on 15/10/26.
6 | // Copyright © 2015年 TBXark. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | private enum TKMoveDirection {
12 | case left
13 | case right
14 |
15 | func toLeft() -> Bool {
16 | switch self {
17 | case .left:
18 | return true
19 | case .right:
20 | return false
21 | }
22 | }
23 | }
24 |
25 | // MARK: - TKRubberPageControlConfig
26 | // 样式配置 (含默认配置)
27 |
28 | public struct TKRubberPageControlConfig {
29 | public var smallBubbleSize: CGFloat // 小球尺寸
30 | public var mainBubbleSize: CGFloat // 大球尺寸
31 | public var bubbleXOffsetSpace: CGFloat // 小球间距
32 | public var bubbleYOffsetSpace: CGFloat // 纵向间距
33 | public var animationDuration: CFTimeInterval // 动画时长
34 | public var smallBubbleMoveRadius: CGFloat {
35 | return smallBubbleSize + bubbleXOffsetSpace
36 | } // 小球运动半径
37 | public var backgroundColor: UIColor // 横条背景颜色
38 | public var smallBubbleColor: UIColor // 小球颜色
39 | public var bigBubbleColor: UIColor // 大球颜色
40 |
41 | public init(smallBubbleSize: CGFloat = 16,
42 | mainBubbleSize: CGFloat = 40,
43 | bubbleXOffsetSpace: CGFloat = 12,
44 | bubbleYOffsetSpace: CGFloat = 8,
45 | animationDuration: CFTimeInterval = 0.2,
46 | backgroundColor: UIColor = UIColor(red: 0.357, green: 0.196, blue: 0.337, alpha: 1.000),
47 | smallBubbleColor: UIColor = UIColor(red: 0.961, green: 0.561, blue: 0.518, alpha: 1.000),
48 | bigBubbleColor: UIColor = UIColor(red: 0.788, green: 0.216, blue: 0.337, alpha: 1.000)) {
49 | self.smallBubbleSize = smallBubbleSize
50 | self.mainBubbleSize = mainBubbleSize
51 | self.bubbleXOffsetSpace = bubbleXOffsetSpace
52 | self.bubbleYOffsetSpace = bubbleYOffsetSpace
53 | self.animationDuration = animationDuration
54 | self.backgroundColor = backgroundColor
55 | self.smallBubbleColor = smallBubbleColor
56 | self.bigBubbleColor = bigBubbleColor
57 | }
58 | }
59 |
60 | // MARK: PageControl
61 | open class TKRubberPageControl: UIControl {
62 |
63 | // 页数
64 | open var numberOfPage: Int = 5 {
65 | didSet {
66 | if oldValue != numberOfPage {
67 | resetRubberIndicator()
68 | }
69 | }
70 | }
71 | open var currentIndex = 0 {
72 | didSet {
73 | guard oldValue != currentIndex else {
74 | return
75 | }
76 | setCurrentIndex(currentIndex, updateLayer: true)
77 | }
78 | }
79 | // 事件闭包
80 | open var valueChange: ((Int) -> Void)?
81 | // 样式配置
82 | open var styleConfig: TKRubberPageControlConfig {
83 | didSet {
84 | resetRubberIndicator()
85 | }
86 | }
87 |
88 | // 手势
89 | private var indexTap: UITapGestureRecognizer?
90 | // 所有图层
91 | private var smallBubbles = [TKBubbleCell]()
92 | private var backgroundLayer = CAShapeLayer()
93 | private var mainBubble = CAShapeLayer()
94 | private var backLineLayer = CAShapeLayer()
95 |
96 | // 大球缩放比例
97 | private let bubbleScale: CGFloat = 1 / 3.0
98 |
99 | // 存储计算用的
100 | private var xPointBegin: CGFloat = 0
101 | private var xPointEnd: CGFloat = 0
102 | private var yPointBegin: CGFloat = 0
103 | private var yPointEnd: CGFloat = 0
104 |
105 | public init(frame: CGRect, count: Int, config: TKRubberPageControlConfig = TKRubberPageControlConfig()) {
106 | numberOfPage = count
107 | styleConfig = config
108 | super.init(frame: frame)
109 | setUpView()
110 | }
111 |
112 | public required init?(coder aDecoder: NSCoder) {
113 | styleConfig = TKRubberPageControlConfig()
114 | super.init(coder: aDecoder)
115 | setUpView()
116 | }
117 |
118 | private func setUpView() {
119 |
120 | // 一些奇怪的位置计算
121 |
122 | let y = (bounds.height - (styleConfig.smallBubbleSize + 2 * styleConfig.bubbleYOffsetSpace)) / 2
123 | let w = CGFloat(numberOfPage - 2) * styleConfig.smallBubbleSize + styleConfig.mainBubbleSize + CGFloat(numberOfPage) * styleConfig.bubbleXOffsetSpace
124 | let h = styleConfig.smallBubbleSize + styleConfig.bubbleYOffsetSpace * 2
125 | let x = (bounds.width - w) / 2
126 | #if DEBUG
127 | if w > bounds.width || h > bounds.height {
128 | print("⚠️⚠️⚠️ TKRubberPageControl size out of bounds ⚠️⚠️⚠️")
129 | }
130 | #endif
131 |
132 | xPointBegin = x
133 | xPointEnd = x + w
134 | yPointBegin = y
135 | yPointEnd = y + h
136 |
137 | let lineFrame = CGRect(x: x, y: y, width: w, height: h)
138 | let backBubbleFrame = CGRect(x: x, y: y - (styleConfig.mainBubbleSize - h) / 2, width: styleConfig.mainBubbleSize, height: styleConfig.mainBubbleSize)
139 | var bigBubbleFrame = backBubbleFrame.insetBy(dx: styleConfig.bubbleYOffsetSpace, dy: styleConfig.bubbleYOffsetSpace)
140 |
141 | // 背景的横线
142 | backLineLayer.path = UIBezierPath(roundedRect: lineFrame, cornerRadius: h / 2).cgPath
143 | backLineLayer.fillColor = styleConfig.backgroundColor.cgColor
144 | backLineLayer.frame = bounds
145 | layer.addSublayer(backLineLayer)
146 |
147 | // 大球背景的圈
148 | backgroundLayer.path = UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: backBubbleFrame.size)).cgPath
149 | backgroundLayer.frame = backBubbleFrame
150 | backgroundLayer.fillColor = styleConfig.backgroundColor.cgColor
151 | backgroundLayer.zPosition = -1
152 |
153 | layer.addSublayer(backgroundLayer)
154 |
155 | // 大球
156 | let origin = bigBubbleFrame.origin
157 | mainBubble.path = UIBezierPath(ovalIn: CGRect(origin: CGPoint.zero, size: bigBubbleFrame.size)).cgPath
158 | mainBubble.fillColor = styleConfig.bigBubbleColor.cgColor
159 | bigBubbleFrame.origin = origin
160 | mainBubble.frame = bigBubbleFrame
161 | mainBubble.zPosition = 100
162 | layer.addSublayer(mainBubble)
163 |
164 | // 生成小球
165 | let bubbleOffset = styleConfig.smallBubbleSize + styleConfig.bubbleXOffsetSpace
166 | var bubbleFrame = CGRect(x: x + styleConfig.bubbleXOffsetSpace + bubbleOffset, y: y + styleConfig.bubbleYOffsetSpace, width: styleConfig.smallBubbleSize, height: styleConfig.smallBubbleSize)
167 | for _ in 0..<(numberOfPage - 1) {
168 | let smallBubble = TKBubbleCell(style: styleConfig)
169 | smallBubble.frame = bubbleFrame
170 | layer.addSublayer(smallBubble)
171 | smallBubbles.append(smallBubble)
172 | bubbleFrame.origin.x += bubbleOffset
173 | smallBubble.zPosition = 1
174 | }
175 |
176 | // 增加点击手势
177 | if indexTap == nil {
178 | let tap = UITapGestureRecognizer(target: self, action: #selector(TKRubberPageControl.handleTapGestureRecognizer(_:)))
179 | addGestureRecognizer(tap)
180 | indexTap = tap
181 | }
182 | }
183 |
184 | // 重置控件
185 | open func resetRubberIndicator() {
186 | smallBubbles.forEach {
187 | $0.removeFromSuperlayer()
188 | }
189 | smallBubbles.removeAll()
190 | setUpView()
191 | setCurrentIndex(0, updateLayer: false)
192 | }
193 |
194 | // 手势事件
195 | @objc private func handleTapGestureRecognizer(_ ges: UITapGestureRecognizer) {
196 | let point = ges.location(in: self)
197 | if point.y > yPointBegin && point.y < yPointEnd && point.x > xPointBegin && point.x < xPointEnd {
198 | let index = Int(point.x - xPointBegin) / Int(styleConfig.smallBubbleMoveRadius)
199 | setCurrentIndex(index, updateLayer: true)
200 | }
201 | }
202 |
203 | // Index值变化
204 | private func setCurrentIndex(_ newIndex: Int, updateLayer: Bool) {
205 | let index = max(0, min(newIndex, numberOfPage - 1))
206 | guard index != currentIndex else {
207 | return
208 | }
209 |
210 | if updateLayer {
211 | // 大球运动方向
212 | let direction = (currentIndex > index) ? TKMoveDirection.right : TKMoveDirection.left
213 |
214 | // 需要运动的小球的范围
215 | let range = (currentIndex < index) ? (currentIndex + 1)...index : index...(currentIndex - 1)
216 |
217 | // 小球动画
218 | for index in range {
219 | let smallBubbleIndex = (direction.toLeft()) ? (index - 1) : (index)
220 | let smallBubble = smallBubbles[smallBubbleIndex]
221 | smallBubble.positionChange(direction,
222 | radius: styleConfig.smallBubbleMoveRadius / 2,
223 | duration: styleConfig.animationDuration,
224 | beginTime: CACurrentMediaTime())
225 | }
226 |
227 | // 大球缩放动画
228 | let bubbleTransformAnim = CAKeyframeAnimation(keyPath: "transform")
229 | bubbleTransformAnim.values = [NSValue(caTransform3D: CATransform3DIdentity),
230 | NSValue(caTransform3D: CATransform3DMakeScale(bubbleScale, bubbleScale, 1)),
231 | NSValue(caTransform3D: CATransform3DIdentity)]
232 | bubbleTransformAnim.keyTimes = [0, 0.5, 1]
233 | bubbleTransformAnim.duration = styleConfig.animationDuration
234 |
235 | // 大球移动动画, 用隐式动画大球的位置会真正的改变
236 | CATransaction.begin()
237 | CATransaction.setAnimationDuration(styleConfig.animationDuration)
238 | let x = xPointBegin + styleConfig.smallBubbleMoveRadius * CGFloat(index) + styleConfig.mainBubbleSize / 2
239 | mainBubble.position.x = x
240 | backgroundLayer.position.x = x
241 | CATransaction.commit()
242 | mainBubble.add(bubbleTransformAnim, forKey: "Scale")
243 | }
244 |
245 | // 变更`currentIndex`
246 | currentIndex = index
247 | // 可以使用 Target-Action 监听事件
248 | sendActions(for: UIControlEvents.valueChanged)
249 | // 也可以使用 闭包 监听事件
250 | valueChange?(currentIndex)
251 |
252 | }
253 |
254 | }
255 |
256 | // MARK: - Small Bubble
257 | private class TKBubbleCell: CAShapeLayer, CAAnimationDelegate {
258 |
259 | var bubbleLayer = CAShapeLayer()
260 | let bubbleScale: CGFloat = 0.5
261 | var lastDirection: TKMoveDirection!
262 | var styleConfig: TKRubberPageControlConfig
263 | var cachePosition = CGPoint.zero
264 |
265 | override init(layer: Any) {
266 | styleConfig = TKRubberPageControlConfig()
267 | super.init(layer: layer)
268 | setupLayer()
269 | }
270 |
271 | internal init(style: TKRubberPageControlConfig) {
272 | styleConfig = style
273 | super.init()
274 | setupLayer()
275 | }
276 |
277 | required init?(coder aDecoder: NSCoder) {
278 | styleConfig = TKRubberPageControlConfig()
279 | super.init(coder: aDecoder)
280 | setupLayer()
281 | }
282 |
283 | private func setupLayer() {
284 | frame = CGRect(x: 0, y: 0, width: styleConfig.smallBubbleSize, height: styleConfig.smallBubbleSize)
285 |
286 | bubbleLayer.path = UIBezierPath(ovalIn: bounds).cgPath
287 | bubbleLayer.fillColor = styleConfig.smallBubbleColor.cgColor
288 | bubbleLayer.strokeColor = styleConfig.backgroundColor.cgColor
289 | bubbleLayer.lineWidth = styleConfig.bubbleXOffsetSpace / 8
290 |
291 | addSublayer(bubbleLayer)
292 | }
293 |
294 | // beginTime 本来是留给小球轮播用的, 但是效果不好就没用了
295 | func positionChange(_ direction: TKMoveDirection, radius: CGFloat, duration: CFTimeInterval, beginTime: CFTimeInterval) {
296 |
297 | let toLeft = direction.toLeft()
298 | let movePath = UIBezierPath()
299 | var center = CGPoint.zero
300 | let startAngle = toLeft ? 0 : CGFloat.pi
301 | let endAngle = toLeft ? CGFloat.pi : 0
302 | center.x += radius * (toLeft ? -1 : 1)
303 | lastDirection = direction
304 |
305 | movePath.addArc(withCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: toLeft)
306 |
307 | // 小球整体沿着圆弧运动, 但是当圆弧运动动画合形变动画叠加在一起的时候, 就没有了向心作用, 所以就把形变动画放在子 Layer 里面
308 | let positionAnimation = CAKeyframeAnimation(keyPath: "position")
309 | positionAnimation.duration = duration
310 | positionAnimation.beginTime = beginTime
311 | positionAnimation.isAdditive = true
312 | positionAnimation.calculationMode = kCAAnimationPaced
313 | positionAnimation.rotationMode = kCAAnimationRotateAuto
314 | positionAnimation.path = movePath.cgPath
315 | positionAnimation.fillMode = kCAFillModeForwards
316 | positionAnimation.isRemovedOnCompletion = false
317 | positionAnimation.delegate = self
318 | cachePosition = position
319 |
320 | // 小球变形动画, 小球变形实际上只是 Y 轴上的 Scale
321 | let bubbleTransformAnim = CAKeyframeAnimation(keyPath: "transform")
322 | bubbleTransformAnim.values = [NSValue(caTransform3D: CATransform3DIdentity),
323 | NSValue(caTransform3D: CATransform3DMakeScale(1, bubbleScale, 1)),
324 | NSValue(caTransform3D: CATransform3DIdentity)]
325 | bubbleTransformAnim.keyTimes = [0, 0.5, 1]
326 | bubbleTransformAnim.duration = duration
327 | bubbleTransformAnim.beginTime = beginTime
328 |
329 | bubbleLayer.add(bubbleTransformAnim, forKey: "Scale")
330 | add(positionAnimation, forKey: "Position")
331 |
332 | // // 最后让小球鬼畜的抖动一下
333 | let bubbleShakeAnim = CAKeyframeAnimation(keyPath: "position")
334 | bubbleShakeAnim.beginTime = beginTime + duration + 0.05
335 | bubbleShakeAnim.duration = 0.02
336 | bubbleShakeAnim.values = [NSValue(cgPoint: CGPoint(x: 0, y: 0)),
337 | NSValue(cgPoint: CGPoint(x: 0, y: 3)),
338 | NSValue(cgPoint: CGPoint(x: 0, y: -3)),
339 | NSValue(cgPoint: CGPoint(x: 0, y: 0))]
340 | bubbleShakeAnim.repeatCount = 6
341 | bubbleShakeAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
342 | bubbleLayer.add(bubbleShakeAnim, forKey: "Shake")
343 | }
344 |
345 | func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
346 | if let animate = anim as? CAKeyframeAnimation {
347 | if animate.keyPath == "position" {
348 | removeAnimation(forKey: "Position")
349 | CATransaction.begin()
350 | // 改变小球实际的位置
351 | CATransaction.setAnimationDuration(0)
352 | CATransaction.setDisableActions(true)
353 | var point = cachePosition
354 | point.x += (styleConfig.smallBubbleSize + styleConfig.bubbleXOffsetSpace) * CGFloat(lastDirection.toLeft() ? -1 : 1)
355 | position = point
356 | opacity = 1
357 | CATransaction.commit()
358 | }
359 | }
360 | }
361 |
362 | }
363 |
--------------------------------------------------------------------------------
/Example/TKRubberPageControl.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 4DD32F127D38B2F952E7DB9E /* Pods_TKRubberPageControl_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C630F28F645C1194BD0EE01 /* Pods_TKRubberPageControl_Example.framework */; };
11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; };
12 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; };
13 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; };
14 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
15 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
16 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; };
17 | 6A2C1335201A2FB000A7E6C0 /* demo.gif in Resources */ = {isa = PBXBuildFile; fileRef = 6A2C1334201A2FB000A7E6C0 /* demo.gif */; };
18 | C74A13013694B106ACC78BC8 /* Pods_TKRubberPageControl_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ACA3DD7A4A83FC3A7E24B89D /* Pods_TKRubberPageControl_Tests.framework */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 607FACCF1AFB9204008FA782;
27 | remoteInfo = TKRubberPageControl;
28 | };
29 | /* End PBXContainerItemProxy section */
30 |
31 | /* Begin PBXFileReference section */
32 | 41ADF49DE44CCC91D25B62D8 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; };
33 | 607FACD01AFB9204008FA782 /* TKRubberPageControl_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TKRubberPageControl_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
34 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
35 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
36 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
37 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
38 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
39 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
40 | 607FACE51AFB9204008FA782 /* TKRubberPageControl_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TKRubberPageControl_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
42 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; };
43 | 63348B70AC22A02F95E98810 /* TKRubberPageControl.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = TKRubberPageControl.podspec; path = ../TKRubberPageControl.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
44 | 679B60D44901B6977ECC9A0A /* Pods-TKRubberPageControl_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TKRubberPageControl_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.debug.xcconfig"; sourceTree = ""; };
45 | 67FA234183E5AC11E2BA31A3 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; };
46 | 6A2C1334201A2FB000A7E6C0 /* demo.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = demo.gif; sourceTree = ""; };
47 | 6C630F28F645C1194BD0EE01 /* Pods_TKRubberPageControl_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TKRubberPageControl_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
48 | 6D0744C7302CE673A89B17F6 /* Pods-TKRubberPageControl_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TKRubberPageControl_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.release.xcconfig"; sourceTree = ""; };
49 | 7D8C1B4EA8BBF40A33B0612E /* Pods-TKRubberPageControl_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TKRubberPageControl_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.debug.xcconfig"; sourceTree = ""; };
50 | 8C14F69AF09A04B2FADB0898 /* Pods-TKRubberPageControl_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TKRubberPageControl_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.release.xcconfig"; sourceTree = ""; };
51 | ACA3DD7A4A83FC3A7E24B89D /* Pods_TKRubberPageControl_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TKRubberPageControl_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
52 | /* End PBXFileReference section */
53 |
54 | /* Begin PBXFrameworksBuildPhase section */
55 | 607FACCD1AFB9204008FA782 /* Frameworks */ = {
56 | isa = PBXFrameworksBuildPhase;
57 | buildActionMask = 2147483647;
58 | files = (
59 | 4DD32F127D38B2F952E7DB9E /* Pods_TKRubberPageControl_Example.framework in Frameworks */,
60 | );
61 | runOnlyForDeploymentPostprocessing = 0;
62 | };
63 | 607FACE21AFB9204008FA782 /* Frameworks */ = {
64 | isa = PBXFrameworksBuildPhase;
65 | buildActionMask = 2147483647;
66 | files = (
67 | C74A13013694B106ACC78BC8 /* Pods_TKRubberPageControl_Tests.framework in Frameworks */,
68 | );
69 | runOnlyForDeploymentPostprocessing = 0;
70 | };
71 | /* End PBXFrameworksBuildPhase section */
72 |
73 | /* Begin PBXGroup section */
74 | 607FACC71AFB9204008FA782 = {
75 | isa = PBXGroup;
76 | children = (
77 | 607FACF51AFB993E008FA782 /* Podspec Metadata */,
78 | 607FACD21AFB9204008FA782 /* Example for TKRubberPageControl */,
79 | 607FACE81AFB9204008FA782 /* Tests */,
80 | 607FACD11AFB9204008FA782 /* Products */,
81 | 80FAF49169774A012A653375 /* Pods */,
82 | 8DDF81FE0B68630E5EEE31FF /* Frameworks */,
83 | );
84 | sourceTree = "";
85 | };
86 | 607FACD11AFB9204008FA782 /* Products */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 607FACD01AFB9204008FA782 /* TKRubberPageControl_Example.app */,
90 | 607FACE51AFB9204008FA782 /* TKRubberPageControl_Tests.xctest */,
91 | );
92 | name = Products;
93 | sourceTree = "";
94 | };
95 | 607FACD21AFB9204008FA782 /* Example for TKRubberPageControl */ = {
96 | isa = PBXGroup;
97 | children = (
98 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */,
99 | 607FACD71AFB9204008FA782 /* ViewController.swift */,
100 | 607FACD91AFB9204008FA782 /* Main.storyboard */,
101 | 607FACDC1AFB9204008FA782 /* Images.xcassets */,
102 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
103 | 607FACD31AFB9204008FA782 /* Supporting Files */,
104 | );
105 | name = "Example for TKRubberPageControl";
106 | path = TKRubberPageControl;
107 | sourceTree = "";
108 | };
109 | 607FACD31AFB9204008FA782 /* Supporting Files */ = {
110 | isa = PBXGroup;
111 | children = (
112 | 607FACD41AFB9204008FA782 /* Info.plist */,
113 | );
114 | name = "Supporting Files";
115 | sourceTree = "";
116 | };
117 | 607FACE81AFB9204008FA782 /* Tests */ = {
118 | isa = PBXGroup;
119 | children = (
120 | 607FACEB1AFB9204008FA782 /* Tests.swift */,
121 | 607FACE91AFB9204008FA782 /* Supporting Files */,
122 | );
123 | path = Tests;
124 | sourceTree = "";
125 | };
126 | 607FACE91AFB9204008FA782 /* Supporting Files */ = {
127 | isa = PBXGroup;
128 | children = (
129 | 607FACEA1AFB9204008FA782 /* Info.plist */,
130 | );
131 | name = "Supporting Files";
132 | sourceTree = "";
133 | };
134 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
135 | isa = PBXGroup;
136 | children = (
137 | 6A2C1334201A2FB000A7E6C0 /* demo.gif */,
138 | 63348B70AC22A02F95E98810 /* TKRubberPageControl.podspec */,
139 | 41ADF49DE44CCC91D25B62D8 /* README.md */,
140 | 67FA234183E5AC11E2BA31A3 /* LICENSE */,
141 | );
142 | name = "Podspec Metadata";
143 | sourceTree = "";
144 | };
145 | 80FAF49169774A012A653375 /* Pods */ = {
146 | isa = PBXGroup;
147 | children = (
148 | 7D8C1B4EA8BBF40A33B0612E /* Pods-TKRubberPageControl_Example.debug.xcconfig */,
149 | 8C14F69AF09A04B2FADB0898 /* Pods-TKRubberPageControl_Example.release.xcconfig */,
150 | 679B60D44901B6977ECC9A0A /* Pods-TKRubberPageControl_Tests.debug.xcconfig */,
151 | 6D0744C7302CE673A89B17F6 /* Pods-TKRubberPageControl_Tests.release.xcconfig */,
152 | );
153 | name = Pods;
154 | sourceTree = "";
155 | };
156 | 8DDF81FE0B68630E5EEE31FF /* Frameworks */ = {
157 | isa = PBXGroup;
158 | children = (
159 | 6C630F28F645C1194BD0EE01 /* Pods_TKRubberPageControl_Example.framework */,
160 | ACA3DD7A4A83FC3A7E24B89D /* Pods_TKRubberPageControl_Tests.framework */,
161 | );
162 | name = Frameworks;
163 | sourceTree = "";
164 | };
165 | /* End PBXGroup section */
166 |
167 | /* Begin PBXNativeTarget section */
168 | 607FACCF1AFB9204008FA782 /* TKRubberPageControl_Example */ = {
169 | isa = PBXNativeTarget;
170 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TKRubberPageControl_Example" */;
171 | buildPhases = (
172 | 8C403CFF8B024755C20BD049 /* [CP] Check Pods Manifest.lock */,
173 | 607FACCC1AFB9204008FA782 /* Sources */,
174 | 607FACCD1AFB9204008FA782 /* Frameworks */,
175 | 607FACCE1AFB9204008FA782 /* Resources */,
176 | 3892B34AB61FCED6D73C54D0 /* [CP] Embed Pods Frameworks */,
177 | 2F615733475F5061AF8146B4 /* [CP] Copy Pods Resources */,
178 | );
179 | buildRules = (
180 | );
181 | dependencies = (
182 | );
183 | name = TKRubberPageControl_Example;
184 | productName = TKRubberPageControl;
185 | productReference = 607FACD01AFB9204008FA782 /* TKRubberPageControl_Example.app */;
186 | productType = "com.apple.product-type.application";
187 | };
188 | 607FACE41AFB9204008FA782 /* TKRubberPageControl_Tests */ = {
189 | isa = PBXNativeTarget;
190 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TKRubberPageControl_Tests" */;
191 | buildPhases = (
192 | 32AF25F7280E47263E749D53 /* [CP] Check Pods Manifest.lock */,
193 | 607FACE11AFB9204008FA782 /* Sources */,
194 | 607FACE21AFB9204008FA782 /* Frameworks */,
195 | 607FACE31AFB9204008FA782 /* Resources */,
196 | 0273B592BE7B46272D72B4A6 /* [CP] Embed Pods Frameworks */,
197 | 3B9F46F2980D15A6260155F4 /* [CP] Copy Pods Resources */,
198 | );
199 | buildRules = (
200 | );
201 | dependencies = (
202 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */,
203 | );
204 | name = TKRubberPageControl_Tests;
205 | productName = Tests;
206 | productReference = 607FACE51AFB9204008FA782 /* TKRubberPageControl_Tests.xctest */;
207 | productType = "com.apple.product-type.bundle.unit-test";
208 | };
209 | /* End PBXNativeTarget section */
210 |
211 | /* Begin PBXProject section */
212 | 607FACC81AFB9204008FA782 /* Project object */ = {
213 | isa = PBXProject;
214 | attributes = {
215 | LastSwiftUpdateCheck = 0830;
216 | LastUpgradeCheck = 0830;
217 | ORGANIZATIONNAME = CocoaPods;
218 | TargetAttributes = {
219 | 607FACCF1AFB9204008FA782 = {
220 | CreatedOnToolsVersion = 6.3.1;
221 | DevelopmentTeam = 858CBVXSWP;
222 | LastSwiftMigration = 0900;
223 | };
224 | 607FACE41AFB9204008FA782 = {
225 | CreatedOnToolsVersion = 6.3.1;
226 | LastSwiftMigration = 0900;
227 | TestTargetID = 607FACCF1AFB9204008FA782;
228 | };
229 | };
230 | };
231 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "TKRubberPageControl" */;
232 | compatibilityVersion = "Xcode 3.2";
233 | developmentRegion = English;
234 | hasScannedForEncodings = 0;
235 | knownRegions = (
236 | en,
237 | Base,
238 | );
239 | mainGroup = 607FACC71AFB9204008FA782;
240 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */;
241 | projectDirPath = "";
242 | projectRoot = "";
243 | targets = (
244 | 607FACCF1AFB9204008FA782 /* TKRubberPageControl_Example */,
245 | 607FACE41AFB9204008FA782 /* TKRubberPageControl_Tests */,
246 | );
247 | };
248 | /* End PBXProject section */
249 |
250 | /* Begin PBXResourcesBuildPhase section */
251 | 607FACCE1AFB9204008FA782 /* Resources */ = {
252 | isa = PBXResourcesBuildPhase;
253 | buildActionMask = 2147483647;
254 | files = (
255 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */,
256 | 6A2C1335201A2FB000A7E6C0 /* demo.gif in Resources */,
257 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */,
258 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */,
259 | );
260 | runOnlyForDeploymentPostprocessing = 0;
261 | };
262 | 607FACE31AFB9204008FA782 /* Resources */ = {
263 | isa = PBXResourcesBuildPhase;
264 | buildActionMask = 2147483647;
265 | files = (
266 | );
267 | runOnlyForDeploymentPostprocessing = 0;
268 | };
269 | /* End PBXResourcesBuildPhase section */
270 |
271 | /* Begin PBXShellScriptBuildPhase section */
272 | 0273B592BE7B46272D72B4A6 /* [CP] Embed Pods Frameworks */ = {
273 | isa = PBXShellScriptBuildPhase;
274 | buildActionMask = 2147483647;
275 | files = (
276 | );
277 | inputPaths = (
278 | );
279 | name = "[CP] Embed Pods Frameworks";
280 | outputPaths = (
281 | );
282 | runOnlyForDeploymentPostprocessing = 0;
283 | shellPath = /bin/sh;
284 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-frameworks.sh\"\n";
285 | showEnvVarsInLog = 0;
286 | };
287 | 2F615733475F5061AF8146B4 /* [CP] Copy Pods Resources */ = {
288 | isa = PBXShellScriptBuildPhase;
289 | buildActionMask = 2147483647;
290 | files = (
291 | );
292 | inputPaths = (
293 | );
294 | name = "[CP] Copy Pods Resources";
295 | outputPaths = (
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | shellPath = /bin/sh;
299 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-resources.sh\"\n";
300 | showEnvVarsInLog = 0;
301 | };
302 | 32AF25F7280E47263E749D53 /* [CP] Check Pods Manifest.lock */ = {
303 | isa = PBXShellScriptBuildPhase;
304 | buildActionMask = 2147483647;
305 | files = (
306 | );
307 | inputPaths = (
308 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
309 | "${PODS_ROOT}/Manifest.lock",
310 | );
311 | name = "[CP] Check Pods Manifest.lock";
312 | outputPaths = (
313 | "$(DERIVED_FILE_DIR)/Pods-TKRubberPageControl_Tests-checkManifestLockResult.txt",
314 | );
315 | runOnlyForDeploymentPostprocessing = 0;
316 | shellPath = /bin/sh;
317 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
318 | showEnvVarsInLog = 0;
319 | };
320 | 3892B34AB61FCED6D73C54D0 /* [CP] Embed Pods Frameworks */ = {
321 | isa = PBXShellScriptBuildPhase;
322 | buildActionMask = 2147483647;
323 | files = (
324 | );
325 | inputPaths = (
326 | "${SRCROOT}/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-frameworks.sh",
327 | "${BUILT_PRODUCTS_DIR}/TKRubberPageControl/TKRubberPageControl.framework",
328 | );
329 | name = "[CP] Embed Pods Frameworks";
330 | outputPaths = (
331 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TKRubberPageControl.framework",
332 | );
333 | runOnlyForDeploymentPostprocessing = 0;
334 | shellPath = /bin/sh;
335 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example-frameworks.sh\"\n";
336 | showEnvVarsInLog = 0;
337 | };
338 | 3B9F46F2980D15A6260155F4 /* [CP] Copy Pods Resources */ = {
339 | isa = PBXShellScriptBuildPhase;
340 | buildActionMask = 2147483647;
341 | files = (
342 | );
343 | inputPaths = (
344 | );
345 | name = "[CP] Copy Pods Resources";
346 | outputPaths = (
347 | );
348 | runOnlyForDeploymentPostprocessing = 0;
349 | shellPath = /bin/sh;
350 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests-resources.sh\"\n";
351 | showEnvVarsInLog = 0;
352 | };
353 | 8C403CFF8B024755C20BD049 /* [CP] Check Pods Manifest.lock */ = {
354 | isa = PBXShellScriptBuildPhase;
355 | buildActionMask = 2147483647;
356 | files = (
357 | );
358 | inputPaths = (
359 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
360 | "${PODS_ROOT}/Manifest.lock",
361 | );
362 | name = "[CP] Check Pods Manifest.lock";
363 | outputPaths = (
364 | "$(DERIVED_FILE_DIR)/Pods-TKRubberPageControl_Example-checkManifestLockResult.txt",
365 | );
366 | runOnlyForDeploymentPostprocessing = 0;
367 | shellPath = /bin/sh;
368 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
369 | showEnvVarsInLog = 0;
370 | };
371 | /* End PBXShellScriptBuildPhase section */
372 |
373 | /* Begin PBXSourcesBuildPhase section */
374 | 607FACCC1AFB9204008FA782 /* Sources */ = {
375 | isa = PBXSourcesBuildPhase;
376 | buildActionMask = 2147483647;
377 | files = (
378 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */,
379 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */,
380 | );
381 | runOnlyForDeploymentPostprocessing = 0;
382 | };
383 | 607FACE11AFB9204008FA782 /* Sources */ = {
384 | isa = PBXSourcesBuildPhase;
385 | buildActionMask = 2147483647;
386 | files = (
387 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */,
388 | );
389 | runOnlyForDeploymentPostprocessing = 0;
390 | };
391 | /* End PBXSourcesBuildPhase section */
392 |
393 | /* Begin PBXTargetDependency section */
394 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = {
395 | isa = PBXTargetDependency;
396 | target = 607FACCF1AFB9204008FA782 /* TKRubberPageControl_Example */;
397 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */;
398 | };
399 | /* End PBXTargetDependency section */
400 |
401 | /* Begin PBXVariantGroup section */
402 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = {
403 | isa = PBXVariantGroup;
404 | children = (
405 | 607FACDA1AFB9204008FA782 /* Base */,
406 | );
407 | name = Main.storyboard;
408 | sourceTree = "";
409 | };
410 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = {
411 | isa = PBXVariantGroup;
412 | children = (
413 | 607FACDF1AFB9204008FA782 /* Base */,
414 | );
415 | name = LaunchScreen.xib;
416 | sourceTree = "";
417 | };
418 | /* End PBXVariantGroup section */
419 |
420 | /* Begin XCBuildConfiguration section */
421 | 607FACED1AFB9204008FA782 /* Debug */ = {
422 | isa = XCBuildConfiguration;
423 | buildSettings = {
424 | ALWAYS_SEARCH_USER_PATHS = NO;
425 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
426 | CLANG_CXX_LIBRARY = "libc++";
427 | CLANG_ENABLE_MODULES = YES;
428 | CLANG_ENABLE_OBJC_ARC = YES;
429 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
430 | CLANG_WARN_BOOL_CONVERSION = YES;
431 | CLANG_WARN_COMMA = YES;
432 | CLANG_WARN_CONSTANT_CONVERSION = YES;
433 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
434 | CLANG_WARN_EMPTY_BODY = YES;
435 | CLANG_WARN_ENUM_CONVERSION = YES;
436 | CLANG_WARN_INFINITE_RECURSION = YES;
437 | CLANG_WARN_INT_CONVERSION = YES;
438 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
439 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
440 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
441 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
442 | CLANG_WARN_STRICT_PROTOTYPES = YES;
443 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
444 | CLANG_WARN_UNREACHABLE_CODE = YES;
445 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
446 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
447 | COPY_PHASE_STRIP = NO;
448 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
449 | ENABLE_STRICT_OBJC_MSGSEND = YES;
450 | ENABLE_TESTABILITY = YES;
451 | GCC_C_LANGUAGE_STANDARD = gnu99;
452 | GCC_DYNAMIC_NO_PIC = NO;
453 | GCC_NO_COMMON_BLOCKS = YES;
454 | GCC_OPTIMIZATION_LEVEL = 0;
455 | GCC_PREPROCESSOR_DEFINITIONS = (
456 | "DEBUG=1",
457 | "$(inherited)",
458 | );
459 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
460 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
461 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
462 | GCC_WARN_UNDECLARED_SELECTOR = YES;
463 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
464 | GCC_WARN_UNUSED_FUNCTION = YES;
465 | GCC_WARN_UNUSED_VARIABLE = YES;
466 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
467 | MTL_ENABLE_DEBUG_INFO = YES;
468 | ONLY_ACTIVE_ARCH = YES;
469 | SDKROOT = iphoneos;
470 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
471 | };
472 | name = Debug;
473 | };
474 | 607FACEE1AFB9204008FA782 /* Release */ = {
475 | isa = XCBuildConfiguration;
476 | buildSettings = {
477 | ALWAYS_SEARCH_USER_PATHS = NO;
478 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
479 | CLANG_CXX_LIBRARY = "libc++";
480 | CLANG_ENABLE_MODULES = YES;
481 | CLANG_ENABLE_OBJC_ARC = YES;
482 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
483 | CLANG_WARN_BOOL_CONVERSION = YES;
484 | CLANG_WARN_COMMA = YES;
485 | CLANG_WARN_CONSTANT_CONVERSION = YES;
486 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
487 | CLANG_WARN_EMPTY_BODY = YES;
488 | CLANG_WARN_ENUM_CONVERSION = YES;
489 | CLANG_WARN_INFINITE_RECURSION = YES;
490 | CLANG_WARN_INT_CONVERSION = YES;
491 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
492 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
493 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
494 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
495 | CLANG_WARN_STRICT_PROTOTYPES = YES;
496 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
497 | CLANG_WARN_UNREACHABLE_CODE = YES;
498 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
499 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
500 | COPY_PHASE_STRIP = NO;
501 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
502 | ENABLE_NS_ASSERTIONS = NO;
503 | ENABLE_STRICT_OBJC_MSGSEND = YES;
504 | GCC_C_LANGUAGE_STANDARD = gnu99;
505 | GCC_NO_COMMON_BLOCKS = YES;
506 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
507 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
508 | GCC_WARN_UNDECLARED_SELECTOR = YES;
509 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
510 | GCC_WARN_UNUSED_FUNCTION = YES;
511 | GCC_WARN_UNUSED_VARIABLE = YES;
512 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
513 | MTL_ENABLE_DEBUG_INFO = NO;
514 | SDKROOT = iphoneos;
515 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
516 | VALIDATE_PRODUCT = YES;
517 | };
518 | name = Release;
519 | };
520 | 607FACF01AFB9204008FA782 /* Debug */ = {
521 | isa = XCBuildConfiguration;
522 | baseConfigurationReference = 7D8C1B4EA8BBF40A33B0612E /* Pods-TKRubberPageControl_Example.debug.xcconfig */;
523 | buildSettings = {
524 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
525 | DEVELOPMENT_TEAM = 858CBVXSWP;
526 | INFOPLIST_FILE = TKRubberPageControl/Info.plist;
527 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
528 | MODULE_NAME = ExampleApp;
529 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
530 | PRODUCT_NAME = "$(TARGET_NAME)";
531 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
532 | SWIFT_VERSION = 4.0;
533 | };
534 | name = Debug;
535 | };
536 | 607FACF11AFB9204008FA782 /* Release */ = {
537 | isa = XCBuildConfiguration;
538 | baseConfigurationReference = 8C14F69AF09A04B2FADB0898 /* Pods-TKRubberPageControl_Example.release.xcconfig */;
539 | buildSettings = {
540 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
541 | DEVELOPMENT_TEAM = 858CBVXSWP;
542 | INFOPLIST_FILE = TKRubberPageControl/Info.plist;
543 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
544 | MODULE_NAME = ExampleApp;
545 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)";
546 | PRODUCT_NAME = "$(TARGET_NAME)";
547 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
548 | SWIFT_VERSION = 4.0;
549 | };
550 | name = Release;
551 | };
552 | 607FACF31AFB9204008FA782 /* Debug */ = {
553 | isa = XCBuildConfiguration;
554 | baseConfigurationReference = 679B60D44901B6977ECC9A0A /* Pods-TKRubberPageControl_Tests.debug.xcconfig */;
555 | buildSettings = {
556 | FRAMEWORK_SEARCH_PATHS = (
557 | "$(SDKROOT)/Developer/Library/Frameworks",
558 | "$(inherited)",
559 | );
560 | GCC_PREPROCESSOR_DEFINITIONS = (
561 | "DEBUG=1",
562 | "$(inherited)",
563 | );
564 | INFOPLIST_FILE = Tests/Info.plist;
565 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
566 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
567 | PRODUCT_NAME = "$(TARGET_NAME)";
568 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
569 | SWIFT_VERSION = 4.0;
570 | };
571 | name = Debug;
572 | };
573 | 607FACF41AFB9204008FA782 /* Release */ = {
574 | isa = XCBuildConfiguration;
575 | baseConfigurationReference = 6D0744C7302CE673A89B17F6 /* Pods-TKRubberPageControl_Tests.release.xcconfig */;
576 | buildSettings = {
577 | FRAMEWORK_SEARCH_PATHS = (
578 | "$(SDKROOT)/Developer/Library/Frameworks",
579 | "$(inherited)",
580 | );
581 | INFOPLIST_FILE = Tests/Info.plist;
582 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
583 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
584 | PRODUCT_NAME = "$(TARGET_NAME)";
585 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
586 | SWIFT_VERSION = 4.0;
587 | };
588 | name = Release;
589 | };
590 | /* End XCBuildConfiguration section */
591 |
592 | /* Begin XCConfigurationList section */
593 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "TKRubberPageControl" */ = {
594 | isa = XCConfigurationList;
595 | buildConfigurations = (
596 | 607FACED1AFB9204008FA782 /* Debug */,
597 | 607FACEE1AFB9204008FA782 /* Release */,
598 | );
599 | defaultConfigurationIsVisible = 0;
600 | defaultConfigurationName = Release;
601 | };
602 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TKRubberPageControl_Example" */ = {
603 | isa = XCConfigurationList;
604 | buildConfigurations = (
605 | 607FACF01AFB9204008FA782 /* Debug */,
606 | 607FACF11AFB9204008FA782 /* Release */,
607 | );
608 | defaultConfigurationIsVisible = 0;
609 | defaultConfigurationName = Release;
610 | };
611 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TKRubberPageControl_Tests" */ = {
612 | isa = XCConfigurationList;
613 | buildConfigurations = (
614 | 607FACF31AFB9204008FA782 /* Debug */,
615 | 607FACF41AFB9204008FA782 /* Release */,
616 | );
617 | defaultConfigurationIsVisible = 0;
618 | defaultConfigurationName = Release;
619 | };
620 | /* End XCConfigurationList section */
621 | };
622 | rootObject = 607FACC81AFB9204008FA782 /* Project object */;
623 | }
624 |
--------------------------------------------------------------------------------
/Example/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 316DC2388111E0553C07C3240796A32F /* Pods-TKRubberPageControl_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F709D4A461004E663586E9AB488BC4AE /* Pods-TKRubberPageControl_Example-dummy.m */; };
11 | 3CADB6238BE2435E48CEF4AAA5225778 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; };
12 | 6A3863BBAEBECD0AD062CDCE06A4DC3F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; };
13 | 798B7F613B31236DE17B669430536EE4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; };
14 | 884690443BB0741C22979292AA999631 /* Pods-TKRubberPageControl_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 829FCA4467F2D027EC1EFD18EEBC73E1 /* Pods-TKRubberPageControl_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
15 | 9729E013DF42BE4750E85789A2936045 /* TKRubberPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6022509DB9C0B7308ED857A798D8B686 /* TKRubberPageControl.swift */; };
16 | A99A5573A1028CDB36A7921C4AEA3FAB /* TKRubberPageControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EA1DB1F18683865F4B9EEE3689E0F02B /* TKRubberPageControl-dummy.m */; };
17 | B92174D31F75A730305BFE56BB90D457 /* Pods-TKRubberPageControl_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 656A913477D733339C0AA0C526D73A9D /* Pods-TKRubberPageControl_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
18 | D1D60CFED480CEB5D411B66D98D78A66 /* TKRubberPageControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D0C1BEFDA78EF79002F5641668BF5F6 /* TKRubberPageControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
19 | D1FA1D9F835FD4A4D8095B7CBFE804F1 /* Pods-TKRubberPageControl_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 155B67E380D6346909B4B55FEC59C326 /* Pods-TKRubberPageControl_Tests-dummy.m */; };
20 | /* End PBXBuildFile section */
21 |
22 | /* Begin PBXContainerItemProxy section */
23 | C0509D636C7A359803504263CFB80DCC /* PBXContainerItemProxy */ = {
24 | isa = PBXContainerItemProxy;
25 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
26 | proxyType = 1;
27 | remoteGlobalIDString = A3ACDD2C414E4942B07D2A8EAEC6A0CB;
28 | remoteInfo = TKRubberPageControl;
29 | };
30 | /* End PBXContainerItemProxy section */
31 |
32 | /* Begin PBXFileReference section */
33 | 10861BA3303CFEA5F5010F219B781F81 /* Pods-TKRubberPageControl_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TKRubberPageControl_Example-frameworks.sh"; sourceTree = ""; };
34 | 10BB5CC3341368DCDE11E5C76C7E548B /* TKRubberPageControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = TKRubberPageControl.modulemap; sourceTree = ""; };
35 | 155B67E380D6346909B4B55FEC59C326 /* Pods-TKRubberPageControl_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TKRubberPageControl_Tests-dummy.m"; sourceTree = ""; };
36 | 179BAAE87BA28AB4D39CA4549FEC5C92 /* Pods-TKRubberPageControl_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TKRubberPageControl_Example-resources.sh"; sourceTree = ""; };
37 | 1C92B989F78BC806768D42BEBFE66F1F /* Pods-TKRubberPageControl_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TKRubberPageControl_Tests-acknowledgements.markdown"; sourceTree = ""; };
38 | 1CF49A99AA6B1B6A4A32800CC1CF6847 /* Pods-TKRubberPageControl_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TKRubberPageControl_Example-acknowledgements.plist"; sourceTree = ""; };
39 | 27B75E545A7416C81643DCECC80D8CB0 /* TKRubberPageControl.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; path = TKRubberPageControl.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
40 | 579083BE394FE07392B53F5655B022CC /* Pods-TKRubberPageControl_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-TKRubberPageControl_Tests.modulemap"; sourceTree = ""; };
41 | 5A5BC0D7265D27A2EE1A12145E2B33F2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
42 | 6022509DB9C0B7308ED857A798D8B686 /* TKRubberPageControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TKRubberPageControl.swift; path = TKRubberPageControl/Classes/TKRubberPageControl.swift; sourceTree = ""; };
43 | 656A913477D733339C0AA0C526D73A9D /* Pods-TKRubberPageControl_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-TKRubberPageControl_Tests-umbrella.h"; sourceTree = ""; };
44 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
45 | 67DB9F310691F0620860CBEF3A968A14 /* Pods-TKRubberPageControl_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TKRubberPageControl_Example.release.xcconfig"; sourceTree = ""; };
46 | 73490947DB2853B0160419DA602C721F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
47 | 829FCA4467F2D027EC1EFD18EEBC73E1 /* Pods-TKRubberPageControl_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-TKRubberPageControl_Example-umbrella.h"; sourceTree = ""; };
48 | 863B5AD0BBED7D024F170316BF73FD7C /* Pods-TKRubberPageControl_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TKRubberPageControl_Tests.release.xcconfig"; sourceTree = ""; };
49 | 8D0C1BEFDA78EF79002F5641668BF5F6 /* TKRubberPageControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TKRubberPageControl-umbrella.h"; sourceTree = ""; };
50 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
51 | 9562D1F93854AF58932E76AA96A3F769 /* Pods-TKRubberPageControl_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TKRubberPageControl_Tests-resources.sh"; sourceTree = ""; };
52 | 9B258679D5C7B94D3BAFB00DECCF9A54 /* TKRubberPageControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TKRubberPageControl.framework; path = TKRubberPageControl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
53 | A58E9CB0E02D53B91E47F2E726ACC456 /* Pods-TKRubberPageControl_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-TKRubberPageControl_Example.modulemap"; sourceTree = ""; };
54 | B2892B940FA0E2EE126DC270B5393D38 /* Pods_TKRubberPageControl_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_TKRubberPageControl_Example.framework; path = "Pods-TKRubberPageControl_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
55 | C2F2B09D00F0AC3A84440A467F732913 /* Pods-TKRubberPageControl_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TKRubberPageControl_Example-acknowledgements.markdown"; sourceTree = ""; };
56 | C58A785FC931D93C7984812CC8BD8438 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
57 | CF2D15532531097D526523423308BC1B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
58 | D27FAE2C260A2B0504466845EB786672 /* Pods-TKRubberPageControl_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TKRubberPageControl_Tests.debug.xcconfig"; sourceTree = ""; };
59 | D3A80660714734D673BB5B214C7A1EE3 /* Pods_TKRubberPageControl_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_TKRubberPageControl_Tests.framework; path = "Pods-TKRubberPageControl_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
60 | DC748FC583B7FD15E75ACB4B67C7904C /* Pods-TKRubberPageControl_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TKRubberPageControl_Tests-frameworks.sh"; sourceTree = ""; };
61 | E3FBE41B874DD3C77D775CCBD8DAF07A /* TKRubberPageControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TKRubberPageControl-prefix.pch"; sourceTree = ""; };
62 | EA1DB1F18683865F4B9EEE3689E0F02B /* TKRubberPageControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TKRubberPageControl-dummy.m"; sourceTree = ""; };
63 | F0C35F0AD990BECA1B17DB1E6ADE77FC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
64 | F317EF9C83B9510165F9C4F715016BFB /* Pods-TKRubberPageControl_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TKRubberPageControl_Tests-acknowledgements.plist"; sourceTree = ""; };
65 | F5ADC8FC66BFA4EA84A5A5684120A6DE /* TKRubberPageControl.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TKRubberPageControl.xcconfig; sourceTree = ""; };
66 | F5F31FB3F78B320C1295F34B9178058F /* Pods-TKRubberPageControl_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TKRubberPageControl_Example.debug.xcconfig"; sourceTree = ""; };
67 | F709D4A461004E663586E9AB488BC4AE /* Pods-TKRubberPageControl_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TKRubberPageControl_Example-dummy.m"; sourceTree = ""; };
68 | /* End PBXFileReference section */
69 |
70 | /* Begin PBXFrameworksBuildPhase section */
71 | 7A349D909AE9BEB9BE3D3DD65C9982A7 /* Frameworks */ = {
72 | isa = PBXFrameworksBuildPhase;
73 | buildActionMask = 2147483647;
74 | files = (
75 | 798B7F613B31236DE17B669430536EE4 /* Foundation.framework in Frameworks */,
76 | );
77 | runOnlyForDeploymentPostprocessing = 0;
78 | };
79 | E4CC3FE28B56A76C5E67D3064A4563B7 /* Frameworks */ = {
80 | isa = PBXFrameworksBuildPhase;
81 | buildActionMask = 2147483647;
82 | files = (
83 | 6A3863BBAEBECD0AD062CDCE06A4DC3F /* Foundation.framework in Frameworks */,
84 | );
85 | runOnlyForDeploymentPostprocessing = 0;
86 | };
87 | E617387DE0DD9FF64D8F1BB5759E1736 /* Frameworks */ = {
88 | isa = PBXFrameworksBuildPhase;
89 | buildActionMask = 2147483647;
90 | files = (
91 | 3CADB6238BE2435E48CEF4AAA5225778 /* Foundation.framework in Frameworks */,
92 | );
93 | runOnlyForDeploymentPostprocessing = 0;
94 | };
95 | /* End PBXFrameworksBuildPhase section */
96 |
97 | /* Begin PBXGroup section */
98 | 52F472231F5B577CB788F016B33EC8C4 /* TKRubberPageControl */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 6022509DB9C0B7308ED857A798D8B686 /* TKRubberPageControl.swift */,
102 | C656DF1B64CA66924F3FA1737CDCD565 /* Pod */,
103 | 6CA0C076BED6496708878CB54722BB4D /* Support Files */,
104 | );
105 | name = TKRubberPageControl;
106 | path = ../..;
107 | sourceTree = "";
108 | };
109 | 672BDBE47B728424FFF0AA32F69AA5AA /* Targets Support Files */ = {
110 | isa = PBXGroup;
111 | children = (
112 | B75B791D75D352822B1C720D0265716E /* Pods-TKRubberPageControl_Example */,
113 | 82FB0760B3958F653E2A01EBF7C32F0A /* Pods-TKRubberPageControl_Tests */,
114 | );
115 | name = "Targets Support Files";
116 | sourceTree = "";
117 | };
118 | 6CA0C076BED6496708878CB54722BB4D /* Support Files */ = {
119 | isa = PBXGroup;
120 | children = (
121 | CF2D15532531097D526523423308BC1B /* Info.plist */,
122 | 10BB5CC3341368DCDE11E5C76C7E548B /* TKRubberPageControl.modulemap */,
123 | F5ADC8FC66BFA4EA84A5A5684120A6DE /* TKRubberPageControl.xcconfig */,
124 | EA1DB1F18683865F4B9EEE3689E0F02B /* TKRubberPageControl-dummy.m */,
125 | E3FBE41B874DD3C77D775CCBD8DAF07A /* TKRubberPageControl-prefix.pch */,
126 | 8D0C1BEFDA78EF79002F5641668BF5F6 /* TKRubberPageControl-umbrella.h */,
127 | );
128 | name = "Support Files";
129 | path = "Example/Pods/Target Support Files/TKRubberPageControl";
130 | sourceTree = "";
131 | };
132 | 7DB346D0F39D3F0E887471402A8071AB = {
133 | isa = PBXGroup;
134 | children = (
135 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */,
136 | DF62F8337E6FCFE50B34FF97A5C7A793 /* Development Pods */,
137 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */,
138 | 9CE3CEDFF3382689429111D2A5BFA251 /* Products */,
139 | 672BDBE47B728424FFF0AA32F69AA5AA /* Targets Support Files */,
140 | );
141 | sourceTree = "";
142 | };
143 | 82FB0760B3958F653E2A01EBF7C32F0A /* Pods-TKRubberPageControl_Tests */ = {
144 | isa = PBXGroup;
145 | children = (
146 | 5A5BC0D7265D27A2EE1A12145E2B33F2 /* Info.plist */,
147 | 579083BE394FE07392B53F5655B022CC /* Pods-TKRubberPageControl_Tests.modulemap */,
148 | 1C92B989F78BC806768D42BEBFE66F1F /* Pods-TKRubberPageControl_Tests-acknowledgements.markdown */,
149 | F317EF9C83B9510165F9C4F715016BFB /* Pods-TKRubberPageControl_Tests-acknowledgements.plist */,
150 | 155B67E380D6346909B4B55FEC59C326 /* Pods-TKRubberPageControl_Tests-dummy.m */,
151 | DC748FC583B7FD15E75ACB4B67C7904C /* Pods-TKRubberPageControl_Tests-frameworks.sh */,
152 | 9562D1F93854AF58932E76AA96A3F769 /* Pods-TKRubberPageControl_Tests-resources.sh */,
153 | 656A913477D733339C0AA0C526D73A9D /* Pods-TKRubberPageControl_Tests-umbrella.h */,
154 | D27FAE2C260A2B0504466845EB786672 /* Pods-TKRubberPageControl_Tests.debug.xcconfig */,
155 | 863B5AD0BBED7D024F170316BF73FD7C /* Pods-TKRubberPageControl_Tests.release.xcconfig */,
156 | );
157 | name = "Pods-TKRubberPageControl_Tests";
158 | path = "Target Support Files/Pods-TKRubberPageControl_Tests";
159 | sourceTree = "";
160 | };
161 | 9CE3CEDFF3382689429111D2A5BFA251 /* Products */ = {
162 | isa = PBXGroup;
163 | children = (
164 | B2892B940FA0E2EE126DC270B5393D38 /* Pods_TKRubberPageControl_Example.framework */,
165 | D3A80660714734D673BB5B214C7A1EE3 /* Pods_TKRubberPageControl_Tests.framework */,
166 | 9B258679D5C7B94D3BAFB00DECCF9A54 /* TKRubberPageControl.framework */,
167 | );
168 | name = Products;
169 | sourceTree = "";
170 | };
171 | B75B791D75D352822B1C720D0265716E /* Pods-TKRubberPageControl_Example */ = {
172 | isa = PBXGroup;
173 | children = (
174 | F0C35F0AD990BECA1B17DB1E6ADE77FC /* Info.plist */,
175 | A58E9CB0E02D53B91E47F2E726ACC456 /* Pods-TKRubberPageControl_Example.modulemap */,
176 | C2F2B09D00F0AC3A84440A467F732913 /* Pods-TKRubberPageControl_Example-acknowledgements.markdown */,
177 | 1CF49A99AA6B1B6A4A32800CC1CF6847 /* Pods-TKRubberPageControl_Example-acknowledgements.plist */,
178 | F709D4A461004E663586E9AB488BC4AE /* Pods-TKRubberPageControl_Example-dummy.m */,
179 | 10861BA3303CFEA5F5010F219B781F81 /* Pods-TKRubberPageControl_Example-frameworks.sh */,
180 | 179BAAE87BA28AB4D39CA4549FEC5C92 /* Pods-TKRubberPageControl_Example-resources.sh */,
181 | 829FCA4467F2D027EC1EFD18EEBC73E1 /* Pods-TKRubberPageControl_Example-umbrella.h */,
182 | F5F31FB3F78B320C1295F34B9178058F /* Pods-TKRubberPageControl_Example.debug.xcconfig */,
183 | 67DB9F310691F0620860CBEF3A968A14 /* Pods-TKRubberPageControl_Example.release.xcconfig */,
184 | );
185 | name = "Pods-TKRubberPageControl_Example";
186 | path = "Target Support Files/Pods-TKRubberPageControl_Example";
187 | sourceTree = "";
188 | };
189 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = {
190 | isa = PBXGroup;
191 | children = (
192 | D35AF013A5F0BAD4F32504907A52519E /* iOS */,
193 | );
194 | name = Frameworks;
195 | sourceTree = "";
196 | };
197 | C656DF1B64CA66924F3FA1737CDCD565 /* Pod */ = {
198 | isa = PBXGroup;
199 | children = (
200 | 73490947DB2853B0160419DA602C721F /* LICENSE */,
201 | C58A785FC931D93C7984812CC8BD8438 /* README.md */,
202 | 27B75E545A7416C81643DCECC80D8CB0 /* TKRubberPageControl.podspec */,
203 | );
204 | name = Pod;
205 | sourceTree = "";
206 | };
207 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = {
208 | isa = PBXGroup;
209 | children = (
210 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */,
211 | );
212 | name = iOS;
213 | sourceTree = "";
214 | };
215 | DF62F8337E6FCFE50B34FF97A5C7A793 /* Development Pods */ = {
216 | isa = PBXGroup;
217 | children = (
218 | 52F472231F5B577CB788F016B33EC8C4 /* TKRubberPageControl */,
219 | );
220 | name = "Development Pods";
221 | sourceTree = "";
222 | };
223 | /* End PBXGroup section */
224 |
225 | /* Begin PBXHeadersBuildPhase section */
226 | 6B86D633EDBD69D53F2F70D5C8A4BFDA /* Headers */ = {
227 | isa = PBXHeadersBuildPhase;
228 | buildActionMask = 2147483647;
229 | files = (
230 | D1D60CFED480CEB5D411B66D98D78A66 /* TKRubberPageControl-umbrella.h in Headers */,
231 | );
232 | runOnlyForDeploymentPostprocessing = 0;
233 | };
234 | 7FEBBDF2EC6DA2522FBCCA51BDAD9210 /* Headers */ = {
235 | isa = PBXHeadersBuildPhase;
236 | buildActionMask = 2147483647;
237 | files = (
238 | B92174D31F75A730305BFE56BB90D457 /* Pods-TKRubberPageControl_Tests-umbrella.h in Headers */,
239 | );
240 | runOnlyForDeploymentPostprocessing = 0;
241 | };
242 | 824F0B4BC32CB8A780AB139E8956A804 /* Headers */ = {
243 | isa = PBXHeadersBuildPhase;
244 | buildActionMask = 2147483647;
245 | files = (
246 | 884690443BB0741C22979292AA999631 /* Pods-TKRubberPageControl_Example-umbrella.h in Headers */,
247 | );
248 | runOnlyForDeploymentPostprocessing = 0;
249 | };
250 | /* End PBXHeadersBuildPhase section */
251 |
252 | /* Begin PBXNativeTarget section */
253 | 09D3E1BA352D9B6BC823CF7303B95D8E /* Pods-TKRubberPageControl_Example */ = {
254 | isa = PBXNativeTarget;
255 | buildConfigurationList = 788B31ED3DEE5DA3534BD8D234F8F50C /* Build configuration list for PBXNativeTarget "Pods-TKRubberPageControl_Example" */;
256 | buildPhases = (
257 | 85A8B1D58531A670240AA8092B8B8C48 /* Sources */,
258 | 7A349D909AE9BEB9BE3D3DD65C9982A7 /* Frameworks */,
259 | 824F0B4BC32CB8A780AB139E8956A804 /* Headers */,
260 | );
261 | buildRules = (
262 | );
263 | dependencies = (
264 | B4BF8705E7B995989258B7B67BBB456D /* PBXTargetDependency */,
265 | );
266 | name = "Pods-TKRubberPageControl_Example";
267 | productName = "Pods-TKRubberPageControl_Example";
268 | productReference = B2892B940FA0E2EE126DC270B5393D38 /* Pods_TKRubberPageControl_Example.framework */;
269 | productType = "com.apple.product-type.framework";
270 | };
271 | A3ACDD2C414E4942B07D2A8EAEC6A0CB /* TKRubberPageControl */ = {
272 | isa = PBXNativeTarget;
273 | buildConfigurationList = 1ACA13C9D2FAE03AE7CCCB6441D174BA /* Build configuration list for PBXNativeTarget "TKRubberPageControl" */;
274 | buildPhases = (
275 | C2D81DF20FD6F740EF20E14A4A8800AD /* Sources */,
276 | E4CC3FE28B56A76C5E67D3064A4563B7 /* Frameworks */,
277 | 6B86D633EDBD69D53F2F70D5C8A4BFDA /* Headers */,
278 | );
279 | buildRules = (
280 | );
281 | dependencies = (
282 | );
283 | name = TKRubberPageControl;
284 | productName = TKRubberPageControl;
285 | productReference = 9B258679D5C7B94D3BAFB00DECCF9A54 /* TKRubberPageControl.framework */;
286 | productType = "com.apple.product-type.framework";
287 | };
288 | EA04387D0E86EED723F8F343EA23F2EB /* Pods-TKRubberPageControl_Tests */ = {
289 | isa = PBXNativeTarget;
290 | buildConfigurationList = 6E2CE3AB882D68231E95FACE8550FFAA /* Build configuration list for PBXNativeTarget "Pods-TKRubberPageControl_Tests" */;
291 | buildPhases = (
292 | DB2F82C086BD07854FEB73FAD834BAB9 /* Sources */,
293 | E617387DE0DD9FF64D8F1BB5759E1736 /* Frameworks */,
294 | 7FEBBDF2EC6DA2522FBCCA51BDAD9210 /* Headers */,
295 | );
296 | buildRules = (
297 | );
298 | dependencies = (
299 | );
300 | name = "Pods-TKRubberPageControl_Tests";
301 | productName = "Pods-TKRubberPageControl_Tests";
302 | productReference = D3A80660714734D673BB5B214C7A1EE3 /* Pods_TKRubberPageControl_Tests.framework */;
303 | productType = "com.apple.product-type.framework";
304 | };
305 | /* End PBXNativeTarget section */
306 |
307 | /* Begin PBXProject section */
308 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = {
309 | isa = PBXProject;
310 | attributes = {
311 | LastSwiftUpdateCheck = 0830;
312 | LastUpgradeCheck = 0700;
313 | };
314 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */;
315 | compatibilityVersion = "Xcode 3.2";
316 | developmentRegion = English;
317 | hasScannedForEncodings = 0;
318 | knownRegions = (
319 | en,
320 | );
321 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB;
322 | productRefGroup = 9CE3CEDFF3382689429111D2A5BFA251 /* Products */;
323 | projectDirPath = "";
324 | projectRoot = "";
325 | targets = (
326 | 09D3E1BA352D9B6BC823CF7303B95D8E /* Pods-TKRubberPageControl_Example */,
327 | EA04387D0E86EED723F8F343EA23F2EB /* Pods-TKRubberPageControl_Tests */,
328 | A3ACDD2C414E4942B07D2A8EAEC6A0CB /* TKRubberPageControl */,
329 | );
330 | };
331 | /* End PBXProject section */
332 |
333 | /* Begin PBXSourcesBuildPhase section */
334 | 85A8B1D58531A670240AA8092B8B8C48 /* Sources */ = {
335 | isa = PBXSourcesBuildPhase;
336 | buildActionMask = 2147483647;
337 | files = (
338 | 316DC2388111E0553C07C3240796A32F /* Pods-TKRubberPageControl_Example-dummy.m in Sources */,
339 | );
340 | runOnlyForDeploymentPostprocessing = 0;
341 | };
342 | C2D81DF20FD6F740EF20E14A4A8800AD /* Sources */ = {
343 | isa = PBXSourcesBuildPhase;
344 | buildActionMask = 2147483647;
345 | files = (
346 | A99A5573A1028CDB36A7921C4AEA3FAB /* TKRubberPageControl-dummy.m in Sources */,
347 | 9729E013DF42BE4750E85789A2936045 /* TKRubberPageControl.swift in Sources */,
348 | );
349 | runOnlyForDeploymentPostprocessing = 0;
350 | };
351 | DB2F82C086BD07854FEB73FAD834BAB9 /* Sources */ = {
352 | isa = PBXSourcesBuildPhase;
353 | buildActionMask = 2147483647;
354 | files = (
355 | D1FA1D9F835FD4A4D8095B7CBFE804F1 /* Pods-TKRubberPageControl_Tests-dummy.m in Sources */,
356 | );
357 | runOnlyForDeploymentPostprocessing = 0;
358 | };
359 | /* End PBXSourcesBuildPhase section */
360 |
361 | /* Begin PBXTargetDependency section */
362 | B4BF8705E7B995989258B7B67BBB456D /* PBXTargetDependency */ = {
363 | isa = PBXTargetDependency;
364 | name = TKRubberPageControl;
365 | target = A3ACDD2C414E4942B07D2A8EAEC6A0CB /* TKRubberPageControl */;
366 | targetProxy = C0509D636C7A359803504263CFB80DCC /* PBXContainerItemProxy */;
367 | };
368 | /* End PBXTargetDependency section */
369 |
370 | /* Begin XCBuildConfiguration section */
371 | 33DA7F43A1D2FA3C74A8C8FC246E1FA6 /* Debug */ = {
372 | isa = XCBuildConfiguration;
373 | buildSettings = {
374 | ALWAYS_SEARCH_USER_PATHS = NO;
375 | CLANG_ANALYZER_NONNULL = YES;
376 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
377 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
378 | CLANG_CXX_LIBRARY = "libc++";
379 | CLANG_ENABLE_MODULES = YES;
380 | CLANG_ENABLE_OBJC_ARC = YES;
381 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
382 | CLANG_WARN_BOOL_CONVERSION = YES;
383 | CLANG_WARN_COMMA = YES;
384 | CLANG_WARN_CONSTANT_CONVERSION = YES;
385 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
386 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
387 | CLANG_WARN_EMPTY_BODY = YES;
388 | CLANG_WARN_ENUM_CONVERSION = YES;
389 | CLANG_WARN_INFINITE_RECURSION = YES;
390 | CLANG_WARN_INT_CONVERSION = YES;
391 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
392 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
393 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
394 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
395 | CLANG_WARN_STRICT_PROTOTYPES = YES;
396 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
397 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
398 | CLANG_WARN_UNREACHABLE_CODE = YES;
399 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
400 | CODE_SIGNING_REQUIRED = NO;
401 | COPY_PHASE_STRIP = NO;
402 | DEBUG_INFORMATION_FORMAT = dwarf;
403 | ENABLE_STRICT_OBJC_MSGSEND = YES;
404 | ENABLE_TESTABILITY = YES;
405 | GCC_C_LANGUAGE_STANDARD = gnu11;
406 | GCC_DYNAMIC_NO_PIC = NO;
407 | GCC_NO_COMMON_BLOCKS = YES;
408 | GCC_OPTIMIZATION_LEVEL = 0;
409 | GCC_PREPROCESSOR_DEFINITIONS = (
410 | "POD_CONFIGURATION_DEBUG=1",
411 | "DEBUG=1",
412 | "$(inherited)",
413 | );
414 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
415 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
416 | GCC_WARN_UNDECLARED_SELECTOR = YES;
417 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
418 | GCC_WARN_UNUSED_FUNCTION = YES;
419 | GCC_WARN_UNUSED_VARIABLE = YES;
420 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
421 | MTL_ENABLE_DEBUG_INFO = YES;
422 | ONLY_ACTIVE_ARCH = YES;
423 | PRODUCT_NAME = "$(TARGET_NAME)";
424 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;
425 | STRIP_INSTALLED_PRODUCT = NO;
426 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
427 | SYMROOT = "${SRCROOT}/../build";
428 | };
429 | name = Debug;
430 | };
431 | 44B988EA5C4BA705C8F3AECD236AE944 /* Release */ = {
432 | isa = XCBuildConfiguration;
433 | baseConfigurationReference = 67DB9F310691F0620860CBEF3A968A14 /* Pods-TKRubberPageControl_Example.release.xcconfig */;
434 | buildSettings = {
435 | CODE_SIGN_IDENTITY = "";
436 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
437 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
438 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
439 | CURRENT_PROJECT_VERSION = 1;
440 | DEFINES_MODULE = YES;
441 | DYLIB_COMPATIBILITY_VERSION = 1;
442 | DYLIB_CURRENT_VERSION = 1;
443 | DYLIB_INSTALL_NAME_BASE = "@rpath";
444 | INFOPLIST_FILE = "Target Support Files/Pods-TKRubberPageControl_Example/Info.plist";
445 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
446 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
447 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
448 | MACH_O_TYPE = staticlib;
449 | MODULEMAP_FILE = "Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.modulemap";
450 | OTHER_LDFLAGS = "";
451 | OTHER_LIBTOOLFLAGS = "";
452 | PODS_ROOT = "$(SRCROOT)";
453 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
454 | PRODUCT_NAME = Pods_TKRubberPageControl_Example;
455 | SDKROOT = iphoneos;
456 | SKIP_INSTALL = YES;
457 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
458 | TARGETED_DEVICE_FAMILY = "1,2";
459 | VALIDATE_PRODUCT = YES;
460 | VERSIONING_SYSTEM = "apple-generic";
461 | VERSION_INFO_PREFIX = "";
462 | };
463 | name = Release;
464 | };
465 | 6113B6940A3AD3ACD7B6B827B26DF6AE /* Debug */ = {
466 | isa = XCBuildConfiguration;
467 | baseConfigurationReference = F5F31FB3F78B320C1295F34B9178058F /* Pods-TKRubberPageControl_Example.debug.xcconfig */;
468 | buildSettings = {
469 | CODE_SIGN_IDENTITY = "";
470 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
471 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
472 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
473 | CURRENT_PROJECT_VERSION = 1;
474 | DEFINES_MODULE = YES;
475 | DYLIB_COMPATIBILITY_VERSION = 1;
476 | DYLIB_CURRENT_VERSION = 1;
477 | DYLIB_INSTALL_NAME_BASE = "@rpath";
478 | INFOPLIST_FILE = "Target Support Files/Pods-TKRubberPageControl_Example/Info.plist";
479 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
480 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
481 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
482 | MACH_O_TYPE = staticlib;
483 | MODULEMAP_FILE = "Target Support Files/Pods-TKRubberPageControl_Example/Pods-TKRubberPageControl_Example.modulemap";
484 | OTHER_LDFLAGS = "";
485 | OTHER_LIBTOOLFLAGS = "";
486 | PODS_ROOT = "$(SRCROOT)";
487 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
488 | PRODUCT_NAME = Pods_TKRubberPageControl_Example;
489 | SDKROOT = iphoneos;
490 | SKIP_INSTALL = YES;
491 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
492 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
493 | TARGETED_DEVICE_FAMILY = "1,2";
494 | VERSIONING_SYSTEM = "apple-generic";
495 | VERSION_INFO_PREFIX = "";
496 | };
497 | name = Debug;
498 | };
499 | 731DC216E1A58545B559F6E0A2418060 /* Release */ = {
500 | isa = XCBuildConfiguration;
501 | buildSettings = {
502 | ALWAYS_SEARCH_USER_PATHS = NO;
503 | CLANG_ANALYZER_NONNULL = YES;
504 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
505 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
506 | CLANG_CXX_LIBRARY = "libc++";
507 | CLANG_ENABLE_MODULES = YES;
508 | CLANG_ENABLE_OBJC_ARC = YES;
509 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
510 | CLANG_WARN_BOOL_CONVERSION = YES;
511 | CLANG_WARN_COMMA = YES;
512 | CLANG_WARN_CONSTANT_CONVERSION = YES;
513 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
514 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
515 | CLANG_WARN_EMPTY_BODY = YES;
516 | CLANG_WARN_ENUM_CONVERSION = YES;
517 | CLANG_WARN_INFINITE_RECURSION = YES;
518 | CLANG_WARN_INT_CONVERSION = YES;
519 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
520 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
521 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
522 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
523 | CLANG_WARN_STRICT_PROTOTYPES = YES;
524 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
525 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
526 | CLANG_WARN_UNREACHABLE_CODE = YES;
527 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
528 | CODE_SIGNING_REQUIRED = NO;
529 | COPY_PHASE_STRIP = NO;
530 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
531 | ENABLE_NS_ASSERTIONS = NO;
532 | ENABLE_STRICT_OBJC_MSGSEND = YES;
533 | GCC_C_LANGUAGE_STANDARD = gnu11;
534 | GCC_NO_COMMON_BLOCKS = YES;
535 | GCC_PREPROCESSOR_DEFINITIONS = (
536 | "POD_CONFIGURATION_RELEASE=1",
537 | "$(inherited)",
538 | );
539 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
540 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
541 | GCC_WARN_UNDECLARED_SELECTOR = YES;
542 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
543 | GCC_WARN_UNUSED_FUNCTION = YES;
544 | GCC_WARN_UNUSED_VARIABLE = YES;
545 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
546 | MTL_ENABLE_DEBUG_INFO = NO;
547 | PRODUCT_NAME = "$(TARGET_NAME)";
548 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/;
549 | STRIP_INSTALLED_PRODUCT = NO;
550 | SYMROOT = "${SRCROOT}/../build";
551 | };
552 | name = Release;
553 | };
554 | 9DE8AABFED4BFF987EC475F05F4CCCEA /* Release */ = {
555 | isa = XCBuildConfiguration;
556 | baseConfigurationReference = F5ADC8FC66BFA4EA84A5A5684120A6DE /* TKRubberPageControl.xcconfig */;
557 | buildSettings = {
558 | CODE_SIGN_IDENTITY = "";
559 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
560 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
561 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
562 | CURRENT_PROJECT_VERSION = 1;
563 | DEFINES_MODULE = YES;
564 | DYLIB_COMPATIBILITY_VERSION = 1;
565 | DYLIB_CURRENT_VERSION = 1;
566 | DYLIB_INSTALL_NAME_BASE = "@rpath";
567 | GCC_PREFIX_HEADER = "Target Support Files/TKRubberPageControl/TKRubberPageControl-prefix.pch";
568 | INFOPLIST_FILE = "Target Support Files/TKRubberPageControl/Info.plist";
569 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
570 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
571 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
572 | MODULEMAP_FILE = "Target Support Files/TKRubberPageControl/TKRubberPageControl.modulemap";
573 | PRODUCT_NAME = TKRubberPageControl;
574 | SDKROOT = iphoneos;
575 | SKIP_INSTALL = YES;
576 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
577 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
578 | SWIFT_VERSION = 4.0;
579 | TARGETED_DEVICE_FAMILY = "1,2";
580 | VALIDATE_PRODUCT = YES;
581 | VERSIONING_SYSTEM = "apple-generic";
582 | VERSION_INFO_PREFIX = "";
583 | };
584 | name = Release;
585 | };
586 | A216CD9DF27F753FA2BA4C93E663ECD5 /* Debug */ = {
587 | isa = XCBuildConfiguration;
588 | baseConfigurationReference = F5ADC8FC66BFA4EA84A5A5684120A6DE /* TKRubberPageControl.xcconfig */;
589 | buildSettings = {
590 | CODE_SIGN_IDENTITY = "";
591 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
592 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
593 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
594 | CURRENT_PROJECT_VERSION = 1;
595 | DEFINES_MODULE = YES;
596 | DYLIB_COMPATIBILITY_VERSION = 1;
597 | DYLIB_CURRENT_VERSION = 1;
598 | DYLIB_INSTALL_NAME_BASE = "@rpath";
599 | GCC_PREFIX_HEADER = "Target Support Files/TKRubberPageControl/TKRubberPageControl-prefix.pch";
600 | INFOPLIST_FILE = "Target Support Files/TKRubberPageControl/Info.plist";
601 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
602 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
603 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
604 | MODULEMAP_FILE = "Target Support Files/TKRubberPageControl/TKRubberPageControl.modulemap";
605 | PRODUCT_NAME = TKRubberPageControl;
606 | SDKROOT = iphoneos;
607 | SKIP_INSTALL = YES;
608 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
609 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
610 | SWIFT_VERSION = 4.0;
611 | TARGETED_DEVICE_FAMILY = "1,2";
612 | VERSIONING_SYSTEM = "apple-generic";
613 | VERSION_INFO_PREFIX = "";
614 | };
615 | name = Debug;
616 | };
617 | A287561AD5ACAECB6FCA89449C6B878D /* Release */ = {
618 | isa = XCBuildConfiguration;
619 | baseConfigurationReference = 863B5AD0BBED7D024F170316BF73FD7C /* Pods-TKRubberPageControl_Tests.release.xcconfig */;
620 | buildSettings = {
621 | CODE_SIGN_IDENTITY = "";
622 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
623 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
624 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
625 | CURRENT_PROJECT_VERSION = 1;
626 | DEFINES_MODULE = YES;
627 | DYLIB_COMPATIBILITY_VERSION = 1;
628 | DYLIB_CURRENT_VERSION = 1;
629 | DYLIB_INSTALL_NAME_BASE = "@rpath";
630 | INFOPLIST_FILE = "Target Support Files/Pods-TKRubberPageControl_Tests/Info.plist";
631 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
632 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
633 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
634 | MACH_O_TYPE = staticlib;
635 | MODULEMAP_FILE = "Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.modulemap";
636 | OTHER_LDFLAGS = "";
637 | OTHER_LIBTOOLFLAGS = "";
638 | PODS_ROOT = "$(SRCROOT)";
639 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
640 | PRODUCT_NAME = Pods_TKRubberPageControl_Tests;
641 | SDKROOT = iphoneos;
642 | SKIP_INSTALL = YES;
643 | TARGETED_DEVICE_FAMILY = "1,2";
644 | VALIDATE_PRODUCT = YES;
645 | VERSIONING_SYSTEM = "apple-generic";
646 | VERSION_INFO_PREFIX = "";
647 | };
648 | name = Release;
649 | };
650 | B0100E757D41890395E9136333098B66 /* Debug */ = {
651 | isa = XCBuildConfiguration;
652 | baseConfigurationReference = D27FAE2C260A2B0504466845EB786672 /* Pods-TKRubberPageControl_Tests.debug.xcconfig */;
653 | buildSettings = {
654 | CODE_SIGN_IDENTITY = "";
655 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
656 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
657 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
658 | CURRENT_PROJECT_VERSION = 1;
659 | DEFINES_MODULE = YES;
660 | DYLIB_COMPATIBILITY_VERSION = 1;
661 | DYLIB_CURRENT_VERSION = 1;
662 | DYLIB_INSTALL_NAME_BASE = "@rpath";
663 | INFOPLIST_FILE = "Target Support Files/Pods-TKRubberPageControl_Tests/Info.plist";
664 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
665 | IPHONEOS_DEPLOYMENT_TARGET = 9.3;
666 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
667 | MACH_O_TYPE = staticlib;
668 | MODULEMAP_FILE = "Target Support Files/Pods-TKRubberPageControl_Tests/Pods-TKRubberPageControl_Tests.modulemap";
669 | OTHER_LDFLAGS = "";
670 | OTHER_LIBTOOLFLAGS = "";
671 | PODS_ROOT = "$(SRCROOT)";
672 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
673 | PRODUCT_NAME = Pods_TKRubberPageControl_Tests;
674 | SDKROOT = iphoneos;
675 | SKIP_INSTALL = YES;
676 | TARGETED_DEVICE_FAMILY = "1,2";
677 | VERSIONING_SYSTEM = "apple-generic";
678 | VERSION_INFO_PREFIX = "";
679 | };
680 | name = Debug;
681 | };
682 | /* End XCBuildConfiguration section */
683 |
684 | /* Begin XCConfigurationList section */
685 | 1ACA13C9D2FAE03AE7CCCB6441D174BA /* Build configuration list for PBXNativeTarget "TKRubberPageControl" */ = {
686 | isa = XCConfigurationList;
687 | buildConfigurations = (
688 | A216CD9DF27F753FA2BA4C93E663ECD5 /* Debug */,
689 | 9DE8AABFED4BFF987EC475F05F4CCCEA /* Release */,
690 | );
691 | defaultConfigurationIsVisible = 0;
692 | defaultConfigurationName = Release;
693 | };
694 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = {
695 | isa = XCConfigurationList;
696 | buildConfigurations = (
697 | 33DA7F43A1D2FA3C74A8C8FC246E1FA6 /* Debug */,
698 | 731DC216E1A58545B559F6E0A2418060 /* Release */,
699 | );
700 | defaultConfigurationIsVisible = 0;
701 | defaultConfigurationName = Release;
702 | };
703 | 6E2CE3AB882D68231E95FACE8550FFAA /* Build configuration list for PBXNativeTarget "Pods-TKRubberPageControl_Tests" */ = {
704 | isa = XCConfigurationList;
705 | buildConfigurations = (
706 | B0100E757D41890395E9136333098B66 /* Debug */,
707 | A287561AD5ACAECB6FCA89449C6B878D /* Release */,
708 | );
709 | defaultConfigurationIsVisible = 0;
710 | defaultConfigurationName = Release;
711 | };
712 | 788B31ED3DEE5DA3534BD8D234F8F50C /* Build configuration list for PBXNativeTarget "Pods-TKRubberPageControl_Example" */ = {
713 | isa = XCConfigurationList;
714 | buildConfigurations = (
715 | 6113B6940A3AD3ACD7B6B827B26DF6AE /* Debug */,
716 | 44B988EA5C4BA705C8F3AECD236AE944 /* Release */,
717 | );
718 | defaultConfigurationIsVisible = 0;
719 | defaultConfigurationName = Release;
720 | };
721 | /* End XCConfigurationList section */
722 | };
723 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */;
724 | }
725 |
--------------------------------------------------------------------------------