├── .gitignore ├── .swift-version ├── Example ├── PSPageControl.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── PSPageControl-Example.xcscheme ├── PSPageControl.xcworkspace │ └── contents.xcworkspacedata ├── PSPageControl │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Background.imageset │ │ │ ├── Contents.json │ │ │ └── FWO_2560x1440.jpg │ │ └── Contents.json │ ├── Info.plist │ └── ViewController.swift ├── Podfile ├── Podfile.lock └── Pods │ ├── Local Podspecs │ └── PSPageControl.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── project.pbxproj │ ├── Target Support Files │ ├── PSPageControl │ │ ├── Info.plist │ │ ├── PSPageControl-dummy.m │ │ ├── PSPageControl-prefix.pch │ │ ├── PSPageControl-umbrella.h │ │ ├── PSPageControl.modulemap │ │ └── PSPageControl.xcconfig │ ├── Pods-PSPageControl_Example │ │ ├── Info.plist │ │ ├── Pods-PSPageControl_Example-acknowledgements.markdown │ │ ├── Pods-PSPageControl_Example-acknowledgements.plist │ │ ├── Pods-PSPageControl_Example-dummy.m │ │ ├── Pods-PSPageControl_Example-frameworks.sh │ │ ├── Pods-PSPageControl_Example-resources.sh │ │ ├── Pods-PSPageControl_Example-umbrella.h │ │ ├── Pods-PSPageControl_Example.debug.xcconfig │ │ ├── Pods-PSPageControl_Example.modulemap │ │ └── Pods-PSPageControl_Example.release.xcconfig │ └── UIImageViewAlignedSwift │ │ ├── Info.plist │ │ ├── UIImageViewAlignedSwift-dummy.m │ │ ├── UIImageViewAlignedSwift-prefix.pch │ │ ├── UIImageViewAlignedSwift-umbrella.h │ │ ├── UIImageViewAlignedSwift.modulemap │ │ └── UIImageViewAlignedSwift.xcconfig │ └── UIImageViewAlignedSwift │ ├── LICENSE │ ├── README.md │ └── UIImageViewAligned.swift ├── LICENSE ├── PSPageControl.podspec ├── PSPageControl.swift └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Build generated 2 | build/ 3 | DerivedData/ 4 | 5 | ## Various settings 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | 16 | ## Other 17 | *.moved-aside 18 | *.xcuserstate 19 | 20 | ## Obj-C/Swift specific 21 | *.hmap 22 | *.ipa 23 | *.dSYM.zip 24 | *.dSYM 25 | 26 | ## Playgrounds 27 | timeline.xctimeline 28 | playground.xcworkspace 29 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 4.0 2 | -------------------------------------------------------------------------------- /Example/PSPageControl.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 51ED6CAEFC7D571D2698C45C /* Pods_PSPageControl_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67549D08017D740E3A4C3F15 /* Pods_PSPageControl_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 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 2CDCA3A9919C8053AA087E16 /* PSPageControl.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = PSPageControl.podspec; path = ../PSPageControl.podspec; sourceTree = ""; }; 20 | 607FACD01AFB9204008FA782 /* PSPageControl_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PSPageControl_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 21 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 22 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 23 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 24 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 25 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 26 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 27 | 67549D08017D740E3A4C3F15 /* Pods_PSPageControl_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PSPageControl_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | 901D65CA20D92D41283DAE13 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 29 | AC95DF3B4088B56A1C24D9E3 /* Pods-PSPageControl_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PSPageControl_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.debug.xcconfig"; sourceTree = ""; }; 30 | D0AD2F179BBE9E47EEA19E1B /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 31 | E433378B2DFBF8380522B61B /* Pods-PSPageControl_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PSPageControl_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-PSPageControl_Tests/Pods-PSPageControl_Tests.release.xcconfig"; sourceTree = ""; }; 32 | E600E778E3AF4878DF8FEDF3 /* Pods-PSPageControl_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PSPageControl_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PSPageControl_Tests/Pods-PSPageControl_Tests.debug.xcconfig"; sourceTree = ""; }; 33 | ECFEB702DA20D69CAAF7502F /* Pods-PSPageControl_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PSPageControl_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.release.xcconfig"; sourceTree = ""; }; 34 | EE70419D10BFDD3CA0A2D757 /* Pods_PSPageControl_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PSPageControl_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 51ED6CAEFC7D571D2698C45C /* Pods_PSPageControl_Example.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 07A88D681C119DBC2B68DB83 /* Frameworks */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 67549D08017D740E3A4C3F15 /* Pods_PSPageControl_Example.framework */, 53 | EE70419D10BFDD3CA0A2D757 /* Pods_PSPageControl_Tests.framework */, 54 | ); 55 | name = Frameworks; 56 | sourceTree = ""; 57 | }; 58 | 28E61B1249952DB70E8B35F8 /* Pods */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | AC95DF3B4088B56A1C24D9E3 /* Pods-PSPageControl_Example.debug.xcconfig */, 62 | ECFEB702DA20D69CAAF7502F /* Pods-PSPageControl_Example.release.xcconfig */, 63 | E600E778E3AF4878DF8FEDF3 /* Pods-PSPageControl_Tests.debug.xcconfig */, 64 | E433378B2DFBF8380522B61B /* Pods-PSPageControl_Tests.release.xcconfig */, 65 | ); 66 | name = Pods; 67 | sourceTree = ""; 68 | }; 69 | 607FACC71AFB9204008FA782 = { 70 | isa = PBXGroup; 71 | children = ( 72 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 73 | 607FACD21AFB9204008FA782 /* Example for PSPageControl */, 74 | 607FACD11AFB9204008FA782 /* Products */, 75 | 28E61B1249952DB70E8B35F8 /* Pods */, 76 | 07A88D681C119DBC2B68DB83 /* Frameworks */, 77 | ); 78 | sourceTree = ""; 79 | }; 80 | 607FACD11AFB9204008FA782 /* Products */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | 607FACD01AFB9204008FA782 /* PSPageControl_Example.app */, 84 | ); 85 | name = Products; 86 | sourceTree = ""; 87 | }; 88 | 607FACD21AFB9204008FA782 /* Example for PSPageControl */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 92 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 93 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 94 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 95 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 96 | 607FACD31AFB9204008FA782 /* Supporting Files */, 97 | ); 98 | name = "Example for PSPageControl"; 99 | path = PSPageControl; 100 | sourceTree = ""; 101 | }; 102 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 607FACD41AFB9204008FA782 /* Info.plist */, 106 | ); 107 | name = "Supporting Files"; 108 | sourceTree = ""; 109 | }; 110 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 2CDCA3A9919C8053AA087E16 /* PSPageControl.podspec */, 114 | D0AD2F179BBE9E47EEA19E1B /* README.md */, 115 | 901D65CA20D92D41283DAE13 /* LICENSE */, 116 | ); 117 | name = "Podspec Metadata"; 118 | sourceTree = ""; 119 | }; 120 | /* End PBXGroup section */ 121 | 122 | /* Begin PBXNativeTarget section */ 123 | 607FACCF1AFB9204008FA782 /* PSPageControl_Example */ = { 124 | isa = PBXNativeTarget; 125 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PSPageControl_Example" */; 126 | buildPhases = ( 127 | 9F57BF44ACACA3C02337F757 /* [CP] Check Pods Manifest.lock */, 128 | 607FACCC1AFB9204008FA782 /* Sources */, 129 | 607FACCD1AFB9204008FA782 /* Frameworks */, 130 | 607FACCE1AFB9204008FA782 /* Resources */, 131 | 35A824132814EBC7DA4FEE57 /* [CP] Embed Pods Frameworks */, 132 | EB9EF22D0C80291F2278A6B5 /* [CP] Copy Pods Resources */, 133 | ); 134 | buildRules = ( 135 | ); 136 | dependencies = ( 137 | ); 138 | name = PSPageControl_Example; 139 | productName = PSPageControl; 140 | productReference = 607FACD01AFB9204008FA782 /* PSPageControl_Example.app */; 141 | productType = "com.apple.product-type.application"; 142 | }; 143 | /* End PBXNativeTarget section */ 144 | 145 | /* Begin PBXProject section */ 146 | 607FACC81AFB9204008FA782 /* Project object */ = { 147 | isa = PBXProject; 148 | attributes = { 149 | LastSwiftUpdateCheck = 0720; 150 | LastUpgradeCheck = 0900; 151 | ORGANIZATIONNAME = CocoaPods; 152 | TargetAttributes = { 153 | 607FACCF1AFB9204008FA782 = { 154 | CreatedOnToolsVersion = 6.3.1; 155 | LastSwiftMigration = 0900; 156 | ProvisioningStyle = Manual; 157 | }; 158 | }; 159 | }; 160 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "PSPageControl" */; 161 | compatibilityVersion = "Xcode 3.2"; 162 | developmentRegion = English; 163 | hasScannedForEncodings = 0; 164 | knownRegions = ( 165 | en, 166 | Base, 167 | ); 168 | mainGroup = 607FACC71AFB9204008FA782; 169 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | 607FACCF1AFB9204008FA782 /* PSPageControl_Example */, 174 | ); 175 | }; 176 | /* End PBXProject section */ 177 | 178 | /* Begin PBXResourcesBuildPhase section */ 179 | 607FACCE1AFB9204008FA782 /* Resources */ = { 180 | isa = PBXResourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 184 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 185 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 186 | ); 187 | runOnlyForDeploymentPostprocessing = 0; 188 | }; 189 | /* End PBXResourcesBuildPhase section */ 190 | 191 | /* Begin PBXShellScriptBuildPhase section */ 192 | 35A824132814EBC7DA4FEE57 /* [CP] Embed Pods Frameworks */ = { 193 | isa = PBXShellScriptBuildPhase; 194 | buildActionMask = 2147483647; 195 | files = ( 196 | ); 197 | inputPaths = ( 198 | "${SRCROOT}/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example-frameworks.sh", 199 | "${BUILT_PRODUCTS_DIR}/PSPageControl/PSPageControl.framework", 200 | "${BUILT_PRODUCTS_DIR}/UIImageViewAlignedSwift/UIImageViewAlignedSwift.framework", 201 | ); 202 | name = "[CP] Embed Pods Frameworks"; 203 | outputPaths = ( 204 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PSPageControl.framework", 205 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/UIImageViewAlignedSwift.framework", 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example-frameworks.sh\"\n"; 210 | showEnvVarsInLog = 0; 211 | }; 212 | 9F57BF44ACACA3C02337F757 /* [CP] Check Pods Manifest.lock */ = { 213 | isa = PBXShellScriptBuildPhase; 214 | buildActionMask = 2147483647; 215 | files = ( 216 | ); 217 | inputPaths = ( 218 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 219 | "${PODS_ROOT}/Manifest.lock", 220 | ); 221 | name = "[CP] Check Pods Manifest.lock"; 222 | outputPaths = ( 223 | "$(DERIVED_FILE_DIR)/Pods-PSPageControl_Example-checkManifestLockResult.txt", 224 | ); 225 | runOnlyForDeploymentPostprocessing = 0; 226 | shellPath = /bin/sh; 227 | 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"; 228 | showEnvVarsInLog = 0; 229 | }; 230 | EB9EF22D0C80291F2278A6B5 /* [CP] Copy Pods Resources */ = { 231 | isa = PBXShellScriptBuildPhase; 232 | buildActionMask = 2147483647; 233 | files = ( 234 | ); 235 | inputPaths = ( 236 | ); 237 | name = "[CP] Copy Pods Resources"; 238 | outputPaths = ( 239 | ); 240 | runOnlyForDeploymentPostprocessing = 0; 241 | shellPath = /bin/sh; 242 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example-resources.sh\"\n"; 243 | showEnvVarsInLog = 0; 244 | }; 245 | /* End PBXShellScriptBuildPhase section */ 246 | 247 | /* Begin PBXSourcesBuildPhase section */ 248 | 607FACCC1AFB9204008FA782 /* Sources */ = { 249 | isa = PBXSourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 253 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | /* End PBXSourcesBuildPhase section */ 258 | 259 | /* Begin PBXVariantGroup section */ 260 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 261 | isa = PBXVariantGroup; 262 | children = ( 263 | 607FACDA1AFB9204008FA782 /* Base */, 264 | ); 265 | name = Main.storyboard; 266 | sourceTree = ""; 267 | }; 268 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 269 | isa = PBXVariantGroup; 270 | children = ( 271 | 607FACDF1AFB9204008FA782 /* Base */, 272 | ); 273 | name = LaunchScreen.xib; 274 | sourceTree = ""; 275 | }; 276 | /* End PBXVariantGroup section */ 277 | 278 | /* Begin XCBuildConfiguration section */ 279 | 607FACED1AFB9204008FA782 /* Debug */ = { 280 | isa = XCBuildConfiguration; 281 | buildSettings = { 282 | ALWAYS_SEARCH_USER_PATHS = NO; 283 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 284 | CLANG_CXX_LIBRARY = "libc++"; 285 | CLANG_ENABLE_MODULES = YES; 286 | CLANG_ENABLE_OBJC_ARC = YES; 287 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 288 | CLANG_WARN_BOOL_CONVERSION = YES; 289 | CLANG_WARN_COMMA = YES; 290 | CLANG_WARN_CONSTANT_CONVERSION = YES; 291 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 292 | CLANG_WARN_EMPTY_BODY = YES; 293 | CLANG_WARN_ENUM_CONVERSION = YES; 294 | CLANG_WARN_INFINITE_RECURSION = YES; 295 | CLANG_WARN_INT_CONVERSION = YES; 296 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 297 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 298 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 299 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 300 | CLANG_WARN_STRICT_PROTOTYPES = YES; 301 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 302 | CLANG_WARN_UNREACHABLE_CODE = YES; 303 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 304 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 305 | COPY_PHASE_STRIP = NO; 306 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 307 | ENABLE_STRICT_OBJC_MSGSEND = YES; 308 | ENABLE_TESTABILITY = YES; 309 | GCC_C_LANGUAGE_STANDARD = gnu99; 310 | GCC_DYNAMIC_NO_PIC = NO; 311 | GCC_NO_COMMON_BLOCKS = YES; 312 | GCC_OPTIMIZATION_LEVEL = 0; 313 | GCC_PREPROCESSOR_DEFINITIONS = ( 314 | "DEBUG=1", 315 | "$(inherited)", 316 | ); 317 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 318 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 319 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 320 | GCC_WARN_UNDECLARED_SELECTOR = YES; 321 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 322 | GCC_WARN_UNUSED_FUNCTION = YES; 323 | GCC_WARN_UNUSED_VARIABLE = YES; 324 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 325 | MTL_ENABLE_DEBUG_INFO = YES; 326 | ONLY_ACTIVE_ARCH = YES; 327 | SDKROOT = iphoneos; 328 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 329 | }; 330 | name = Debug; 331 | }; 332 | 607FACEE1AFB9204008FA782 /* Release */ = { 333 | isa = XCBuildConfiguration; 334 | buildSettings = { 335 | ALWAYS_SEARCH_USER_PATHS = NO; 336 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 337 | CLANG_CXX_LIBRARY = "libc++"; 338 | CLANG_ENABLE_MODULES = YES; 339 | CLANG_ENABLE_OBJC_ARC = YES; 340 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 341 | CLANG_WARN_BOOL_CONVERSION = YES; 342 | CLANG_WARN_COMMA = YES; 343 | CLANG_WARN_CONSTANT_CONVERSION = YES; 344 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 345 | CLANG_WARN_EMPTY_BODY = YES; 346 | CLANG_WARN_ENUM_CONVERSION = YES; 347 | CLANG_WARN_INFINITE_RECURSION = YES; 348 | CLANG_WARN_INT_CONVERSION = YES; 349 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 350 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 351 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 352 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 353 | CLANG_WARN_STRICT_PROTOTYPES = YES; 354 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 355 | CLANG_WARN_UNREACHABLE_CODE = YES; 356 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 357 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 358 | COPY_PHASE_STRIP = NO; 359 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 360 | ENABLE_NS_ASSERTIONS = NO; 361 | ENABLE_STRICT_OBJC_MSGSEND = YES; 362 | GCC_C_LANGUAGE_STANDARD = gnu99; 363 | GCC_NO_COMMON_BLOCKS = YES; 364 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 365 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 366 | GCC_WARN_UNDECLARED_SELECTOR = YES; 367 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 368 | GCC_WARN_UNUSED_FUNCTION = YES; 369 | GCC_WARN_UNUSED_VARIABLE = YES; 370 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 371 | MTL_ENABLE_DEBUG_INFO = NO; 372 | SDKROOT = iphoneos; 373 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 374 | VALIDATE_PRODUCT = YES; 375 | }; 376 | name = Release; 377 | }; 378 | 607FACF01AFB9204008FA782 /* Debug */ = { 379 | isa = XCBuildConfiguration; 380 | baseConfigurationReference = AC95DF3B4088B56A1C24D9E3 /* Pods-PSPageControl_Example.debug.xcconfig */; 381 | buildSettings = { 382 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 383 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 384 | INFOPLIST_FILE = PSPageControl/Info.plist; 385 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 386 | MODULE_NAME = ExampleApp; 387 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 388 | PRODUCT_NAME = "$(TARGET_NAME)"; 389 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 390 | SWIFT_VERSION = 4.0; 391 | }; 392 | name = Debug; 393 | }; 394 | 607FACF11AFB9204008FA782 /* Release */ = { 395 | isa = XCBuildConfiguration; 396 | baseConfigurationReference = ECFEB702DA20D69CAAF7502F /* Pods-PSPageControl_Example.release.xcconfig */; 397 | buildSettings = { 398 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 399 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 400 | INFOPLIST_FILE = PSPageControl/Info.plist; 401 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 402 | MODULE_NAME = ExampleApp; 403 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 404 | PRODUCT_NAME = "$(TARGET_NAME)"; 405 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 406 | SWIFT_VERSION = 4.0; 407 | }; 408 | name = Release; 409 | }; 410 | /* End XCBuildConfiguration section */ 411 | 412 | /* Begin XCConfigurationList section */ 413 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "PSPageControl" */ = { 414 | isa = XCConfigurationList; 415 | buildConfigurations = ( 416 | 607FACED1AFB9204008FA782 /* Debug */, 417 | 607FACEE1AFB9204008FA782 /* Release */, 418 | ); 419 | defaultConfigurationIsVisible = 0; 420 | defaultConfigurationName = Release; 421 | }; 422 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "PSPageControl_Example" */ = { 423 | isa = XCConfigurationList; 424 | buildConfigurations = ( 425 | 607FACF01AFB9204008FA782 /* Debug */, 426 | 607FACF11AFB9204008FA782 /* Release */, 427 | ); 428 | defaultConfigurationIsVisible = 0; 429 | defaultConfigurationName = Release; 430 | }; 431 | /* End XCConfigurationList section */ 432 | }; 433 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 434 | } 435 | -------------------------------------------------------------------------------- /Example/PSPageControl.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/PSPageControl.xcodeproj/xcshareddata/xcschemes/PSPageControl-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 45 | 46 | 48 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 80 | 82 | 88 | 89 | 90 | 91 | 92 | 93 | 99 | 101 | 107 | 108 | 109 | 110 | 112 | 113 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /Example/PSPageControl.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/PSPageControl/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PSPageControl 4 | // 5 | // Created by Piotr Sochalewski on 02/08/2016. 6 | // Copyright (c) 2016 Piotr Sochalewski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | final class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { 17 | return true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Example/PSPageControl/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Example/PSPageControl/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 | -------------------------------------------------------------------------------- /Example/PSPageControl/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 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /Example/PSPageControl/Images.xcassets/Background.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "FWO_2560x1440.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/PSPageControl/Images.xcassets/Background.imageset/FWO_2560x1440.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sochalewski/PSPageControl/d32249f33799d7c16847e4704cbb16d0ec4aac39/Example/PSPageControl/Images.xcassets/Background.imageset/FWO_2560x1440.jpg -------------------------------------------------------------------------------- /Example/PSPageControl/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/PSPageControl/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 | UIStatusBarStyle 34 | UIStatusBarStyleDefault 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Example/PSPageControl/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // PSPageControl 4 | // 5 | // Created by Piotr Sochalewski on 02/08/2016. 6 | // Copyright (c) 2016 Piotr Sochalewski. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PSPageControl 11 | 12 | final class ViewController: UIViewController { 13 | 14 | @IBOutlet private weak var pageControl: PSPageControl! 15 | 16 | override var preferredStatusBarStyle: UIStatusBarStyle { 17 | return .lightContent 18 | } 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | 23 | // Delegate PageControl 24 | pageControl.delegate = self 25 | 26 | let loremIpsum = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. Quisque semper justo at risus.", 27 | "Donec venenatis, turpis vel hendrerit interdum, dui ligula ultricies purus, sed posuere libero dui id orci.", 28 | "Nam congue, pede vitae dapibus aliquet, elit magna vulputate arcu, vel tempus metus leo non est. Etiam sit amet lectus quis est congue mollis. Phasellus congue lacus eget neque.", 29 | "Phasellus ornare, ante vitae consectetuer consequat, purus sapien ultricies dolor, et mollis pede metus eget nisi. Praesent sodales velit quis augue.", 30 | "Cras suscipit, urna at aliquam rhoncus, urna quam viverra nisi, in interdum massa nibh nec erat."] 31 | 32 | pageControl.backgroundPicture = UIImage(named: "Background") 33 | pageControl.offsetPerPage = 40 34 | 35 | // Prepare views to add 36 | var views = [UIView]() 37 | 38 | (1...5).forEach { index in 39 | let view = UIView(frame: self.view.frame) 40 | 41 | let label = UILabel(frame: CGRect(x: self.view.frame.width / 2.0 - 60.0, 42 | y: 40.0, 43 | width: 120.0, 44 | height: 30.0)) 45 | label.textColor = .white 46 | label.font = UIFont(name: "HelveticaNeue-Bold", size: 24.0) 47 | label.textAlignment = .center 48 | label.text = "View #\(index)" 49 | 50 | let description = UILabel(frame: CGRect(x: 30.0, 51 | y: 80.0, 52 | width: self.view.frame.width - 60.0, 53 | height: self.view.frame.height - 100.0)) 54 | description.lineBreakMode = .byWordWrapping 55 | description.numberOfLines = 0 56 | description.textColor = .white 57 | description.font = UIFont(name: "HelveticaNeue-Light", size: 20.0) 58 | description.textAlignment = .center 59 | description.text = loremIpsum[index - 1] 60 | 61 | view.addSubview(label) 62 | view.addSubview(description) 63 | 64 | views.append(view) 65 | } 66 | 67 | pageControl.views = views 68 | } 69 | } 70 | 71 | // MARK: Protocol to get PSPageControl current index 72 | extension ViewController: PSPageControlDelegate { 73 | func didChange(index: Int) { 74 | print("PSPageControl - Current Index: \(index)") 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'PSPageControl_Example' do 4 | pod 'PSPageControl', :path => '../' 5 | end 6 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PSPageControl (0.3.2): 3 | - UIImageViewAlignedSwift (~> 0.5.0) 4 | - UIImageViewAlignedSwift (0.5.0) 5 | 6 | DEPENDENCIES: 7 | - PSPageControl (from `../`) 8 | 9 | EXTERNAL SOURCES: 10 | PSPageControl: 11 | :path: ../ 12 | 13 | SPEC CHECKSUMS: 14 | PSPageControl: 94f1ab6027ceb9bb491cfd674443a3c1c10fd5d2 15 | UIImageViewAlignedSwift: 2e09096e6081ad26b848e19b4bc35a7d69165740 16 | 17 | PODFILE CHECKSUM: 4ae1bd703534f9271493bb7491159c1ea9d4b9b8 18 | 19 | COCOAPODS: 1.3.1 20 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/PSPageControl.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PSPageControl", 3 | "version": "0.3.2", 4 | "summary": "Easy parallax effect in UIPageControl", 5 | "description": "Easy parallax effect in UIPageControl in Swift.", 6 | "homepage": "https://github.com/sochalewski/PSPageControl", 7 | "license": "MIT", 8 | "authors": { 9 | "Piotr Sochalewski": "sochalewski@gmail.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/sochalewski/PSPageControl.git", 13 | "tag": "0.3.2" 14 | }, 15 | "platforms": { 16 | "ios": "8.0" 17 | }, 18 | "requires_arc": true, 19 | "source_files": "*.swift", 20 | "frameworks": "UIKit", 21 | "dependencies": { 22 | "UIImageViewAlignedSwift": [ 23 | "~> 0.5.0" 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - PSPageControl (0.3.2): 3 | - UIImageViewAlignedSwift (~> 0.5.0) 4 | - UIImageViewAlignedSwift (0.5.0) 5 | 6 | DEPENDENCIES: 7 | - PSPageControl (from `../`) 8 | 9 | EXTERNAL SOURCES: 10 | PSPageControl: 11 | :path: ../ 12 | 13 | SPEC CHECKSUMS: 14 | PSPageControl: 94f1ab6027ceb9bb491cfd674443a3c1c10fd5d2 15 | UIImageViewAlignedSwift: 2e09096e6081ad26b848e19b4bc35a7d69165740 16 | 17 | PODFILE CHECKSUM: 4ae1bd703534f9271493bb7491159c1ea9d4b9b8 18 | 19 | COCOAPODS: 1.3.1 20 | -------------------------------------------------------------------------------- /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 | 0F172EC29B7694DC9302726CA851E6E0 /* Pods-PSPageControl_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBAE2DA804934590930FF6C103D32696 /* Pods-PSPageControl_Example-dummy.m */; }; 11 | 0F3B0C2F8441F0B15B937BAE026E06F9 /* UIImageViewAlignedSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE0C8CF1FF4C7C9A615EF6E885A5B573 /* UIImageViewAlignedSwift.framework */; }; 12 | 1AE11F52DFEE3BE9322798E6CD19DA76 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E21BDB8371B8487F39519DAEAC9C4977 /* Foundation.framework */; }; 13 | 1E09A372EBB1EC9493BD3AC0FCA22F97 /* Pods-PSPageControl_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CF9A1990BFD3C93902FB0CF4DEC21BA /* Pods-PSPageControl_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 24C48612E9800D05DD98559C2D426ABE /* PSPageControl-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90661CD46487126D5396E99859ECF623 /* PSPageControl-dummy.m */; }; 15 | 3DFCB9DD2588AC15FEF287E76AE8296B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 705B14B5A5DD4673BE16C3684A573760 /* UIKit.framework */; }; 16 | 418518254597B95CE8E8C7EF05CC48C9 /* UIImageViewAlignedSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DB6191CDA36E4471D3BD1926016F2702 /* UIImageViewAlignedSwift-dummy.m */; }; 17 | 57C5C83ADEF60518BDDAA502FC3A08AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E21BDB8371B8487F39519DAEAC9C4977 /* Foundation.framework */; }; 18 | 5B2F20CF6356F726DD122F0F51B82FAE /* UIImageViewAligned.swift in Sources */ = {isa = PBXBuildFile; fileRef = 066668544D49FD20830650C69C988E40 /* UIImageViewAligned.swift */; }; 19 | 759D0499CF5B054CC3193B513B45579F /* PSPageControl-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 79C555206376328BC8ED9E9923C4FFEE /* PSPageControl-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | BA6935E10877F36E49B1D08D4BB71558 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 705B14B5A5DD4673BE16C3684A573760 /* UIKit.framework */; }; 21 | C3E41B2A60DF92800B37CE1A633DDF89 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E21BDB8371B8487F39519DAEAC9C4977 /* Foundation.framework */; }; 22 | E04F0575BB393F91621D8355C6C7622D /* PSPageControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AB1997A9C6C878C5B41EAA25ECE742 /* PSPageControl.swift */; }; 23 | FA6F3004865917366C999D65AB8F7E93 /* UIImageViewAlignedSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 363281C506939B2610DA857BE5FBB181 /* UIImageViewAlignedSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 088F6474B7F7F5C581399019B00566C1 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = A6A1CB493E014699750CD8ED8D541C65; 32 | remoteInfo = UIImageViewAlignedSwift; 33 | }; 34 | 88F0119324D62A1DE564E066038129C6 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = A6A1CB493E014699750CD8ED8D541C65; 39 | remoteInfo = UIImageViewAlignedSwift; 40 | }; 41 | B851B81B902B172168208916A10C4686 /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 44 | proxyType = 1; 45 | remoteGlobalIDString = A1C85D0B3FED9D3AFC5AEBA61D48251C; 46 | remoteInfo = PSPageControl; 47 | }; 48 | /* End PBXContainerItemProxy section */ 49 | 50 | /* Begin PBXFileReference section */ 51 | 066668544D49FD20830650C69C988E40 /* UIImageViewAligned.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIImageViewAligned.swift; sourceTree = ""; }; 52 | 08D751411D877C2F8346817CE0642691 /* Pods-PSPageControl_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PSPageControl_Example-frameworks.sh"; sourceTree = ""; }; 53 | 0F563C74AE32DECF68621365D706E8B0 /* UIImageViewAlignedSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = UIImageViewAlignedSwift.framework; path = UIImageViewAlignedSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 1627A6B073C47146F67E4A35CA631F9F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 55 | 19AB1997A9C6C878C5B41EAA25ECE742 /* PSPageControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PSPageControl.swift; sourceTree = ""; }; 56 | 25A4990F99396587659C6373BAEBAD8D /* Pods-PSPageControl_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PSPageControl_Example.debug.xcconfig"; sourceTree = ""; }; 57 | 25D41BF39E1690934F51CD4B6040B232 /* Pods-PSPageControl_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PSPageControl_Example-acknowledgements.plist"; sourceTree = ""; }; 58 | 344DB05A85DE4C15BCA9026EA84213AA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 59 | 363281C506939B2610DA857BE5FBB181 /* UIImageViewAlignedSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageViewAlignedSwift-umbrella.h"; sourceTree = ""; }; 60 | 46DB424267DFACA4D263DAD5DB644DC1 /* UIImageViewAlignedSwift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = UIImageViewAlignedSwift.xcconfig; sourceTree = ""; }; 61 | 4CF9A1990BFD3C93902FB0CF4DEC21BA /* Pods-PSPageControl_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-PSPageControl_Example-umbrella.h"; sourceTree = ""; }; 62 | 4E4FC2B4D02F1B20F7D56DB41F35E85C /* UIImageViewAlignedSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = UIImageViewAlignedSwift.modulemap; sourceTree = ""; }; 63 | 4F6D16BE6CB4531F3DA69C9515F169BF /* PSPageControl-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PSPageControl-prefix.pch"; sourceTree = ""; }; 64 | 6EF7D51CAD2D3A849AB5EC0EF727A715 /* UIImageViewAlignedSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImageViewAlignedSwift-prefix.pch"; sourceTree = ""; }; 65 | 705B14B5A5DD4673BE16C3684A573760 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 66 | 79C555206376328BC8ED9E9923C4FFEE /* PSPageControl-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PSPageControl-umbrella.h"; sourceTree = ""; }; 67 | 90661CD46487126D5396E99859ECF623 /* PSPageControl-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PSPageControl-dummy.m"; sourceTree = ""; }; 68 | 930BA680286DADAF354579DF8D0EB2F2 /* PSPageControl.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PSPageControl.xcconfig; sourceTree = ""; }; 69 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 70 | 9843003A34B4BF76B59F17A601C298F9 /* Pods-PSPageControl_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PSPageControl_Example-acknowledgements.markdown"; sourceTree = ""; }; 71 | 9F17D17466FB234DA196F84318FF13AC /* Pods_PSPageControl_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_PSPageControl_Example.framework; path = "Pods-PSPageControl_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | C69C8B6D5874D5DEA7087878FC9F4E41 /* Pods-PSPageControl_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-PSPageControl_Example.modulemap"; sourceTree = ""; }; 73 | CE0C8CF1FF4C7C9A615EF6E885A5B573 /* UIImageViewAlignedSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIImageViewAlignedSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74 | DB6191CDA36E4471D3BD1926016F2702 /* UIImageViewAlignedSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImageViewAlignedSwift-dummy.m"; sourceTree = ""; }; 75 | DBAE2DA804934590930FF6C103D32696 /* Pods-PSPageControl_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PSPageControl_Example-dummy.m"; sourceTree = ""; }; 76 | DDD5A0181CC7FAF1041A5508735A2B10 /* Pods-PSPageControl_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PSPageControl_Example-resources.sh"; sourceTree = ""; }; 77 | DF82B3716E62462809F73C676828E753 /* PSPageControl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PSPageControl.framework; path = PSPageControl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 78 | E21BDB8371B8487F39519DAEAC9C4977 /* 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; }; 79 | EA2A5681EF8EA047360F44851047887C /* Pods-PSPageControl_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PSPageControl_Example.release.xcconfig"; sourceTree = ""; }; 80 | ECD62949FB75E42B3C4B49A074797B80 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 81 | F85A1DB706518B876C0E7FBB05FCC2F0 /* PSPageControl.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = PSPageControl.modulemap; sourceTree = ""; }; 82 | /* End PBXFileReference section */ 83 | 84 | /* Begin PBXFrameworksBuildPhase section */ 85 | 01284D008D7D8BB610809E817C94995C /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | 1AE11F52DFEE3BE9322798E6CD19DA76 /* Foundation.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | D87C88D629480DD95439BE92E522C831 /* Frameworks */ = { 94 | isa = PBXFrameworksBuildPhase; 95 | buildActionMask = 2147483647; 96 | files = ( 97 | 57C5C83ADEF60518BDDAA502FC3A08AE /* Foundation.framework in Frameworks */, 98 | BA6935E10877F36E49B1D08D4BB71558 /* UIKit.framework in Frameworks */, 99 | ); 100 | runOnlyForDeploymentPostprocessing = 0; 101 | }; 102 | F4E20C925206E106871A3CAF6B1EDC71 /* Frameworks */ = { 103 | isa = PBXFrameworksBuildPhase; 104 | buildActionMask = 2147483647; 105 | files = ( 106 | C3E41B2A60DF92800B37CE1A633DDF89 /* Foundation.framework in Frameworks */, 107 | 0F3B0C2F8441F0B15B937BAE026E06F9 /* UIImageViewAlignedSwift.framework in Frameworks */, 108 | 3DFCB9DD2588AC15FEF287E76AE8296B /* UIKit.framework in Frameworks */, 109 | ); 110 | runOnlyForDeploymentPostprocessing = 0; 111 | }; 112 | /* End PBXFrameworksBuildPhase section */ 113 | 114 | /* Begin PBXGroup section */ 115 | 28867A4C7D6A26370E9324DF8DD4BCF7 /* PSPageControl */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 19AB1997A9C6C878C5B41EAA25ECE742 /* PSPageControl.swift */, 119 | 54CCB839ADD11243CB0A077B2240A65F /* Support Files */, 120 | ); 121 | name = PSPageControl; 122 | path = ../..; 123 | sourceTree = ""; 124 | }; 125 | 448EF6CC1054944281C1EEA3A8201767 /* iOS */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | E21BDB8371B8487F39519DAEAC9C4977 /* Foundation.framework */, 129 | 705B14B5A5DD4673BE16C3684A573760 /* UIKit.framework */, 130 | ); 131 | name = iOS; 132 | sourceTree = ""; 133 | }; 134 | 54CCB839ADD11243CB0A077B2240A65F /* Support Files */ = { 135 | isa = PBXGroup; 136 | children = ( 137 | 1627A6B073C47146F67E4A35CA631F9F /* Info.plist */, 138 | F85A1DB706518B876C0E7FBB05FCC2F0 /* PSPageControl.modulemap */, 139 | 930BA680286DADAF354579DF8D0EB2F2 /* PSPageControl.xcconfig */, 140 | 90661CD46487126D5396E99859ECF623 /* PSPageControl-dummy.m */, 141 | 4F6D16BE6CB4531F3DA69C9515F169BF /* PSPageControl-prefix.pch */, 142 | 79C555206376328BC8ED9E9923C4FFEE /* PSPageControl-umbrella.h */, 143 | ); 144 | name = "Support Files"; 145 | path = "Example/Pods/Target Support Files/PSPageControl"; 146 | sourceTree = ""; 147 | }; 148 | 6B21C33BA264B127C23D0DC2EF7B80CC /* UIImageViewAlignedSwift */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | 066668544D49FD20830650C69C988E40 /* UIImageViewAligned.swift */, 152 | 7246162D7A80468F21512D0B41A5FA49 /* Support Files */, 153 | ); 154 | name = UIImageViewAlignedSwift; 155 | path = UIImageViewAlignedSwift; 156 | sourceTree = ""; 157 | }; 158 | 7246162D7A80468F21512D0B41A5FA49 /* Support Files */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | ECD62949FB75E42B3C4B49A074797B80 /* Info.plist */, 162 | 4E4FC2B4D02F1B20F7D56DB41F35E85C /* UIImageViewAlignedSwift.modulemap */, 163 | 46DB424267DFACA4D263DAD5DB644DC1 /* UIImageViewAlignedSwift.xcconfig */, 164 | DB6191CDA36E4471D3BD1926016F2702 /* UIImageViewAlignedSwift-dummy.m */, 165 | 6EF7D51CAD2D3A849AB5EC0EF727A715 /* UIImageViewAlignedSwift-prefix.pch */, 166 | 363281C506939B2610DA857BE5FBB181 /* UIImageViewAlignedSwift-umbrella.h */, 167 | ); 168 | name = "Support Files"; 169 | path = "../Target Support Files/UIImageViewAlignedSwift"; 170 | sourceTree = ""; 171 | }; 172 | 79238444F0572C6CAF94EB05F9EB75F7 /* Development Pods */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | 28867A4C7D6A26370E9324DF8DD4BCF7 /* PSPageControl */, 176 | ); 177 | name = "Development Pods"; 178 | sourceTree = ""; 179 | }; 180 | 7DB346D0F39D3F0E887471402A8071AB = { 181 | isa = PBXGroup; 182 | children = ( 183 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 184 | 79238444F0572C6CAF94EB05F9EB75F7 /* Development Pods */, 185 | EE2FF18CB21F5A19AFB2A27B2273EB36 /* Frameworks */, 186 | A11DC78022D8731A556E975ABA5380F4 /* Pods */, 187 | C1818213D60C8A8B61445C17723B5900 /* Products */, 188 | D4EF4A47347478DB614FCB03CFC5F5AC /* Targets Support Files */, 189 | ); 190 | sourceTree = ""; 191 | }; 192 | A11DC78022D8731A556E975ABA5380F4 /* Pods */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | 6B21C33BA264B127C23D0DC2EF7B80CC /* UIImageViewAlignedSwift */, 196 | ); 197 | name = Pods; 198 | sourceTree = ""; 199 | }; 200 | C1818213D60C8A8B61445C17723B5900 /* Products */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | 9F17D17466FB234DA196F84318FF13AC /* Pods_PSPageControl_Example.framework */, 204 | DF82B3716E62462809F73C676828E753 /* PSPageControl.framework */, 205 | 0F563C74AE32DECF68621365D706E8B0 /* UIImageViewAlignedSwift.framework */, 206 | ); 207 | name = Products; 208 | sourceTree = ""; 209 | }; 210 | D4EF4A47347478DB614FCB03CFC5F5AC /* Targets Support Files */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | F5E9A3375AC2CC3E342A6A9D71C50815 /* Pods-PSPageControl_Example */, 214 | ); 215 | name = "Targets Support Files"; 216 | sourceTree = ""; 217 | }; 218 | EE2FF18CB21F5A19AFB2A27B2273EB36 /* Frameworks */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | CE0C8CF1FF4C7C9A615EF6E885A5B573 /* UIImageViewAlignedSwift.framework */, 222 | 448EF6CC1054944281C1EEA3A8201767 /* iOS */, 223 | ); 224 | name = Frameworks; 225 | sourceTree = ""; 226 | }; 227 | F5E9A3375AC2CC3E342A6A9D71C50815 /* Pods-PSPageControl_Example */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 344DB05A85DE4C15BCA9026EA84213AA /* Info.plist */, 231 | C69C8B6D5874D5DEA7087878FC9F4E41 /* Pods-PSPageControl_Example.modulemap */, 232 | 9843003A34B4BF76B59F17A601C298F9 /* Pods-PSPageControl_Example-acknowledgements.markdown */, 233 | 25D41BF39E1690934F51CD4B6040B232 /* Pods-PSPageControl_Example-acknowledgements.plist */, 234 | DBAE2DA804934590930FF6C103D32696 /* Pods-PSPageControl_Example-dummy.m */, 235 | 08D751411D877C2F8346817CE0642691 /* Pods-PSPageControl_Example-frameworks.sh */, 236 | DDD5A0181CC7FAF1041A5508735A2B10 /* Pods-PSPageControl_Example-resources.sh */, 237 | 4CF9A1990BFD3C93902FB0CF4DEC21BA /* Pods-PSPageControl_Example-umbrella.h */, 238 | 25A4990F99396587659C6373BAEBAD8D /* Pods-PSPageControl_Example.debug.xcconfig */, 239 | EA2A5681EF8EA047360F44851047887C /* Pods-PSPageControl_Example.release.xcconfig */, 240 | ); 241 | name = "Pods-PSPageControl_Example"; 242 | path = "Target Support Files/Pods-PSPageControl_Example"; 243 | sourceTree = ""; 244 | }; 245 | /* End PBXGroup section */ 246 | 247 | /* Begin PBXHeadersBuildPhase section */ 248 | 39F3EA02849823D67DDB87F099C0C57D /* Headers */ = { 249 | isa = PBXHeadersBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | 1E09A372EBB1EC9493BD3AC0FCA22F97 /* Pods-PSPageControl_Example-umbrella.h in Headers */, 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | }; 256 | 884385D5C3ED5F59C482994CB039FC68 /* Headers */ = { 257 | isa = PBXHeadersBuildPhase; 258 | buildActionMask = 2147483647; 259 | files = ( 260 | 759D0499CF5B054CC3193B513B45579F /* PSPageControl-umbrella.h in Headers */, 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | }; 264 | 8D694F61DC2FC25E199317E9465F6289 /* Headers */ = { 265 | isa = PBXHeadersBuildPhase; 266 | buildActionMask = 2147483647; 267 | files = ( 268 | FA6F3004865917366C999D65AB8F7E93 /* UIImageViewAlignedSwift-umbrella.h in Headers */, 269 | ); 270 | runOnlyForDeploymentPostprocessing = 0; 271 | }; 272 | /* End PBXHeadersBuildPhase section */ 273 | 274 | /* Begin PBXNativeTarget section */ 275 | 94EF26035ED3D2DC6EB3DAC7BBF3003A /* Pods-PSPageControl_Example */ = { 276 | isa = PBXNativeTarget; 277 | buildConfigurationList = 4D702774E8605A2298B9D09A26DC5D39 /* Build configuration list for PBXNativeTarget "Pods-PSPageControl_Example" */; 278 | buildPhases = ( 279 | A2BCF92B845B56707644384569E309BC /* Sources */, 280 | 01284D008D7D8BB610809E817C94995C /* Frameworks */, 281 | 39F3EA02849823D67DDB87F099C0C57D /* Headers */, 282 | ); 283 | buildRules = ( 284 | ); 285 | dependencies = ( 286 | 80AA96BF0F4F292F72AD473EC75000C4 /* PBXTargetDependency */, 287 | D77C334CCD9CB9BBEC166BCA42B109FA /* PBXTargetDependency */, 288 | ); 289 | name = "Pods-PSPageControl_Example"; 290 | productName = "Pods-PSPageControl_Example"; 291 | productReference = 9F17D17466FB234DA196F84318FF13AC /* Pods_PSPageControl_Example.framework */; 292 | productType = "com.apple.product-type.framework"; 293 | }; 294 | A1C85D0B3FED9D3AFC5AEBA61D48251C /* PSPageControl */ = { 295 | isa = PBXNativeTarget; 296 | buildConfigurationList = 436BCBA41C45210F65A02E94DE62D6D1 /* Build configuration list for PBXNativeTarget "PSPageControl" */; 297 | buildPhases = ( 298 | D2CB21177B3C9DDA893CA65722BBF8DC /* Sources */, 299 | F4E20C925206E106871A3CAF6B1EDC71 /* Frameworks */, 300 | 884385D5C3ED5F59C482994CB039FC68 /* Headers */, 301 | ); 302 | buildRules = ( 303 | ); 304 | dependencies = ( 305 | C3B662EEBCC69089263C7E5CE631D65D /* PBXTargetDependency */, 306 | ); 307 | name = PSPageControl; 308 | productName = PSPageControl; 309 | productReference = DF82B3716E62462809F73C676828E753 /* PSPageControl.framework */; 310 | productType = "com.apple.product-type.framework"; 311 | }; 312 | A6A1CB493E014699750CD8ED8D541C65 /* UIImageViewAlignedSwift */ = { 313 | isa = PBXNativeTarget; 314 | buildConfigurationList = 0154478B1588A2349FE9177A9E892232 /* Build configuration list for PBXNativeTarget "UIImageViewAlignedSwift" */; 315 | buildPhases = ( 316 | 7BAC6F1A2165A6BBD364013E1116632A /* Sources */, 317 | D87C88D629480DD95439BE92E522C831 /* Frameworks */, 318 | 8D694F61DC2FC25E199317E9465F6289 /* Headers */, 319 | ); 320 | buildRules = ( 321 | ); 322 | dependencies = ( 323 | ); 324 | name = UIImageViewAlignedSwift; 325 | productName = UIImageViewAlignedSwift; 326 | productReference = 0F563C74AE32DECF68621365D706E8B0 /* UIImageViewAlignedSwift.framework */; 327 | productType = "com.apple.product-type.framework"; 328 | }; 329 | /* End PBXNativeTarget section */ 330 | 331 | /* Begin PBXProject section */ 332 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 333 | isa = PBXProject; 334 | attributes = { 335 | LastSwiftUpdateCheck = 0830; 336 | LastUpgradeCheck = 0700; 337 | }; 338 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 339 | compatibilityVersion = "Xcode 3.2"; 340 | developmentRegion = English; 341 | hasScannedForEncodings = 0; 342 | knownRegions = ( 343 | en, 344 | ); 345 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 346 | productRefGroup = C1818213D60C8A8B61445C17723B5900 /* Products */; 347 | projectDirPath = ""; 348 | projectRoot = ""; 349 | targets = ( 350 | 94EF26035ED3D2DC6EB3DAC7BBF3003A /* Pods-PSPageControl_Example */, 351 | A1C85D0B3FED9D3AFC5AEBA61D48251C /* PSPageControl */, 352 | A6A1CB493E014699750CD8ED8D541C65 /* UIImageViewAlignedSwift */, 353 | ); 354 | }; 355 | /* End PBXProject section */ 356 | 357 | /* Begin PBXSourcesBuildPhase section */ 358 | 7BAC6F1A2165A6BBD364013E1116632A /* Sources */ = { 359 | isa = PBXSourcesBuildPhase; 360 | buildActionMask = 2147483647; 361 | files = ( 362 | 5B2F20CF6356F726DD122F0F51B82FAE /* UIImageViewAligned.swift in Sources */, 363 | 418518254597B95CE8E8C7EF05CC48C9 /* UIImageViewAlignedSwift-dummy.m in Sources */, 364 | ); 365 | runOnlyForDeploymentPostprocessing = 0; 366 | }; 367 | A2BCF92B845B56707644384569E309BC /* Sources */ = { 368 | isa = PBXSourcesBuildPhase; 369 | buildActionMask = 2147483647; 370 | files = ( 371 | 0F172EC29B7694DC9302726CA851E6E0 /* Pods-PSPageControl_Example-dummy.m in Sources */, 372 | ); 373 | runOnlyForDeploymentPostprocessing = 0; 374 | }; 375 | D2CB21177B3C9DDA893CA65722BBF8DC /* Sources */ = { 376 | isa = PBXSourcesBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | 24C48612E9800D05DD98559C2D426ABE /* PSPageControl-dummy.m in Sources */, 380 | E04F0575BB393F91621D8355C6C7622D /* PSPageControl.swift in Sources */, 381 | ); 382 | runOnlyForDeploymentPostprocessing = 0; 383 | }; 384 | /* End PBXSourcesBuildPhase section */ 385 | 386 | /* Begin PBXTargetDependency section */ 387 | 80AA96BF0F4F292F72AD473EC75000C4 /* PBXTargetDependency */ = { 388 | isa = PBXTargetDependency; 389 | name = PSPageControl; 390 | target = A1C85D0B3FED9D3AFC5AEBA61D48251C /* PSPageControl */; 391 | targetProxy = B851B81B902B172168208916A10C4686 /* PBXContainerItemProxy */; 392 | }; 393 | C3B662EEBCC69089263C7E5CE631D65D /* PBXTargetDependency */ = { 394 | isa = PBXTargetDependency; 395 | name = UIImageViewAlignedSwift; 396 | target = A6A1CB493E014699750CD8ED8D541C65 /* UIImageViewAlignedSwift */; 397 | targetProxy = 88F0119324D62A1DE564E066038129C6 /* PBXContainerItemProxy */; 398 | }; 399 | D77C334CCD9CB9BBEC166BCA42B109FA /* PBXTargetDependency */ = { 400 | isa = PBXTargetDependency; 401 | name = UIImageViewAlignedSwift; 402 | target = A6A1CB493E014699750CD8ED8D541C65 /* UIImageViewAlignedSwift */; 403 | targetProxy = 088F6474B7F7F5C581399019B00566C1 /* PBXContainerItemProxy */; 404 | }; 405 | /* End PBXTargetDependency section */ 406 | 407 | /* Begin XCBuildConfiguration section */ 408 | 4492463D8CF30E289393DFD2476AF555 /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | baseConfigurationReference = 25A4990F99396587659C6373BAEBAD8D /* Pods-PSPageControl_Example.debug.xcconfig */; 411 | buildSettings = { 412 | CODE_SIGN_IDENTITY = ""; 413 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 414 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 415 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 416 | CURRENT_PROJECT_VERSION = 1; 417 | DEFINES_MODULE = YES; 418 | DYLIB_COMPATIBILITY_VERSION = 1; 419 | DYLIB_CURRENT_VERSION = 1; 420 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 421 | INFOPLIST_FILE = "Target Support Files/Pods-PSPageControl_Example/Info.plist"; 422 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 423 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 424 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 425 | MACH_O_TYPE = staticlib; 426 | MODULEMAP_FILE = "Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.modulemap"; 427 | OTHER_LDFLAGS = ""; 428 | OTHER_LIBTOOLFLAGS = ""; 429 | PODS_ROOT = "$(SRCROOT)"; 430 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 431 | PRODUCT_NAME = Pods_PSPageControl_Example; 432 | SDKROOT = iphoneos; 433 | SKIP_INSTALL = YES; 434 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 435 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 436 | TARGETED_DEVICE_FAMILY = "1,2"; 437 | VERSIONING_SYSTEM = "apple-generic"; 438 | VERSION_INFO_PREFIX = ""; 439 | }; 440 | name = Debug; 441 | }; 442 | 860E285BF7C1988B4B201CDF6202DD84 /* Release */ = { 443 | isa = XCBuildConfiguration; 444 | baseConfigurationReference = 930BA680286DADAF354579DF8D0EB2F2 /* PSPageControl.xcconfig */; 445 | buildSettings = { 446 | CODE_SIGN_IDENTITY = ""; 447 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 448 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 449 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 450 | CURRENT_PROJECT_VERSION = 1; 451 | DEFINES_MODULE = YES; 452 | DYLIB_COMPATIBILITY_VERSION = 1; 453 | DYLIB_CURRENT_VERSION = 1; 454 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 455 | GCC_PREFIX_HEADER = "Target Support Files/PSPageControl/PSPageControl-prefix.pch"; 456 | INFOPLIST_FILE = "Target Support Files/PSPageControl/Info.plist"; 457 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 458 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 459 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 460 | MODULEMAP_FILE = "Target Support Files/PSPageControl/PSPageControl.modulemap"; 461 | PRODUCT_NAME = PSPageControl; 462 | SDKROOT = iphoneos; 463 | SKIP_INSTALL = YES; 464 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 465 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 466 | SWIFT_VERSION = 4.0; 467 | TARGETED_DEVICE_FAMILY = "1,2"; 468 | VALIDATE_PRODUCT = YES; 469 | VERSIONING_SYSTEM = "apple-generic"; 470 | VERSION_INFO_PREFIX = ""; 471 | }; 472 | name = Release; 473 | }; 474 | 9CD715B3AE7925EBC19E726C3256F2AE /* Debug */ = { 475 | isa = XCBuildConfiguration; 476 | baseConfigurationReference = 46DB424267DFACA4D263DAD5DB644DC1 /* UIImageViewAlignedSwift.xcconfig */; 477 | buildSettings = { 478 | CODE_SIGN_IDENTITY = ""; 479 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 480 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 481 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 482 | CURRENT_PROJECT_VERSION = 1; 483 | DEFINES_MODULE = YES; 484 | DYLIB_COMPATIBILITY_VERSION = 1; 485 | DYLIB_CURRENT_VERSION = 1; 486 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 487 | GCC_PREFIX_HEADER = "Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift-prefix.pch"; 488 | INFOPLIST_FILE = "Target Support Files/UIImageViewAlignedSwift/Info.plist"; 489 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 490 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 491 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 492 | MODULEMAP_FILE = "Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift.modulemap"; 493 | PRODUCT_NAME = UIImageViewAlignedSwift; 494 | SDKROOT = iphoneos; 495 | SKIP_INSTALL = YES; 496 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 497 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 498 | SWIFT_VERSION = 4.0; 499 | TARGETED_DEVICE_FAMILY = "1,2"; 500 | VERSIONING_SYSTEM = "apple-generic"; 501 | VERSION_INFO_PREFIX = ""; 502 | }; 503 | name = Debug; 504 | }; 505 | B254DAA6CF0CE39F4A3D11B90A7E059A /* Release */ = { 506 | isa = XCBuildConfiguration; 507 | buildSettings = { 508 | ALWAYS_SEARCH_USER_PATHS = NO; 509 | CLANG_ANALYZER_NONNULL = YES; 510 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 511 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 512 | CLANG_CXX_LIBRARY = "libc++"; 513 | CLANG_ENABLE_MODULES = YES; 514 | CLANG_ENABLE_OBJC_ARC = YES; 515 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 516 | CLANG_WARN_BOOL_CONVERSION = YES; 517 | CLANG_WARN_COMMA = YES; 518 | CLANG_WARN_CONSTANT_CONVERSION = YES; 519 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 520 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 521 | CLANG_WARN_EMPTY_BODY = YES; 522 | CLANG_WARN_ENUM_CONVERSION = YES; 523 | CLANG_WARN_INFINITE_RECURSION = YES; 524 | CLANG_WARN_INT_CONVERSION = YES; 525 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 526 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 527 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 528 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 529 | CLANG_WARN_STRICT_PROTOTYPES = YES; 530 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 531 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 532 | CLANG_WARN_UNREACHABLE_CODE = YES; 533 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 534 | CODE_SIGNING_REQUIRED = NO; 535 | COPY_PHASE_STRIP = NO; 536 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 537 | ENABLE_NS_ASSERTIONS = NO; 538 | ENABLE_STRICT_OBJC_MSGSEND = YES; 539 | GCC_C_LANGUAGE_STANDARD = gnu11; 540 | GCC_NO_COMMON_BLOCKS = YES; 541 | GCC_PREPROCESSOR_DEFINITIONS = ( 542 | "POD_CONFIGURATION_RELEASE=1", 543 | "$(inherited)", 544 | ); 545 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 546 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 547 | GCC_WARN_UNDECLARED_SELECTOR = YES; 548 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 549 | GCC_WARN_UNUSED_FUNCTION = YES; 550 | GCC_WARN_UNUSED_VARIABLE = YES; 551 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 552 | MTL_ENABLE_DEBUG_INFO = NO; 553 | PRODUCT_NAME = "$(TARGET_NAME)"; 554 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 555 | STRIP_INSTALLED_PRODUCT = NO; 556 | SYMROOT = "${SRCROOT}/../build"; 557 | }; 558 | name = Release; 559 | }; 560 | CE6C117ABEE2E8DCAEF68562F3879982 /* Release */ = { 561 | isa = XCBuildConfiguration; 562 | baseConfigurationReference = 46DB424267DFACA4D263DAD5DB644DC1 /* UIImageViewAlignedSwift.xcconfig */; 563 | buildSettings = { 564 | CODE_SIGN_IDENTITY = ""; 565 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 566 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 567 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 568 | CURRENT_PROJECT_VERSION = 1; 569 | DEFINES_MODULE = YES; 570 | DYLIB_COMPATIBILITY_VERSION = 1; 571 | DYLIB_CURRENT_VERSION = 1; 572 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 573 | GCC_PREFIX_HEADER = "Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift-prefix.pch"; 574 | INFOPLIST_FILE = "Target Support Files/UIImageViewAlignedSwift/Info.plist"; 575 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 576 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 577 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 578 | MODULEMAP_FILE = "Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift.modulemap"; 579 | PRODUCT_NAME = UIImageViewAlignedSwift; 580 | SDKROOT = iphoneos; 581 | SKIP_INSTALL = YES; 582 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 583 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 584 | SWIFT_VERSION = 4.0; 585 | TARGETED_DEVICE_FAMILY = "1,2"; 586 | VALIDATE_PRODUCT = YES; 587 | VERSIONING_SYSTEM = "apple-generic"; 588 | VERSION_INFO_PREFIX = ""; 589 | }; 590 | name = Release; 591 | }; 592 | D209A08870B6C6688C915753B651AE03 /* Debug */ = { 593 | isa = XCBuildConfiguration; 594 | baseConfigurationReference = 930BA680286DADAF354579DF8D0EB2F2 /* PSPageControl.xcconfig */; 595 | buildSettings = { 596 | CODE_SIGN_IDENTITY = ""; 597 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 598 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 599 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 600 | CURRENT_PROJECT_VERSION = 1; 601 | DEFINES_MODULE = YES; 602 | DYLIB_COMPATIBILITY_VERSION = 1; 603 | DYLIB_CURRENT_VERSION = 1; 604 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 605 | GCC_PREFIX_HEADER = "Target Support Files/PSPageControl/PSPageControl-prefix.pch"; 606 | INFOPLIST_FILE = "Target Support Files/PSPageControl/Info.plist"; 607 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 608 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 609 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 610 | MODULEMAP_FILE = "Target Support Files/PSPageControl/PSPageControl.modulemap"; 611 | PRODUCT_NAME = PSPageControl; 612 | SDKROOT = iphoneos; 613 | SKIP_INSTALL = YES; 614 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 615 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 616 | SWIFT_VERSION = 4.0; 617 | TARGETED_DEVICE_FAMILY = "1,2"; 618 | VERSIONING_SYSTEM = "apple-generic"; 619 | VERSION_INFO_PREFIX = ""; 620 | }; 621 | name = Debug; 622 | }; 623 | E4B68EE12B21C47CB798D9B1ECA6D7A7 /* Debug */ = { 624 | isa = XCBuildConfiguration; 625 | buildSettings = { 626 | ALWAYS_SEARCH_USER_PATHS = NO; 627 | CLANG_ANALYZER_NONNULL = YES; 628 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 629 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 630 | CLANG_CXX_LIBRARY = "libc++"; 631 | CLANG_ENABLE_MODULES = YES; 632 | CLANG_ENABLE_OBJC_ARC = YES; 633 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 634 | CLANG_WARN_BOOL_CONVERSION = YES; 635 | CLANG_WARN_COMMA = YES; 636 | CLANG_WARN_CONSTANT_CONVERSION = YES; 637 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 638 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 639 | CLANG_WARN_EMPTY_BODY = YES; 640 | CLANG_WARN_ENUM_CONVERSION = YES; 641 | CLANG_WARN_INFINITE_RECURSION = YES; 642 | CLANG_WARN_INT_CONVERSION = YES; 643 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 644 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 645 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 646 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 647 | CLANG_WARN_STRICT_PROTOTYPES = YES; 648 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 649 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 650 | CLANG_WARN_UNREACHABLE_CODE = YES; 651 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 652 | CODE_SIGNING_REQUIRED = NO; 653 | COPY_PHASE_STRIP = NO; 654 | DEBUG_INFORMATION_FORMAT = dwarf; 655 | ENABLE_STRICT_OBJC_MSGSEND = YES; 656 | ENABLE_TESTABILITY = YES; 657 | GCC_C_LANGUAGE_STANDARD = gnu11; 658 | GCC_DYNAMIC_NO_PIC = NO; 659 | GCC_NO_COMMON_BLOCKS = YES; 660 | GCC_OPTIMIZATION_LEVEL = 0; 661 | GCC_PREPROCESSOR_DEFINITIONS = ( 662 | "POD_CONFIGURATION_DEBUG=1", 663 | "DEBUG=1", 664 | "$(inherited)", 665 | ); 666 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 667 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 668 | GCC_WARN_UNDECLARED_SELECTOR = YES; 669 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 670 | GCC_WARN_UNUSED_FUNCTION = YES; 671 | GCC_WARN_UNUSED_VARIABLE = YES; 672 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 673 | MTL_ENABLE_DEBUG_INFO = YES; 674 | ONLY_ACTIVE_ARCH = YES; 675 | PRODUCT_NAME = "$(TARGET_NAME)"; 676 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 677 | STRIP_INSTALLED_PRODUCT = NO; 678 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 679 | SYMROOT = "${SRCROOT}/../build"; 680 | }; 681 | name = Debug; 682 | }; 683 | F078D83F1BF14AF87F30749D85F67F76 /* Release */ = { 684 | isa = XCBuildConfiguration; 685 | baseConfigurationReference = EA2A5681EF8EA047360F44851047887C /* Pods-PSPageControl_Example.release.xcconfig */; 686 | buildSettings = { 687 | CODE_SIGN_IDENTITY = ""; 688 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 689 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 690 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 691 | CURRENT_PROJECT_VERSION = 1; 692 | DEFINES_MODULE = YES; 693 | DYLIB_COMPATIBILITY_VERSION = 1; 694 | DYLIB_CURRENT_VERSION = 1; 695 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 696 | INFOPLIST_FILE = "Target Support Files/Pods-PSPageControl_Example/Info.plist"; 697 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 698 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 699 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 700 | MACH_O_TYPE = staticlib; 701 | MODULEMAP_FILE = "Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.modulemap"; 702 | OTHER_LDFLAGS = ""; 703 | OTHER_LIBTOOLFLAGS = ""; 704 | PODS_ROOT = "$(SRCROOT)"; 705 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 706 | PRODUCT_NAME = Pods_PSPageControl_Example; 707 | SDKROOT = iphoneos; 708 | SKIP_INSTALL = YES; 709 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 710 | TARGETED_DEVICE_FAMILY = "1,2"; 711 | VALIDATE_PRODUCT = YES; 712 | VERSIONING_SYSTEM = "apple-generic"; 713 | VERSION_INFO_PREFIX = ""; 714 | }; 715 | name = Release; 716 | }; 717 | /* End XCBuildConfiguration section */ 718 | 719 | /* Begin XCConfigurationList section */ 720 | 0154478B1588A2349FE9177A9E892232 /* Build configuration list for PBXNativeTarget "UIImageViewAlignedSwift" */ = { 721 | isa = XCConfigurationList; 722 | buildConfigurations = ( 723 | 9CD715B3AE7925EBC19E726C3256F2AE /* Debug */, 724 | CE6C117ABEE2E8DCAEF68562F3879982 /* Release */, 725 | ); 726 | defaultConfigurationIsVisible = 0; 727 | defaultConfigurationName = Release; 728 | }; 729 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 730 | isa = XCConfigurationList; 731 | buildConfigurations = ( 732 | E4B68EE12B21C47CB798D9B1ECA6D7A7 /* Debug */, 733 | B254DAA6CF0CE39F4A3D11B90A7E059A /* Release */, 734 | ); 735 | defaultConfigurationIsVisible = 0; 736 | defaultConfigurationName = Release; 737 | }; 738 | 436BCBA41C45210F65A02E94DE62D6D1 /* Build configuration list for PBXNativeTarget "PSPageControl" */ = { 739 | isa = XCConfigurationList; 740 | buildConfigurations = ( 741 | D209A08870B6C6688C915753B651AE03 /* Debug */, 742 | 860E285BF7C1988B4B201CDF6202DD84 /* Release */, 743 | ); 744 | defaultConfigurationIsVisible = 0; 745 | defaultConfigurationName = Release; 746 | }; 747 | 4D702774E8605A2298B9D09A26DC5D39 /* Build configuration list for PBXNativeTarget "Pods-PSPageControl_Example" */ = { 748 | isa = XCConfigurationList; 749 | buildConfigurations = ( 750 | 4492463D8CF30E289393DFD2476AF555 /* Debug */, 751 | F078D83F1BF14AF87F30749D85F67F76 /* Release */, 752 | ); 753 | defaultConfigurationIsVisible = 0; 754 | defaultConfigurationName = Release; 755 | }; 756 | /* End XCConfigurationList section */ 757 | }; 758 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 759 | } 760 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PSPageControl/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 | 0.3.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PSPageControl/PSPageControl-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_PSPageControl : NSObject 3 | @end 4 | @implementation PodsDummy_PSPageControl 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PSPageControl/PSPageControl-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/Pods/Target Support Files/PSPageControl/PSPageControl-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 PSPageControlVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char PSPageControlVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PSPageControl/PSPageControl.modulemap: -------------------------------------------------------------------------------- 1 | framework module PSPageControl { 2 | umbrella header "PSPageControl-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/PSPageControl/PSPageControl.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/PSPageControl 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_LDFLAGS = -framework "UIKit" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 11 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 12 | SKIP_INSTALL = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_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-PSPageControl_Example/Pods-PSPageControl_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## PSPageControl 5 | 6 | Copyright (c) 2016-17 Piotr Sochalewski 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | 27 | ## UIImageViewAlignedSwift 28 | 29 | Copyright (c) 2016-17 Piotr Sochalewski 30 | 31 | Permission is hereby granted, free of charge, to any person obtaining a copy 32 | of this software and associated documentation files (the "Software"), to deal 33 | in the Software without restriction, including without limitation the rights 34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the Software is 36 | furnished to do so, subject to the following conditions: 37 | 38 | The above copyright notice and this permission notice shall be included in 39 | all copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 47 | THE SOFTWARE. 48 | 49 | Generated by CocoaPods - https://cocoapods.org 50 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_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 | Copyright (c) 2016-17 Piotr Sochalewski <sochalewski@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | PSPageControl 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Copyright (c) 2016-17 Piotr Sochalewski <sochalewski@gmail.com> 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | 66 | License 67 | MIT 68 | Title 69 | UIImageViewAlignedSwift 70 | Type 71 | PSGroupSpecifier 72 | 73 | 74 | FooterText 75 | Generated by CocoaPods - https://cocoapods.org 76 | Title 77 | 78 | Type 79 | PSGroupSpecifier 80 | 81 | 82 | StringsTable 83 | Acknowledgements 84 | Title 85 | Acknowledgements 86 | 87 | 88 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_PSPageControl_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_PSPageControl_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_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 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 10 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 11 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 12 | 13 | install_framework() 14 | { 15 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 16 | local source="${BUILT_PRODUCTS_DIR}/$1" 17 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 18 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 19 | elif [ -r "$1" ]; then 20 | local source="$1" 21 | fi 22 | 23 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | 25 | if [ -L "${source}" ]; then 26 | echo "Symlinked..." 27 | source="$(readlink "${source}")" 28 | fi 29 | 30 | # Use filter instead of exclude so missing patterns don't throw errors. 31 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 32 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 33 | 34 | local basename 35 | basename="$(basename -s .framework "$1")" 36 | binary="${destination}/${basename}.framework/${basename}" 37 | if ! [ -r "$binary" ]; then 38 | binary="${destination}/${basename}" 39 | fi 40 | 41 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 42 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 43 | strip_invalid_archs "$binary" 44 | fi 45 | 46 | # Resign the code if required by the build settings to avoid unstable apps 47 | code_sign_if_enabled "${destination}/$(basename "$1")" 48 | 49 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 50 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 51 | local swift_runtime_libs 52 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 53 | for lib in $swift_runtime_libs; do 54 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 55 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 56 | code_sign_if_enabled "${destination}/${lib}" 57 | done 58 | fi 59 | } 60 | 61 | # Copies the dSYM of a vendored framework 62 | install_dsym() { 63 | local source="$1" 64 | if [ -r "$source" ]; then 65 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" 66 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" 67 | fi 68 | } 69 | 70 | # Signs a framework with the provided identity 71 | code_sign_if_enabled() { 72 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 73 | # Use the current code_sign_identitiy 74 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 75 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 76 | 77 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 78 | code_sign_cmd="$code_sign_cmd &" 79 | fi 80 | echo "$code_sign_cmd" 81 | eval "$code_sign_cmd" 82 | fi 83 | } 84 | 85 | # Strip invalid architectures 86 | strip_invalid_archs() { 87 | binary="$1" 88 | # Get architectures for current file 89 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 90 | stripped="" 91 | for arch in $archs; do 92 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 93 | # Strip non-valid architectures in-place 94 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 95 | stripped="$stripped $arch" 96 | fi 97 | done 98 | if [[ "$stripped" ]]; then 99 | echo "Stripped $binary of architectures:$stripped" 100 | fi 101 | } 102 | 103 | 104 | if [[ "$CONFIGURATION" == "Debug" ]]; then 105 | install_framework "${BUILT_PRODUCTS_DIR}/PSPageControl/PSPageControl.framework" 106 | install_framework "${BUILT_PRODUCTS_DIR}/UIImageViewAlignedSwift/UIImageViewAlignedSwift.framework" 107 | fi 108 | if [[ "$CONFIGURATION" == "Release" ]]; then 109 | install_framework "${BUILT_PRODUCTS_DIR}/PSPageControl/PSPageControl.framework" 110 | install_framework "${BUILT_PRODUCTS_DIR}/UIImageViewAlignedSwift/UIImageViewAlignedSwift.framework" 111 | fi 112 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 113 | wait 114 | fi 115 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_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-PSPageControl_Example/Pods-PSPageControl_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_PSPageControl_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PSPageControl_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PSPageControl" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift" 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/PSPageControl/PSPageControl.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift/UIImageViewAlignedSwift.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "PSPageControl" -framework "UIImageViewAlignedSwift" 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-PSPageControl_Example/Pods-PSPageControl_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_PSPageControl_Example { 2 | umbrella header "Pods-PSPageControl_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-PSPageControl_Example/Pods-PSPageControl_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/PSPageControl" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift" 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/PSPageControl/PSPageControl.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift/UIImageViewAlignedSwift.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "PSPageControl" -framework "UIImageViewAlignedSwift" 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/UIImageViewAlignedSwift/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 | 0.5.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_UIImageViewAlignedSwift : NSObject 3 | @end 4 | @implementation PodsDummy_UIImageViewAlignedSwift 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift-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/Pods/Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift-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 UIImageViewAlignedSwiftVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char UIImageViewAlignedSwiftVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift.modulemap: -------------------------------------------------------------------------------- 1 | framework module UIImageViewAlignedSwift { 2 | umbrella header "UIImageViewAlignedSwift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/UIImageViewAlignedSwift/UIImageViewAlignedSwift.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/UIImageViewAlignedSwift 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/UIImageViewAlignedSwift 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/UIImageViewAlignedSwift/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-17 Piotr Sochalewski 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Example/Pods/UIImageViewAlignedSwift/README.md: -------------------------------------------------------------------------------- 1 | # UIImageViewAlignedSwift 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/UIImageViewAlignedSwift.svg?style=flat)](http://cocoapods.org/pods/UIImageViewAlignedSwift) 4 | [![License](https://img.shields.io/cocoapods/l/UIImageViewAlignedSwift.svg?style=flat)](http://cocoapods.org/pods/UIImageViewAlignedSwift) 5 | [![Platform](https://img.shields.io/cocoapods/p/UIImageViewAlignedSwift.svg?style=flat)](http://cocoapods.org/pods/UIImageViewAlignedSwift) 6 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 7 | 8 | ## Usage 9 | 10 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 11 | 12 | ## Requirements 13 | * iOS 8.0+, tvOS 9.0+ 14 | * Swift 15 | ** 4.0 16 | ** 3.x (`swift3` branch) 17 | 18 | ## Installation 19 | 20 | ### CocoaPods 21 | 22 | [CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: 23 | 24 | ```bash 25 | $ gem install cocoapods 26 | ``` 27 | 28 | To integrate UIImageViewAlignedSwift into your Xcode project using CocoaPods, specify it in your `Podfile`: 29 | 30 | ```ruby 31 | pod 'UIImageViewAlignedSwift' 32 | ``` 33 | 34 | Then, run the following command: 35 | 36 | ```bash 37 | $ pod install 38 | ``` 39 | 40 | ### Carthage 41 | 42 | [Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. 43 | 44 | You can install Carthage with [Homebrew](http://brew.sh/) using the following command: 45 | 46 | ```bash 47 | $ brew update 48 | $ brew install carthage 49 | ``` 50 | 51 | To integrate UIImageViewAlignedSwift into your Xcode project using Carthage, specify it in your `Cartfile`: 52 | 53 | ```ogdl 54 | github "sochalewski/UIImageViewAlignedSwift" 55 | ``` 56 | 57 | Run `carthage update` to build the framework and drag the built `UIImageViewAlignedSwift.framework` into your Xcode project. 58 | 59 | ## What is it? 60 | 61 | It is a subclass of `UIImageView` that allows you to customize the alignment of the displayed image inside the view's frame. 62 | This works even if the `contentMode` is set to `.scaleAspectFit`, `.scaleAspectFill` or `.scaleToFill`. 63 | 64 | It is rewritten to Swift based on original [UIImageViewAligned by reydanro](https://github.com/reydanro/UIImageViewAligned). 65 | 66 | ## Why a subclass of UIImageView, and not a standard UIView? 67 | 68 | Because there are many cool categories built on top of `UIImageView`. Subclassing a standard `UIView` would mean losing them. 69 | 70 | For example, `AFNetworking`'s async `UIImageView` category works perfectly using this container class, and you don't have to worry about a thing. 71 | 72 | ## How does it work? 73 | 74 | When initialized, `UIImageViewAligned` will create a inner `UIImageView` which will actually hold the image displayed. 75 | The main class then just repositions this inner `UIImageView` to achieve your desired alignment. 76 | 77 | At runtime, you can change the `image`, `contentMode` or `alignment` and the image will reposition itself correctly. 78 | 79 | The `image` property of `UIImageViewAligned` is overwritten to forward the calls to the inner `UIImageView`, so you can just drag and drop into your app. 80 | 81 | ## Author 82 | 83 | Piotr Sochalewski, sochalewski.github.io 84 | 85 | ## License 86 | 87 | UIImageViewAlignedSwift is available under the MIT license. See the LICENSE file for more info. 88 | -------------------------------------------------------------------------------- /Example/Pods/UIImageViewAlignedSwift/UIImageViewAligned.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageViewAligned.swift 3 | // UIImageViewAlignedSwift 4 | // 5 | // Created by Piotr Sochalewski on 08.02.2016. 6 | // MIT License. 7 | // 8 | 9 | import UIKit 10 | 11 | public struct UIImageViewAlignmentMask: OptionSet { 12 | public let rawValue: Int 13 | public init(rawValue: Int) { self.rawValue = rawValue } 14 | 15 | /// The option to align the content to the center. 16 | public static let center = UIImageViewAlignmentMask(rawValue: 0) 17 | /// The option to align the content to the left. 18 | public static let left = UIImageViewAlignmentMask(rawValue: 1) 19 | /// The option to align the content to the right. 20 | public static let right = UIImageViewAlignmentMask(rawValue: 2) 21 | /// The option to align the content to the top. 22 | public static let top = UIImageViewAlignmentMask(rawValue: 4) 23 | /// The option to align the content to the bottom. 24 | public static let bottom = UIImageViewAlignmentMask(rawValue: 8) 25 | /// The option to align the content to the top left. 26 | public static let topLeft: UIImageViewAlignmentMask = [top, left] 27 | /// The option to align the content to the top right. 28 | public static let topRight: UIImageViewAlignmentMask = [top, right] 29 | /// The option to align the content to the bottom left. 30 | public static let bottomLeft: UIImageViewAlignmentMask = [bottom, left] 31 | /// The option to align the content to the bottom right. 32 | public static let bottomRight: UIImageViewAlignmentMask = [bottom, right] 33 | } 34 | 35 | @IBDesignable 36 | open class UIImageViewAligned: UIImageView { 37 | 38 | /** 39 | The technique to use for aligning the image. 40 | 41 | Changes to this property can be animated. 42 | */ 43 | open var alignment: UIImageViewAlignmentMask = .center { 44 | didSet { 45 | guard alignment != oldValue else { return } 46 | updateLayout() 47 | } 48 | } 49 | 50 | open override var image: UIImage? { 51 | set { 52 | realImageView?.image = newValue 53 | setNeedsLayout() 54 | } 55 | get { 56 | return realImageView?.image 57 | } 58 | } 59 | 60 | open override var highlightedImage: UIImage? { 61 | set { 62 | realImageView?.highlightedImage = newValue 63 | setNeedsLayout() 64 | } 65 | get { 66 | return realImageView?.highlightedImage 67 | } 68 | } 69 | 70 | /** 71 | The option to align the content to the top. 72 | 73 | It is available in Interface Builder and should not be set programmatically. Use `alignment` property if you want to set alignment outside Interface Builder. 74 | */ 75 | @IBInspectable open var alignTop: Bool { 76 | set { 77 | setInspectableProperty(newValue, alignment: .top) 78 | } 79 | get { 80 | return getInspectableProperty(.top) 81 | } 82 | } 83 | 84 | /** 85 | The option to align the content to the left. 86 | 87 | It is available in Interface Builder and should not be set programmatically. Use `alignment` property if you want to set alignment outside Interface Builder. 88 | */ 89 | @IBInspectable open var alignLeft: Bool { 90 | set { 91 | setInspectableProperty(newValue, alignment: .left) 92 | } 93 | get { 94 | return getInspectableProperty(.left) 95 | } 96 | } 97 | 98 | /** 99 | The option to align the content to the right. 100 | 101 | It is available in Interface Builder and should not be set programmatically. Use `alignment` property if you want to set alignment outside Interface Builder. 102 | */ 103 | @IBInspectable open var alignRight: Bool { 104 | set { 105 | setInspectableProperty(newValue, alignment: .right) 106 | } 107 | get { 108 | return getInspectableProperty(.right) 109 | } 110 | } 111 | 112 | /** 113 | The option to align the content to the bottom. 114 | 115 | It is available in Interface Builder and should not be set programmatically. Use `alignment` property if you want to set alignment outside Interface Builder. 116 | */ 117 | @IBInspectable open var alignBottom: Bool { 118 | set { 119 | setInspectableProperty(newValue, alignment: .bottom) 120 | } 121 | get { 122 | return getInspectableProperty(.bottom) 123 | } 124 | } 125 | 126 | open override var isHighlighted: Bool { 127 | set { 128 | super.isHighlighted = newValue 129 | layer.contents = nil 130 | } 131 | get { 132 | return super.isHighlighted 133 | } 134 | } 135 | 136 | /** 137 | The inner image view. 138 | 139 | It should be used only when necessary. 140 | Accessible to keep compatibility with the original `UIImageViewAligned`. 141 | */ 142 | private(set) var realImageView: UIImageView? 143 | 144 | private var realContentSize: CGSize { 145 | var size = bounds.size 146 | 147 | guard let image = image else { return size } 148 | 149 | let scaleX = size.width / image.size.width 150 | let scaleY = size.height / image.size.height 151 | 152 | switch contentMode { 153 | case .scaleAspectFill: 154 | let scale = max(scaleX, scaleY) 155 | size = CGSize(width: image.size.width * scale, height: image.size.height * scale) 156 | 157 | case .scaleAspectFit: 158 | let scale = min(scaleX, scaleY) 159 | size = CGSize(width: image.size.width * scale, height: image.size.height * scale) 160 | 161 | case .scaleToFill: 162 | size = CGSize(width: image.size.width * scaleX, height: image.size.height * scaleY) 163 | 164 | default: 165 | size = image.size 166 | } 167 | 168 | return size 169 | } 170 | 171 | public override init(frame: CGRect) { 172 | super.init(frame: frame) 173 | setup() 174 | } 175 | 176 | public override init(image: UIImage?) { 177 | super.init(image: image) 178 | setup(image: image) 179 | } 180 | 181 | public override init(image: UIImage?, highlightedImage: UIImage?) { 182 | super.init(image: image, highlightedImage: highlightedImage) 183 | setup(image: image, highlightedImage: highlightedImage) 184 | } 185 | 186 | public required init?(coder aDecoder: NSCoder) { 187 | super.init(coder: aDecoder) 188 | setup() 189 | } 190 | 191 | open override func layoutSubviews() { 192 | super.layoutSubviews() 193 | layoutIfNeeded() 194 | updateLayout() 195 | } 196 | 197 | open override func didMoveToSuperview() { 198 | super.didMoveToSuperview() 199 | layer.contents = nil 200 | } 201 | 202 | open override func didMoveToWindow() { 203 | super.didMoveToWindow() 204 | layer.contents = nil 205 | } 206 | 207 | private func setup(image: UIImage? = nil, highlightedImage: UIImage? = nil) { 208 | realImageView = UIImageView(image: image ?? super.image, highlightedImage: highlightedImage ?? super.highlightedImage) 209 | realImageView?.frame = bounds 210 | realImageView?.autoresizingMask = [.flexibleWidth, .flexibleHeight] 211 | realImageView?.contentMode = contentMode 212 | addSubview(realImageView!) 213 | } 214 | 215 | private func updateLayout() { 216 | let realSize = realContentSize 217 | var realFrame = CGRect(origin: CGPoint(x: (bounds.size.width - realSize.width) / 2.0, 218 | y: (bounds.size.height - realSize.height) / 2.0), 219 | size: realSize) 220 | 221 | if alignment.contains(.left) { 222 | realFrame.origin.x = 0.0 223 | } else if alignment.contains(.right) { 224 | realFrame.origin.x = bounds.maxX - realFrame.size.width 225 | } 226 | 227 | if alignment.contains(.top) { 228 | realFrame.origin.y = 0.0 229 | } else if alignment.contains(.bottom) { 230 | realFrame.origin.y = bounds.maxY - realFrame.size.height 231 | } 232 | 233 | realImageView?.frame = realFrame.integral 234 | 235 | // Make sure we clear the contents of this container layer, since it refreshes from the image property once in a while. 236 | layer.contents = nil 237 | } 238 | 239 | private func setInspectableProperty(_ newValue: Bool, alignment: UIImageViewAlignmentMask) { 240 | if newValue { 241 | self.alignment.insert(alignment) 242 | } else { 243 | self.alignment.remove(alignment) 244 | } 245 | } 246 | 247 | private func getInspectableProperty(_ alignment: UIImageViewAlignmentMask) -> Bool { 248 | return self.alignment.contains(alignment) 249 | } 250 | } 251 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016-17 Piotr Sochalewski 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /PSPageControl.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "PSPageControl" 3 | s.version = "0.3.2" 4 | s.summary = "Easy parallax effect in UIPageControl" 5 | s.description = "Easy parallax effect in UIPageControl in Swift." 6 | s.homepage = "https://github.com/sochalewski/PSPageControl" 7 | s.license = 'MIT' 8 | s.author = { "Piotr Sochalewski" => "sochalewski@gmail.com" } 9 | s.source = { :git => "https://github.com/sochalewski/PSPageControl.git", :tag => s.version.to_s } 10 | s.platform = :ios, '8.0' 11 | s.requires_arc = true 12 | s.source_files = '*.swift' 13 | s.frameworks = 'UIKit' 14 | s.dependency 'UIImageViewAlignedSwift', '~> 0.5.0' 15 | end 16 | -------------------------------------------------------------------------------- /PSPageControl.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PSPageControl.swift 3 | // PSPageControl 4 | // 5 | // Originaly created by Piotr Sochalewski on 14.08.2015. 6 | // Rewritten to Swift by Piotr Sochalewski on 05.02.2016. 7 | // 8 | 9 | import AVFoundation 10 | import UIKit 11 | import UIImageViewAlignedSwift 12 | 13 | public protocol PSPageControlDelegate: class { 14 | /** 15 | The delegate method called when the current index did change. 16 | - parameter index: The current index. 17 | */ 18 | func didChange(index: Int) 19 | } 20 | 21 | open class PSPageControl: UIView { 22 | 23 | /// The PSPageControl's delegate protocol. 24 | open weak var delegate: PSPageControlDelegate? 25 | 26 | /// The image shown in the background. It should be horizontal with proper ratio and high resolution. 27 | open var backgroundPicture: UIImage? { 28 | didSet { 29 | guard let backgroundPicture = backgroundPicture else { return } 30 | 31 | let size = AVMakeRect(aspectRatio: backgroundPicture.size, 32 | insideRect: CGRect(x: 0.0, y: 0.0, width: CGFloat.greatestFiniteMagnitude, height: frame.height)).size 33 | UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 34 | backgroundPicture.draw(in: CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)) 35 | let image = UIGraphicsGetImageFromCurrentImageContext() 36 | UIGraphicsEndImageContext() 37 | 38 | background.image = image 39 | } 40 | } 41 | 42 | /// The array of `UIView`s to be shown by page control. 43 | open var views: [UIView]? { 44 | didSet { 45 | subviews.filter( { !subviewsNotAllowedToRemoveFromSuperview.contains($0) } ).forEach { 46 | $0.removeFromSuperview() 47 | } 48 | 49 | guard let views = views else { pageControl.numberOfPages = 0; return } 50 | 51 | for (index, view) in views.enumerated() { 52 | view.frame = CGRect(x: CGFloat(index) * frame.width, y: 0.0, width: frame.width, height: frame.height) 53 | addSubview(view) 54 | } 55 | 56 | pageControl.numberOfPages = views.count 57 | } 58 | } 59 | 60 | /// Offset per page in pixels. Default is `40`. 61 | open var offsetPerPage: UInt = 40 62 | 63 | /// The tint color to be used for the page indicator. 64 | open var pageIndicatorTintColor: UIColor? { 65 | set { 66 | pageControl.pageIndicatorTintColor = newValue 67 | } 68 | get { 69 | return pageControl.pageIndicatorTintColor 70 | } 71 | } 72 | 73 | /// The tint color to be used for the current page indicator. 74 | open var currentPageIndicatorTintColor: UIColor? { 75 | set { 76 | pageControl.currentPageIndicatorTintColor = newValue 77 | } 78 | get { 79 | return pageControl.currentPageIndicatorTintColor 80 | } 81 | } 82 | 83 | /** 84 | The frame rectangle, which describes the page indicators' location and size in its superview’s coordinate system. 85 | 86 | Changes to this property can be animated. 87 | */ 88 | open var pageIndicatorFrame: CGRect { 89 | get { 90 | return pageControl.frame 91 | } 92 | set { 93 | pageControl.frame = newValue 94 | } 95 | } 96 | 97 | private var subviewsNotAllowedToRemoveFromSuperview = [UIView]() 98 | private var background = UIImageViewAligned() 99 | private var pageControl = UIPageControl() 100 | private var touchPosition: CGPoint? 101 | private var backgroundLayerFrameOrigin: CGPoint? 102 | /// The current page. 103 | private(set) var currentViewIndex = 0 { 104 | didSet { delegate?.didChange(index: currentViewIndex) } 105 | } 106 | 107 | public required init?(coder aDecoder: NSCoder) { 108 | super.init(coder: aDecoder) 109 | setup() 110 | } 111 | 112 | public override init(frame: CGRect) { 113 | super.init(frame: frame) 114 | setup() 115 | } 116 | 117 | open override func layoutSubviews() { 118 | super.layoutSubviews() 119 | 120 | // Background image 121 | background.frame = frame 122 | background.layer.frame = CGRect(x: CGFloat(-currentViewIndex - 1) * CGFloat(offsetPerPage), y: 0.0, width: background.layer.frame.width, height: background.layer.frame.height) 123 | backgroundLayerFrameOrigin = background.layer.frame.origin 124 | 125 | // Page control 126 | pageControl.frame = CGRect(x: 10.0, y: frame.height - 50.0, width: frame.width - 20.0, height: 40.0) 127 | } 128 | 129 | // MARK: - Views 130 | 131 | /** 132 | Shows a view with a given index. 133 | 134 | - parameter index: The index of page that should be shown by the receiver as a white dot. The property value is an integer specifying a page shown minus one; thus a value of indicates the first page. Values outside the possible range are pinned to either 0 or numberOfPages minus 1. 135 | - returns: A Boolean value that determines whether the function finished with success. 136 | */ 137 | public func showView(withIndex index: Int) -> Bool { 138 | guard let views = views, index < views.count, index >= 0 else { return false } 139 | showView(withIndex: index, setCurrentPage: true) 140 | return true 141 | } 142 | 143 | private func setup() { 144 | // Background image 145 | background.contentMode = .scaleAspectFill 146 | background.alignment = .left 147 | addSubview(background) 148 | 149 | // Page control 150 | addSubview(pageControl) 151 | 152 | // Array of views not allowed to remove from superview 153 | subviewsNotAllowedToRemoveFromSuperview = [background, pageControl] 154 | } 155 | 156 | private func showView(withIndex index: Int, setCurrentPage currentPage: Bool) { 157 | // Background image 158 | if index != currentViewIndex { 159 | let newX = CGFloat(-index - 1) * CGFloat(offsetPerPage) 160 | backgroundLayerFrameOrigin = CGPoint(x: newX, y: 0.0) 161 | } 162 | 163 | let duration = (index == currentViewIndex) ? 0.3 : 0.2 164 | currentViewIndex = index 165 | UIView.animate(withDuration: duration) { 166 | self.background.layer.frame = CGRect(x: self.backgroundLayerFrameOrigin!.x, 167 | y: 0.0, 168 | width: self.background.layer.frame.width, 169 | height: self.background.layer.frame.height) 170 | } 171 | 172 | // Views 173 | UIView.animate(withDuration: 0.2, animations: { 174 | // Center (show) view with current index 175 | let view = self.views![index] 176 | view.frame = CGRect(x: 0.0, y: 0.0, width: self.frame.width, height: self.frame.height) 177 | 178 | // Move to the left views with index lower than >index< 179 | // and to the right views with index higher than >index< 180 | for (i, view) in self.views!.enumerated() { 181 | let newX: CGFloat 182 | switch i { 183 | case let x where x < index: 184 | newX = CGFloat(-(index - i)) * self.frame.width 185 | case let x where x > index: 186 | newX = CGFloat(i - index) * self.frame.width 187 | default: 188 | newX = 0.0 189 | } 190 | 191 | view.frame.origin = CGPoint(x: newX, y: 0.0) 192 | } 193 | }) { _ in 194 | if currentPage { 195 | self.pageControl.currentPage = index 196 | } 197 | } 198 | } 199 | 200 | // MARK: - Touches 201 | 202 | open override func touchesBegan(_ touches: Set, with event: UIEvent?) { 203 | super.touchesBegan(touches, with: event) 204 | 205 | touchPosition = touches.first?.location(in: self) 206 | } 207 | 208 | open override func touchesMoved(_ touches: Set, with event: UIEvent?) { 209 | super.touchesMoved(touches, with: event) 210 | 211 | let differenceInTouchXAxis = difference(between: touches) 212 | 213 | UIView.animate(withDuration: 0.1) { 214 | for (index, view) in self.views!.enumerated() { 215 | view.frame = CGRect(x: CGFloat(index - self.currentViewIndex) * view.frame.width + CGFloat(differenceInTouchXAxis), y: 0.0, 216 | width: self.background.layer.frame.width, height: self.background.layer.frame.height) 217 | } 218 | let x = CGFloat(-self.currentViewIndex - 1) * CGFloat(self.offsetPerPage) 219 | let deltaX = (CGFloat(differenceInTouchXAxis) / self.frame.width) * CGFloat(self.offsetPerPage) 220 | self.background.layer.frame = CGRect(x: x + deltaX, y: 0.0, width: self.background.layer.frame.width, height: self.background.layer.frame.height) 221 | } 222 | } 223 | 224 | open override func touchesEnded(_ touches: Set, with event: UIEvent?) { 225 | super.touchesEnded(touches, with: event) 226 | 227 | let differenceInTouchXAxis = difference(between: touches) 228 | 229 | switch differenceInTouchXAxis { 230 | case let x where x < -100: 231 | showView(withIndex: currentViewIndex + 1 >= views!.count ? currentViewIndex : currentViewIndex + 1, setCurrentPage: true) 232 | case let x where x > 100: 233 | showView(withIndex: currentViewIndex < 1 ? currentViewIndex : currentViewIndex - 1, setCurrentPage: true) 234 | default: 235 | showView(withIndex: currentViewIndex, setCurrentPage: false) 236 | } 237 | } 238 | 239 | private func difference(between touches: Set) -> Int { 240 | let movingPosition = touches.first?.location(in: self) 241 | 242 | return Int(movingPosition!.x - touchPosition!.x) 243 | } 244 | } 245 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PSPageControl 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/PSPageControl.svg?style=flat)](http://cocoapods.org/pods/PSPageControl) 4 | [![License](https://img.shields.io/cocoapods/l/PSPageControl.svg?style=flat)](http://cocoapods.org/pods/PSPageControl) 5 | [![Platform](https://img.shields.io/cocoapods/p/PSPageControl.svg?style=flat)](http://cocoapods.org/pods/PSPageControl) 6 | 7 | ## Usage 8 | 9 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 10 | 11 | ## Requirements 12 | 13 | * iOS 8.0+, tvOS 9.0+ 14 | * Swift 15 | * 4.0 16 | * 3.x (`swift3` branch) 17 | 18 | ## Installation 19 | 20 | PSPageControl is available through [CocoaPods](http://cocoapods.org). To install 21 | it, simply add the following line to your Podfile: 22 | 23 | ```ruby 24 | pod "PSPageControl" 25 | ``` 26 | 27 | ## Demo 28 |

29 | PSPageControl example
30 | GFY here 31 |

32 | 33 | ## Usage 34 | First at all import library to your view controller. 35 | ```swift 36 | import PSPageControl 37 | ``` 38 | 39 | Then add a `UIView` in your storyboard/xib (or create view programmatically), change its class to `PSPageControl` and drag and drop to create an `IBOutlet`. Next add proper code to your `viewDidLoad` or another place where you need it. 40 | ```swift 41 | override func viewDidLoad() { 42 | super.viewDidLoad() 43 | 44 | pageControlView.backgroundPicture = UIImage(named: "Background") 45 | pageControlView.offsetPerPageInPixels = 50 46 | 47 | // Prepare views to add 48 | var views = [UIView]() 49 | for index in 1...5 { 50 | let view = UIView(frame: self.view.frame) 51 | 52 | let label = UILabel(frame: CGRect(x: self.view.frame.width / 2.0 - 60.0, y: 40.0, width: 120.0, height: 30.0)) 53 | label.textColor = .white 54 | label.font = UIFont(name: "HelveticaNeue-Bold", size: 24.0) 55 | label.textAlignment = .center 56 | label.text = "View #\(index)" 57 | 58 | view.addSubview(label) 59 | 60 | views.append(view) 61 | } 62 | 63 | pageControlView.views = views 64 | } 65 | ``` 66 | 67 | More complex function goes here. 68 | ```swift 69 | override func viewDidLoad() { 70 | super.viewDidLoad() 71 | // Do any additional setup after loading the view, typically from a nib. 72 | 73 | let loremIpsum = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. Quisque semper justo at risus.", 74 | "Donec venenatis, turpis vel hendrerit interdum, dui ligula ultricies purus, sed posuere libero dui id orci.", 75 | "Nam congue, pede vitae dapibus aliquet, elit magna vulputate arcu, vel tempus metus leo non est. Etiam sit amet lectus quis est congue mollis. Phasellus congue lacus eget neque.", 76 | "Phasellus ornare, ante vitae consectetuer consequat, purus sapien ultricies dolor, et mollis pede metus eget nisi. Praesent sodales velit quis augue.", 77 | "Cras suscipit, urna at aliquam rhoncus, urna quam viverra nisi, in interdum massa nibh nec erat."] 78 | 79 | pageControl.backgroundPicture = UIImage(named: "Background") 80 | pageControl.offsetPerPage = 40 81 | 82 | // Prepare views to add 83 | var views = [UIView]() 84 | 85 | for index in 1...5 { 86 | let view = UIView(frame: self.view.frame) 87 | 88 | let label = UILabel(frame: CGRect(x: self.view.frame.width / 2.0 - 60.0, y: 40.0, width: 120.0, height: 30.0)) 89 | label.textColor = .white 90 | label.font = UIFont(name: "HelveticaNeue-Bold", size: 24.0) 91 | label.textAlignment = .center 92 | label.text = "View #\(index)" 93 | 94 | let description = UILabel(frame: CGRect(x: 30.0, y: 80.0, width: self.view.frame.width - 60.0, height: self.view.frame.height - 100.0)) 95 | description.lineBreakMode = .byWordWrapping 96 | description.numberOfLines = 0 97 | description.textColor = .white 98 | description.font = UIFont(name: "HelveticaNeue-Light", size: 20.0) 99 | description.textAlignment = .center 100 | description.text = loremIpsum[index - 1] 101 | 102 | view.addSubview(label) 103 | view.addSubview(description) 104 | 105 | views.append(view) 106 | } 107 | 108 | pageControl.views = views 109 | } 110 | ``` 111 | 112 | ## Properties 113 | **PSPageControl** has a few variables that let you configure the library. 114 | 115 | * `backgroundPicture` is an image shown in the background. Remember that it should be horizontal with proper ratio and high resolution. 116 | * `views` is an array of `UIView`s to be shown by page control. 117 | * `offsetPerPage` is an offset used swipe by swipe from one to another view. Default is `40`. 118 | * `pageIndicatorTintColor` is a `UIColor` used by inactive page control indicator. 119 | * `currentPageIndicatorTintColor` is a `UIColor` used by active page control indicator. 120 | 121 | ## Author 122 | 123 | Piotr Sochalewski, sochalewski.github.io 124 | 125 | ## License 126 | 127 | PSPageControl is available under the MIT license. See the LICENSE file for more info. 128 | --------------------------------------------------------------------------------