├── 1.gif ├── 2.gif ├── JYTagView.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── Jat.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── Jat.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── JYTagView.xcscheme │ └── xcschememanagement.plist ├── JYTagView.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── Jat.xcuserdatad │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── JYTagView ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ └── LaunchScreen.storyboard ├── Info.plist ├── Tag │ ├── JYTagModel.swift │ ├── JYTagView.swift │ ├── JYTagViewCell.swift │ ├── UIImage+RoundedCorner.swift │ ├── UIView+RoundedCorner.swift │ └── tags.json └── ViewController.swift ├── JYTagViewTests ├── Info.plist └── JYTagViewTests.swift ├── JYTagViewUITests ├── Info.plist └── JYTagViewUITests.swift ├── Podfile.lock ├── Pods ├── Headers │ └── Public │ │ └── Reveal-iOS-SDK │ │ └── Reveal │ │ ├── IBANetServiceTypes.h │ │ ├── IBARevealLoader.h │ │ ├── IBARevealLogger.h │ │ └── Reveal.h ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── Jat.xcuserdatad │ │ └── xcschemes │ │ ├── Pods.xcscheme │ │ └── xcschememanagement.plist ├── Reveal-iOS-SDK │ └── Reveal-Framework-iOS-1.6.2 │ │ └── Reveal.framework │ │ ├── Headers │ │ ├── Reveal │ │ └── Versions │ │ ├── A │ │ ├── Headers │ │ │ ├── IBANetServiceTypes.h │ │ │ ├── IBARevealLoader.h │ │ │ ├── IBARevealLogger.h │ │ │ └── Reveal.h │ │ └── Reveal │ │ └── Current └── Target Support Files │ └── Pods │ ├── Info.plist │ ├── Pods-acknowledgements.markdown │ ├── Pods-acknowledgements.plist │ ├── Pods-dummy.m │ ├── Pods-frameworks.sh │ ├── Pods-resources.sh │ ├── Pods-umbrella.h │ ├── Pods.debug.xcconfig │ ├── Pods.modulemap │ └── Pods.release.xcconfig ├── README.md └── podfile /1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iDevOrz/TagsView/32f4d42927052f803300e6232e1344d8d7ce44cc/1.gif -------------------------------------------------------------------------------- /2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iDevOrz/TagsView/32f4d42927052f803300e6232e1344d8d7ce44cc/2.gif -------------------------------------------------------------------------------- /JYTagView.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3A8EC77071FA66F0FCF2FFB8 /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F0B14D882491E136B425E093 /* Pods.framework */; }; 11 | 4521EC281CB162FD00A0DA5B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC271CB162FD00A0DA5B /* AppDelegate.swift */; }; 12 | 4521EC2A1CB162FD00A0DA5B /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC291CB162FD00A0DA5B /* ViewController.swift */; }; 13 | 4521EC2F1CB162FD00A0DA5B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4521EC2E1CB162FD00A0DA5B /* Assets.xcassets */; }; 14 | 4521EC321CB162FD00A0DA5B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4521EC301CB162FD00A0DA5B /* LaunchScreen.storyboard */; }; 15 | 4521EC3D1CB162FD00A0DA5B /* JYTagViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC3C1CB162FD00A0DA5B /* JYTagViewTests.swift */; }; 16 | 4521EC481CB162FD00A0DA5B /* JYTagViewUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC471CB162FD00A0DA5B /* JYTagViewUITests.swift */; }; 17 | 4521EC571CB1780300A0DA5B /* JYTagModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC561CB1780300A0DA5B /* JYTagModel.swift */; }; 18 | 4521EC591CB1786300A0DA5B /* JYTagView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC581CB1786200A0DA5B /* JYTagView.swift */; }; 19 | 4521EC5B1CB178C100A0DA5B /* JYTagViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4521EC5A1CB178C100A0DA5B /* JYTagViewCell.swift */; }; 20 | 454145801CB6A85B00F64225 /* UIImage+RoundedCorner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4541457F1CB6A85B00F64225 /* UIImage+RoundedCorner.swift */; }; 21 | 454145821CB6B19500F64225 /* UIView+RoundedCorner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 454145811CB6B19500F64225 /* UIView+RoundedCorner.swift */; }; 22 | 454145841CB8C7B400F64225 /* tags.json in Resources */ = {isa = PBXBuildFile; fileRef = 454145831CB8C7B400F64225 /* tags.json */; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | 4521EC391CB162FD00A0DA5B /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 4521EC1C1CB162FD00A0DA5B /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 4521EC231CB162FD00A0DA5B; 31 | remoteInfo = JYTagView; 32 | }; 33 | 4521EC441CB162FD00A0DA5B /* PBXContainerItemProxy */ = { 34 | isa = PBXContainerItemProxy; 35 | containerPortal = 4521EC1C1CB162FD00A0DA5B /* Project object */; 36 | proxyType = 1; 37 | remoteGlobalIDString = 4521EC231CB162FD00A0DA5B; 38 | remoteInfo = JYTagView; 39 | }; 40 | /* End PBXContainerItemProxy section */ 41 | 42 | /* Begin PBXFileReference section */ 43 | 17BFC398F81A660C4DB05EDE /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 44 | 4521EC241CB162FD00A0DA5B /* JYTagView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JYTagView.app; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 4521EC271CB162FD00A0DA5B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 46 | 4521EC291CB162FD00A0DA5B /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 47 | 4521EC2E1CB162FD00A0DA5B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 48 | 4521EC311CB162FD00A0DA5B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 49 | 4521EC331CB162FD00A0DA5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50 | 4521EC381CB162FD00A0DA5B /* JYTagViewTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JYTagViewTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 4521EC3C1CB162FD00A0DA5B /* JYTagViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JYTagViewTests.swift; sourceTree = ""; }; 52 | 4521EC3E1CB162FD00A0DA5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 53 | 4521EC431CB162FD00A0DA5B /* JYTagViewUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JYTagViewUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 4521EC471CB162FD00A0DA5B /* JYTagViewUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JYTagViewUITests.swift; sourceTree = ""; }; 55 | 4521EC491CB162FD00A0DA5B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | 4521EC561CB1780300A0DA5B /* JYTagModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JYTagModel.swift; sourceTree = ""; }; 57 | 4521EC581CB1786200A0DA5B /* JYTagView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JYTagView.swift; sourceTree = ""; }; 58 | 4521EC5A1CB178C100A0DA5B /* JYTagViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JYTagViewCell.swift; sourceTree = ""; }; 59 | 4541457F1CB6A85B00F64225 /* UIImage+RoundedCorner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+RoundedCorner.swift"; sourceTree = ""; }; 60 | 454145811CB6B19500F64225 /* UIView+RoundedCorner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIView+RoundedCorner.swift"; sourceTree = ""; }; 61 | 454145831CB8C7B400F64225 /* tags.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = tags.json; sourceTree = ""; }; 62 | 7AB3AC69B896558AA72C91D7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 63 | F0B14D882491E136B425E093 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64 | /* End PBXFileReference section */ 65 | 66 | /* Begin PBXFrameworksBuildPhase section */ 67 | 4521EC211CB162FD00A0DA5B /* Frameworks */ = { 68 | isa = PBXFrameworksBuildPhase; 69 | buildActionMask = 2147483647; 70 | files = ( 71 | 3A8EC77071FA66F0FCF2FFB8 /* Pods.framework in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | 4521EC351CB162FD00A0DA5B /* Frameworks */ = { 76 | isa = PBXFrameworksBuildPhase; 77 | buildActionMask = 2147483647; 78 | files = ( 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | 4521EC401CB162FD00A0DA5B /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXFrameworksBuildPhase section */ 90 | 91 | /* Begin PBXGroup section */ 92 | 4521EC1B1CB162FD00A0DA5B = { 93 | isa = PBXGroup; 94 | children = ( 95 | 4521EC261CB162FD00A0DA5B /* JYTagView */, 96 | 4521EC3B1CB162FD00A0DA5B /* JYTagViewTests */, 97 | 4521EC461CB162FD00A0DA5B /* JYTagViewUITests */, 98 | 4521EC251CB162FD00A0DA5B /* Products */, 99 | 6FE2461DA71102ACFB259063 /* Pods */, 100 | A98354C04DBCFD389BECB1EA /* Frameworks */, 101 | ); 102 | sourceTree = ""; 103 | }; 104 | 4521EC251CB162FD00A0DA5B /* Products */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 4521EC241CB162FD00A0DA5B /* JYTagView.app */, 108 | 4521EC381CB162FD00A0DA5B /* JYTagViewTests.xctest */, 109 | 4521EC431CB162FD00A0DA5B /* JYTagViewUITests.xctest */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | 4521EC261CB162FD00A0DA5B /* JYTagView */ = { 115 | isa = PBXGroup; 116 | children = ( 117 | 4521EC551CB177CD00A0DA5B /* Tag */, 118 | 4521EC271CB162FD00A0DA5B /* AppDelegate.swift */, 119 | 4521EC291CB162FD00A0DA5B /* ViewController.swift */, 120 | 4521EC2E1CB162FD00A0DA5B /* Assets.xcassets */, 121 | 4521EC301CB162FD00A0DA5B /* LaunchScreen.storyboard */, 122 | 4521EC331CB162FD00A0DA5B /* Info.plist */, 123 | ); 124 | path = JYTagView; 125 | sourceTree = ""; 126 | }; 127 | 4521EC3B1CB162FD00A0DA5B /* JYTagViewTests */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 4521EC3C1CB162FD00A0DA5B /* JYTagViewTests.swift */, 131 | 4521EC3E1CB162FD00A0DA5B /* Info.plist */, 132 | ); 133 | path = JYTagViewTests; 134 | sourceTree = ""; 135 | }; 136 | 4521EC461CB162FD00A0DA5B /* JYTagViewUITests */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 4521EC471CB162FD00A0DA5B /* JYTagViewUITests.swift */, 140 | 4521EC491CB162FD00A0DA5B /* Info.plist */, 141 | ); 142 | path = JYTagViewUITests; 143 | sourceTree = ""; 144 | }; 145 | 4521EC551CB177CD00A0DA5B /* Tag */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 454145831CB8C7B400F64225 /* tags.json */, 149 | 4521EC561CB1780300A0DA5B /* JYTagModel.swift */, 150 | 4521EC581CB1786200A0DA5B /* JYTagView.swift */, 151 | 4521EC5A1CB178C100A0DA5B /* JYTagViewCell.swift */, 152 | 4541457F1CB6A85B00F64225 /* UIImage+RoundedCorner.swift */, 153 | 454145811CB6B19500F64225 /* UIView+RoundedCorner.swift */, 154 | ); 155 | path = Tag; 156 | sourceTree = ""; 157 | }; 158 | 6FE2461DA71102ACFB259063 /* Pods */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 7AB3AC69B896558AA72C91D7 /* Pods.debug.xcconfig */, 162 | 17BFC398F81A660C4DB05EDE /* Pods.release.xcconfig */, 163 | ); 164 | name = Pods; 165 | sourceTree = ""; 166 | }; 167 | A98354C04DBCFD389BECB1EA /* Frameworks */ = { 168 | isa = PBXGroup; 169 | children = ( 170 | F0B14D882491E136B425E093 /* Pods.framework */, 171 | ); 172 | name = Frameworks; 173 | sourceTree = ""; 174 | }; 175 | /* End PBXGroup section */ 176 | 177 | /* Begin PBXNativeTarget section */ 178 | 4521EC231CB162FD00A0DA5B /* JYTagView */ = { 179 | isa = PBXNativeTarget; 180 | buildConfigurationList = 4521EC4C1CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagView" */; 181 | buildPhases = ( 182 | C51B327FA25652E04FF4BDCB /* Check Pods Manifest.lock */, 183 | 4521EC201CB162FD00A0DA5B /* Sources */, 184 | 4521EC211CB162FD00A0DA5B /* Frameworks */, 185 | 4521EC221CB162FD00A0DA5B /* Resources */, 186 | 9448916082B80097412FA436 /* Embed Pods Frameworks */, 187 | BC565E45A9791A9249081504 /* Copy Pods Resources */, 188 | ); 189 | buildRules = ( 190 | ); 191 | dependencies = ( 192 | ); 193 | name = JYTagView; 194 | productName = JYTagView; 195 | productReference = 4521EC241CB162FD00A0DA5B /* JYTagView.app */; 196 | productType = "com.apple.product-type.application"; 197 | }; 198 | 4521EC371CB162FD00A0DA5B /* JYTagViewTests */ = { 199 | isa = PBXNativeTarget; 200 | buildConfigurationList = 4521EC4F1CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagViewTests" */; 201 | buildPhases = ( 202 | 4521EC341CB162FD00A0DA5B /* Sources */, 203 | 4521EC351CB162FD00A0DA5B /* Frameworks */, 204 | 4521EC361CB162FD00A0DA5B /* Resources */, 205 | ); 206 | buildRules = ( 207 | ); 208 | dependencies = ( 209 | 4521EC3A1CB162FD00A0DA5B /* PBXTargetDependency */, 210 | ); 211 | name = JYTagViewTests; 212 | productName = JYTagViewTests; 213 | productReference = 4521EC381CB162FD00A0DA5B /* JYTagViewTests.xctest */; 214 | productType = "com.apple.product-type.bundle.unit-test"; 215 | }; 216 | 4521EC421CB162FD00A0DA5B /* JYTagViewUITests */ = { 217 | isa = PBXNativeTarget; 218 | buildConfigurationList = 4521EC521CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagViewUITests" */; 219 | buildPhases = ( 220 | 4521EC3F1CB162FD00A0DA5B /* Sources */, 221 | 4521EC401CB162FD00A0DA5B /* Frameworks */, 222 | 4521EC411CB162FD00A0DA5B /* Resources */, 223 | ); 224 | buildRules = ( 225 | ); 226 | dependencies = ( 227 | 4521EC451CB162FD00A0DA5B /* PBXTargetDependency */, 228 | ); 229 | name = JYTagViewUITests; 230 | productName = JYTagViewUITests; 231 | productReference = 4521EC431CB162FD00A0DA5B /* JYTagViewUITests.xctest */; 232 | productType = "com.apple.product-type.bundle.ui-testing"; 233 | }; 234 | /* End PBXNativeTarget section */ 235 | 236 | /* Begin PBXProject section */ 237 | 4521EC1C1CB162FD00A0DA5B /* Project object */ = { 238 | isa = PBXProject; 239 | attributes = { 240 | LastSwiftUpdateCheck = 0730; 241 | LastUpgradeCheck = 1020; 242 | ORGANIZATIONNAME = "张建宇"; 243 | TargetAttributes = { 244 | 4521EC231CB162FD00A0DA5B = { 245 | CreatedOnToolsVersion = 7.3; 246 | DevelopmentTeam = U8U5954S52; 247 | }; 248 | 4521EC371CB162FD00A0DA5B = { 249 | CreatedOnToolsVersion = 7.3; 250 | DevelopmentTeam = U8U5954S52; 251 | TestTargetID = 4521EC231CB162FD00A0DA5B; 252 | }; 253 | 4521EC421CB162FD00A0DA5B = { 254 | CreatedOnToolsVersion = 7.3; 255 | DevelopmentTeam = U8U5954S52; 256 | TestTargetID = 4521EC231CB162FD00A0DA5B; 257 | }; 258 | }; 259 | }; 260 | buildConfigurationList = 4521EC1F1CB162FD00A0DA5B /* Build configuration list for PBXProject "JYTagView" */; 261 | compatibilityVersion = "Xcode 3.2"; 262 | developmentRegion = en; 263 | hasScannedForEncodings = 0; 264 | knownRegions = ( 265 | en, 266 | Base, 267 | ); 268 | mainGroup = 4521EC1B1CB162FD00A0DA5B; 269 | productRefGroup = 4521EC251CB162FD00A0DA5B /* Products */; 270 | projectDirPath = ""; 271 | projectRoot = ""; 272 | targets = ( 273 | 4521EC231CB162FD00A0DA5B /* JYTagView */, 274 | 4521EC371CB162FD00A0DA5B /* JYTagViewTests */, 275 | 4521EC421CB162FD00A0DA5B /* JYTagViewUITests */, 276 | ); 277 | }; 278 | /* End PBXProject section */ 279 | 280 | /* Begin PBXResourcesBuildPhase section */ 281 | 4521EC221CB162FD00A0DA5B /* Resources */ = { 282 | isa = PBXResourcesBuildPhase; 283 | buildActionMask = 2147483647; 284 | files = ( 285 | 454145841CB8C7B400F64225 /* tags.json in Resources */, 286 | 4521EC321CB162FD00A0DA5B /* LaunchScreen.storyboard in Resources */, 287 | 4521EC2F1CB162FD00A0DA5B /* Assets.xcassets in Resources */, 288 | ); 289 | runOnlyForDeploymentPostprocessing = 0; 290 | }; 291 | 4521EC361CB162FD00A0DA5B /* Resources */ = { 292 | isa = PBXResourcesBuildPhase; 293 | buildActionMask = 2147483647; 294 | files = ( 295 | ); 296 | runOnlyForDeploymentPostprocessing = 0; 297 | }; 298 | 4521EC411CB162FD00A0DA5B /* Resources */ = { 299 | isa = PBXResourcesBuildPhase; 300 | buildActionMask = 2147483647; 301 | files = ( 302 | ); 303 | runOnlyForDeploymentPostprocessing = 0; 304 | }; 305 | /* End PBXResourcesBuildPhase section */ 306 | 307 | /* Begin PBXShellScriptBuildPhase section */ 308 | 9448916082B80097412FA436 /* Embed Pods Frameworks */ = { 309 | isa = PBXShellScriptBuildPhase; 310 | buildActionMask = 2147483647; 311 | files = ( 312 | ); 313 | inputPaths = ( 314 | ); 315 | name = "Embed Pods Frameworks"; 316 | outputPaths = ( 317 | ); 318 | runOnlyForDeploymentPostprocessing = 0; 319 | shellPath = /bin/sh; 320 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n"; 321 | showEnvVarsInLog = 0; 322 | }; 323 | BC565E45A9791A9249081504 /* Copy Pods Resources */ = { 324 | isa = PBXShellScriptBuildPhase; 325 | buildActionMask = 2147483647; 326 | files = ( 327 | ); 328 | inputPaths = ( 329 | ); 330 | name = "Copy Pods Resources"; 331 | outputPaths = ( 332 | ); 333 | runOnlyForDeploymentPostprocessing = 0; 334 | shellPath = /bin/sh; 335 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 336 | showEnvVarsInLog = 0; 337 | }; 338 | C51B327FA25652E04FF4BDCB /* Check Pods Manifest.lock */ = { 339 | isa = PBXShellScriptBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | ); 343 | inputPaths = ( 344 | ); 345 | name = "Check Pods Manifest.lock"; 346 | outputPaths = ( 347 | ); 348 | runOnlyForDeploymentPostprocessing = 0; 349 | shellPath = /bin/sh; 350 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 351 | showEnvVarsInLog = 0; 352 | }; 353 | /* End PBXShellScriptBuildPhase section */ 354 | 355 | /* Begin PBXSourcesBuildPhase section */ 356 | 4521EC201CB162FD00A0DA5B /* Sources */ = { 357 | isa = PBXSourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | 454145801CB6A85B00F64225 /* UIImage+RoundedCorner.swift in Sources */, 361 | 454145821CB6B19500F64225 /* UIView+RoundedCorner.swift in Sources */, 362 | 4521EC591CB1786300A0DA5B /* JYTagView.swift in Sources */, 363 | 4521EC571CB1780300A0DA5B /* JYTagModel.swift in Sources */, 364 | 4521EC5B1CB178C100A0DA5B /* JYTagViewCell.swift in Sources */, 365 | 4521EC2A1CB162FD00A0DA5B /* ViewController.swift in Sources */, 366 | 4521EC281CB162FD00A0DA5B /* AppDelegate.swift in Sources */, 367 | ); 368 | runOnlyForDeploymentPostprocessing = 0; 369 | }; 370 | 4521EC341CB162FD00A0DA5B /* Sources */ = { 371 | isa = PBXSourcesBuildPhase; 372 | buildActionMask = 2147483647; 373 | files = ( 374 | 4521EC3D1CB162FD00A0DA5B /* JYTagViewTests.swift in Sources */, 375 | ); 376 | runOnlyForDeploymentPostprocessing = 0; 377 | }; 378 | 4521EC3F1CB162FD00A0DA5B /* Sources */ = { 379 | isa = PBXSourcesBuildPhase; 380 | buildActionMask = 2147483647; 381 | files = ( 382 | 4521EC481CB162FD00A0DA5B /* JYTagViewUITests.swift in Sources */, 383 | ); 384 | runOnlyForDeploymentPostprocessing = 0; 385 | }; 386 | /* End PBXSourcesBuildPhase section */ 387 | 388 | /* Begin PBXTargetDependency section */ 389 | 4521EC3A1CB162FD00A0DA5B /* PBXTargetDependency */ = { 390 | isa = PBXTargetDependency; 391 | target = 4521EC231CB162FD00A0DA5B /* JYTagView */; 392 | targetProxy = 4521EC391CB162FD00A0DA5B /* PBXContainerItemProxy */; 393 | }; 394 | 4521EC451CB162FD00A0DA5B /* PBXTargetDependency */ = { 395 | isa = PBXTargetDependency; 396 | target = 4521EC231CB162FD00A0DA5B /* JYTagView */; 397 | targetProxy = 4521EC441CB162FD00A0DA5B /* PBXContainerItemProxy */; 398 | }; 399 | /* End PBXTargetDependency section */ 400 | 401 | /* Begin PBXVariantGroup section */ 402 | 4521EC301CB162FD00A0DA5B /* LaunchScreen.storyboard */ = { 403 | isa = PBXVariantGroup; 404 | children = ( 405 | 4521EC311CB162FD00A0DA5B /* Base */, 406 | ); 407 | name = LaunchScreen.storyboard; 408 | sourceTree = ""; 409 | }; 410 | /* End PBXVariantGroup section */ 411 | 412 | /* Begin XCBuildConfiguration section */ 413 | 4521EC4A1CB162FD00A0DA5B /* Debug */ = { 414 | isa = XCBuildConfiguration; 415 | buildSettings = { 416 | ALWAYS_SEARCH_USER_PATHS = NO; 417 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 418 | CLANG_ANALYZER_NONNULL = YES; 419 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 420 | CLANG_CXX_LIBRARY = "libc++"; 421 | CLANG_ENABLE_MODULES = YES; 422 | CLANG_ENABLE_OBJC_ARC = YES; 423 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 424 | CLANG_WARN_BOOL_CONVERSION = YES; 425 | CLANG_WARN_COMMA = YES; 426 | CLANG_WARN_CONSTANT_CONVERSION = YES; 427 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 428 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 429 | CLANG_WARN_EMPTY_BODY = YES; 430 | CLANG_WARN_ENUM_CONVERSION = YES; 431 | CLANG_WARN_INFINITE_RECURSION = YES; 432 | CLANG_WARN_INT_CONVERSION = YES; 433 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 434 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 435 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 436 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 437 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 438 | CLANG_WARN_STRICT_PROTOTYPES = YES; 439 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 440 | CLANG_WARN_UNREACHABLE_CODE = YES; 441 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 442 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 443 | COPY_PHASE_STRIP = NO; 444 | DEBUG_INFORMATION_FORMAT = dwarf; 445 | ENABLE_STRICT_OBJC_MSGSEND = YES; 446 | ENABLE_TESTABILITY = YES; 447 | GCC_C_LANGUAGE_STANDARD = gnu99; 448 | GCC_DYNAMIC_NO_PIC = NO; 449 | GCC_NO_COMMON_BLOCKS = YES; 450 | GCC_OPTIMIZATION_LEVEL = 0; 451 | GCC_PREPROCESSOR_DEFINITIONS = ( 452 | "DEBUG=1", 453 | "$(inherited)", 454 | ); 455 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 456 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 457 | GCC_WARN_UNDECLARED_SELECTOR = YES; 458 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 459 | GCC_WARN_UNUSED_FUNCTION = YES; 460 | GCC_WARN_UNUSED_VARIABLE = YES; 461 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 462 | MTL_ENABLE_DEBUG_INFO = YES; 463 | ONLY_ACTIVE_ARCH = YES; 464 | SDKROOT = iphoneos; 465 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 466 | }; 467 | name = Debug; 468 | }; 469 | 4521EC4B1CB162FD00A0DA5B /* Release */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | ALWAYS_SEARCH_USER_PATHS = NO; 473 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 474 | CLANG_ANALYZER_NONNULL = YES; 475 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 476 | CLANG_CXX_LIBRARY = "libc++"; 477 | CLANG_ENABLE_MODULES = YES; 478 | CLANG_ENABLE_OBJC_ARC = YES; 479 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 480 | CLANG_WARN_BOOL_CONVERSION = YES; 481 | CLANG_WARN_COMMA = YES; 482 | CLANG_WARN_CONSTANT_CONVERSION = YES; 483 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 484 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 485 | CLANG_WARN_EMPTY_BODY = YES; 486 | CLANG_WARN_ENUM_CONVERSION = YES; 487 | CLANG_WARN_INFINITE_RECURSION = YES; 488 | CLANG_WARN_INT_CONVERSION = YES; 489 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 490 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 491 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 492 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 493 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 494 | CLANG_WARN_STRICT_PROTOTYPES = YES; 495 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 496 | CLANG_WARN_UNREACHABLE_CODE = YES; 497 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 498 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 499 | COPY_PHASE_STRIP = NO; 500 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 501 | ENABLE_NS_ASSERTIONS = NO; 502 | ENABLE_STRICT_OBJC_MSGSEND = YES; 503 | GCC_C_LANGUAGE_STANDARD = gnu99; 504 | GCC_NO_COMMON_BLOCKS = YES; 505 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 506 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 507 | GCC_WARN_UNDECLARED_SELECTOR = YES; 508 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 509 | GCC_WARN_UNUSED_FUNCTION = YES; 510 | GCC_WARN_UNUSED_VARIABLE = YES; 511 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 512 | MTL_ENABLE_DEBUG_INFO = NO; 513 | SDKROOT = iphoneos; 514 | SWIFT_COMPILATION_MODE = wholemodule; 515 | VALIDATE_PRODUCT = YES; 516 | }; 517 | name = Release; 518 | }; 519 | 4521EC4D1CB162FD00A0DA5B /* Debug */ = { 520 | isa = XCBuildConfiguration; 521 | baseConfigurationReference = 7AB3AC69B896558AA72C91D7 /* Pods.debug.xcconfig */; 522 | buildSettings = { 523 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 524 | INFOPLIST_FILE = JYTagView/Info.plist; 525 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 526 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 527 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagView; 528 | PRODUCT_NAME = "$(TARGET_NAME)"; 529 | SWIFT_VERSION = 5.0; 530 | }; 531 | name = Debug; 532 | }; 533 | 4521EC4E1CB162FD00A0DA5B /* Release */ = { 534 | isa = XCBuildConfiguration; 535 | baseConfigurationReference = 17BFC398F81A660C4DB05EDE /* Pods.release.xcconfig */; 536 | buildSettings = { 537 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 538 | INFOPLIST_FILE = JYTagView/Info.plist; 539 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 540 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 541 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagView; 542 | PRODUCT_NAME = "$(TARGET_NAME)"; 543 | SWIFT_VERSION = 5.0; 544 | }; 545 | name = Release; 546 | }; 547 | 4521EC501CB162FD00A0DA5B /* Debug */ = { 548 | isa = XCBuildConfiguration; 549 | buildSettings = { 550 | BUNDLE_LOADER = "$(TEST_HOST)"; 551 | INFOPLIST_FILE = JYTagViewTests/Info.plist; 552 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 553 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagViewTests; 554 | PRODUCT_NAME = "$(TARGET_NAME)"; 555 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JYTagView.app/JYTagView"; 556 | }; 557 | name = Debug; 558 | }; 559 | 4521EC511CB162FD00A0DA5B /* Release */ = { 560 | isa = XCBuildConfiguration; 561 | buildSettings = { 562 | BUNDLE_LOADER = "$(TEST_HOST)"; 563 | INFOPLIST_FILE = JYTagViewTests/Info.plist; 564 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 565 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagViewTests; 566 | PRODUCT_NAME = "$(TARGET_NAME)"; 567 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/JYTagView.app/JYTagView"; 568 | }; 569 | name = Release; 570 | }; 571 | 4521EC531CB162FD00A0DA5B /* Debug */ = { 572 | isa = XCBuildConfiguration; 573 | buildSettings = { 574 | INFOPLIST_FILE = JYTagViewUITests/Info.plist; 575 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 576 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagViewUITests; 577 | PRODUCT_NAME = "$(TARGET_NAME)"; 578 | TEST_TARGET_NAME = JYTagView; 579 | }; 580 | name = Debug; 581 | }; 582 | 4521EC541CB162FD00A0DA5B /* Release */ = { 583 | isa = XCBuildConfiguration; 584 | buildSettings = { 585 | INFOPLIST_FILE = JYTagViewUITests/Info.plist; 586 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 587 | PRODUCT_BUNDLE_IDENTIFIER = cn.Jatstar.JYTagViewUITests; 588 | PRODUCT_NAME = "$(TARGET_NAME)"; 589 | TEST_TARGET_NAME = JYTagView; 590 | }; 591 | name = Release; 592 | }; 593 | /* End XCBuildConfiguration section */ 594 | 595 | /* Begin XCConfigurationList section */ 596 | 4521EC1F1CB162FD00A0DA5B /* Build configuration list for PBXProject "JYTagView" */ = { 597 | isa = XCConfigurationList; 598 | buildConfigurations = ( 599 | 4521EC4A1CB162FD00A0DA5B /* Debug */, 600 | 4521EC4B1CB162FD00A0DA5B /* Release */, 601 | ); 602 | defaultConfigurationIsVisible = 0; 603 | defaultConfigurationName = Release; 604 | }; 605 | 4521EC4C1CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagView" */ = { 606 | isa = XCConfigurationList; 607 | buildConfigurations = ( 608 | 4521EC4D1CB162FD00A0DA5B /* Debug */, 609 | 4521EC4E1CB162FD00A0DA5B /* Release */, 610 | ); 611 | defaultConfigurationIsVisible = 0; 612 | defaultConfigurationName = Release; 613 | }; 614 | 4521EC4F1CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagViewTests" */ = { 615 | isa = XCConfigurationList; 616 | buildConfigurations = ( 617 | 4521EC501CB162FD00A0DA5B /* Debug */, 618 | 4521EC511CB162FD00A0DA5B /* Release */, 619 | ); 620 | defaultConfigurationIsVisible = 0; 621 | defaultConfigurationName = Release; 622 | }; 623 | 4521EC521CB162FD00A0DA5B /* Build configuration list for PBXNativeTarget "JYTagViewUITests" */ = { 624 | isa = XCConfigurationList; 625 | buildConfigurations = ( 626 | 4521EC531CB162FD00A0DA5B /* Debug */, 627 | 4521EC541CB162FD00A0DA5B /* Release */, 628 | ); 629 | defaultConfigurationIsVisible = 0; 630 | defaultConfigurationName = Release; 631 | }; 632 | /* End XCConfigurationList section */ 633 | }; 634 | rootObject = 4521EC1C1CB162FD00A0DA5B /* Project object */; 635 | } 636 | -------------------------------------------------------------------------------- /JYTagView.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /JYTagView.xcodeproj/project.xcworkspace/xcuserdata/Jat.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iDevOrz/TagsView/32f4d42927052f803300e6232e1344d8d7ce44cc/JYTagView.xcodeproj/project.xcworkspace/xcuserdata/Jat.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /JYTagView.xcodeproj/xcuserdata/Jat.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /JYTagView.xcodeproj/xcuserdata/Jat.xcuserdatad/xcschemes/JYTagView.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /JYTagView.xcodeproj/xcuserdata/Jat.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | JYTagView.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 4521EC231CB162FD00A0DA5B 16 | 17 | primary 18 | 19 | 20 | 4521EC371CB162FD00A0DA5B 21 | 22 | primary 23 | 24 | 25 | 4521EC421CB162FD00A0DA5B 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /JYTagView.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /JYTagView.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /JYTagView.xcworkspace/xcuserdata/Jat.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iDevOrz/TagsView/32f4d42927052f803300e6232e1344d8d7ce44cc/JYTagView.xcworkspace/xcuserdata/Jat.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /JYTagView.xcworkspace/xcuserdata/Jat.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /JYTagView/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/3. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 18 | 19 | self.window = UIWindow(frame: UIScreen.main.bounds) 20 | self.window?.rootViewController = ViewController() 21 | self.window?.makeKeyAndVisible() 22 | 23 | return true 24 | } 25 | 26 | 27 | } 28 | 29 | -------------------------------------------------------------------------------- /JYTagView/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } -------------------------------------------------------------------------------- /JYTagView/Base.lproj/LaunchScreen.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 | -------------------------------------------------------------------------------- /JYTagView/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 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /JYTagView/Tag/JYTagModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JYTagModel.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/4. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JYTagModel: NSObject { 12 | 13 | @objc var lock:String? 14 | 15 | @objc var tag_fatherid:String? 16 | 17 | @objc var tagname:String? 18 | 19 | class func tag(dict:[String:AnyObject]) -> JYTagModel{ 20 | let tag = JYTagModel() 21 | tag.setValuesForKeys(dict) 22 | return tag; 23 | } 24 | 25 | override func value(forUndefinedKey key: String) -> Any? { 26 | return "什么鬼~?" 27 | } 28 | 29 | override func setValue(_ value: Any?, forUndefinedKey key: String) { 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /JYTagView/Tag/JYTagView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JYTagView.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/4. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public enum JYTagviewMarginType : Int { 12 | case Top 13 | case Bottom 14 | case Left 15 | case Right 16 | case Row 17 | case Column 18 | }; 19 | 20 | protocol JYTagviewDataSource :NSObjectProtocol{ 21 | 22 | func numberOfCellsInTagView(tagView:JYTagView) -> Int 23 | 24 | func tagView(tagView:JYTagView, cellAtIndex index:Int) -> JYTagViewCell 25 | 26 | //@optional 27 | func headerViewInTagView(tagView:JYTagView) -> UIView 28 | 29 | func footerViewInTagView(tagView:JYTagView) -> UIView 30 | 31 | } 32 | 33 | protocol JYTagviewDelegate :UIScrollViewDelegate{ 34 | 35 | func tagView(tagView:JYTagView, heightForRowInIndex index:NSInteger) -> CGFloat 36 | 37 | func tagView(tagView:JYTagView, widthForRowInIndex index:NSInteger) -> CGFloat 38 | 39 | //optional 40 | func tagView(tagView:JYTagView, didSelectAtIndex index:NSInteger) 41 | 42 | func tagView(tagView:JYTagView, maginForType type:JYTagviewMarginType) 43 | 44 | } 45 | 46 | 47 | class JYTagView: UIScrollView { 48 | 49 | /// 左右间距最小值 50 | let kJYTagMinLeftMargin:CGFloat = 15; 51 | /// 行上下间距 52 | let kJYTagTopRowMargin:CGFloat = 10; 53 | /// 每个cell之间 左右的间距 54 | let kJYTagMiddleMargin:CGFloat = 10; 55 | /// 每个cell额外加的宽度 56 | let kJYTagCellExteraWidth:CGFloat = 10; 57 | /// 默认的cell高度 58 | let kJYTagviewDefaultCellHeight:CGFloat = 15; 59 | /// 默认的cell宽度 60 | let kJYTagviewDefaultCellWidth:CGFloat = 100; 61 | /// 尾视图间距 62 | let kJYFooterViewMargin:CGFloat = 20; 63 | 64 | /** 存放所有的frame*/ 65 | var cellFrames = [CGRect]() 66 | /**存放正在展示的cell*/ 67 | var displayingCells = [Int:JYTagViewCell]() 68 | /** 自定义的缓存池*/ 69 | var reusableCells:Set = Set() 70 | 71 | var mainScreenSize = UIScreen.main.bounds.size 72 | 73 | var cellNumbers:NSInteger = 0 74 | 75 | weak var dataSource_JY: JYTagviewDataSource? 76 | 77 | weak var delegate_JY: JYTagviewDelegate? 78 | 79 | func reloadData(){ 80 | self.cellFrames.removeAll() 81 | self.displayingCells.removeAll() 82 | self.reusableCells.removeAll() 83 | 84 | let headerView = self.headerViewInTagview() 85 | let footerView = self.footerViewInTagview() 86 | self.cellNumbers = (self.dataSource_JY?.numberOfCellsInTagView(tagView: self))! 87 | 88 | self.caculateWithNumberOfCells(count: self.cellNumbers, headerView: headerView, footerView: footerView) 89 | if headerView != nil { 90 | self.addSubview(headerView!) 91 | } 92 | 93 | if footerView != nil { 94 | self.addSubview(footerView!) 95 | } 96 | 97 | } 98 | 99 | private func caculateWithNumberOfCells(count:Int, headerView:UIView?, footerView:UIView?){ 100 | /// 行数 101 | var numberOfRows = 0 102 | /// 用来存放cell 的宽度 103 | var tmpArr = [CGFloat]() 104 | /// 每一行最大的X 换行置0 105 | var maxX:CGFloat = 0.0 106 | /// cell高度 107 | let cellH = self.heightAtIndex(index: 0) 108 | /// 有效宽度 109 | let effectiveW = self.mainScreenSize.width - 2 * kJYTagMinLeftMargin 110 | /// 每一行开始的位置 111 | var beginR = 0 112 | /// 每一行结束的位置 113 | var endR = 0 114 | 115 | let headerViewH:CGFloat = { 116 | if headerView != nil { 117 | return headerView!.frame.height 118 | } 119 | return 0.0 120 | }() 121 | 122 | let footerViewH:CGFloat = { 123 | if footerView != nil { 124 | return footerView!.frame.height 125 | } 126 | return 0.0 127 | }() 128 | 129 | for i in 0...(count - 1) { 130 | 131 | let textW = self.widthAtIndex(index: i) 132 | 133 | if i == 0 { 134 | 135 | maxX = (textW + kJYTagCellExteraWidth) + maxX 136 | 137 | } else { 138 | 139 | maxX = (textW + kJYTagCellExteraWidth) + maxX + kJYTagMiddleMargin 140 | 141 | } 142 | 143 | 144 | tmpArr.append((textW + kJYTagCellExteraWidth)) 145 | 146 | if maxX > effectiveW { 147 | 148 | endR = i - 1 149 | 150 | let realW:CGFloat = maxX - (textW + kJYTagCellExteraWidth + kJYTagMiddleMargin) 151 | 152 | let leftMargin = (effectiveW - realW ) / 2.0 153 | 154 | for j in beginR ... endR{ 155 | let cellW = tmpArr[j] 156 | 157 | var cellX:CGFloat = 0.0 158 | 159 | if j == beginR { 160 | 161 | cellX = leftMargin + kJYTagMiddleMargin 162 | 163 | } else { 164 | 165 | let frame = self.cellFrames[j - 1] 166 | 167 | cellX = kJYTagMiddleMargin + frame.maxX 168 | 169 | } 170 | 171 | let cellY = kJYTagTopRowMargin + (cellH + kJYTagTopRowMargin) * CGFloat(numberOfRows) + headerViewH 172 | 173 | let frame = CGRect(x: cellX, y: cellY, width: cellW, height: cellH) 174 | self.cellFrames.append(frame) 175 | } 176 | 177 | beginR = i 178 | 179 | numberOfRows = numberOfRows + 1 180 | 181 | maxX = textW + kJYTagCellExteraWidth 182 | 183 | } 184 | 185 | } 186 | 187 | 188 | if headerView != nil { 189 | 190 | var headerViewFrame = headerView!.frame 191 | 192 | headerViewFrame.origin = .zero 193 | 194 | if headerViewFrame.size.width > self.mainScreenSize.width { 195 | let h = self.mainScreenSize.width * headerViewFrame.size.height / headerViewFrame.size.width 196 | headerViewFrame.size = CGSize(width: self.mainScreenSize.width,height: h) 197 | } else { 198 | let margin = (self.mainScreenSize.width - headerViewFrame.size.width) / 2 199 | headerViewFrame.origin = CGPoint(x: margin,y: 0) 200 | } 201 | 202 | headerView!.frame = headerViewFrame 203 | } 204 | 205 | 206 | var contenH = CGFloat(numberOfRows) * (kJYTagTopRowMargin + cellH) + headerViewH 207 | 208 | if footerView != nil { 209 | var footerViewFrame = footerView!.frame 210 | 211 | footerViewFrame.origin = CGPoint(x: 0,y: contenH + kJYFooterViewMargin) 212 | 213 | if footerViewFrame.size.width > self.mainScreenSize.width { 214 | let h = self.mainScreenSize.width * footerViewFrame.size.height / footerViewFrame.size.width 215 | footerViewFrame.size = CGSize(width: self.mainScreenSize.width,height: h) 216 | } else { 217 | let margin = (self.mainScreenSize.width - footerViewFrame.size.width) / 2 218 | footerViewFrame.origin = CGPoint(x: margin,y: contenH + kJYFooterViewMargin) 219 | } 220 | 221 | footerView!.frame = footerViewFrame 222 | } 223 | 224 | contenH = contenH + footerViewH + kJYFooterViewMargin 225 | 226 | self.contentSize = CGSize(width: 0,height: contenH) 227 | 228 | } 229 | 230 | 231 | private func cellFrameOfIndex(index:NSInteger) -> CGRect{ 232 | return .zero 233 | } 234 | 235 | 236 | override func layoutSubviews() { 237 | super.layoutSubviews() 238 | 239 | self.backgroundColor = .lightGray 240 | 241 | let numberOfCells = self.cellFrames.count 242 | 243 | for i in 0...(numberOfCells - 1) { 244 | 245 | if i >= self.cellNumbers { 246 | return 247 | } 248 | 249 | 250 | let cellFrame = self.cellFrames[i] 251 | 252 | var cell:JYTagViewCell? = self.displayingCells[i] 253 | 254 | if isInScreen(frame: cellFrame) { 255 | if cell == nil { 256 | cell = self.dataSource_JY?.tagView(tagView: self, cellAtIndex: i) 257 | } 258 | cell!.frame = cellFrame 259 | cell!.layer.borderWidth = 2.0 260 | cell!.layer.borderColor = UIColor.black.cgColor 261 | // cell!.clipsToBounds = true 262 | cell!.layer.cornerRadius = 8.0 263 | self.addSubview(cell!) 264 | 265 | 266 | self.displayingCells[i] = cell 267 | 268 | } else { 269 | 270 | if cell != nil{ 271 | 272 | cell!.removeFromSuperview() 273 | 274 | self.displayingCells.removeValue(forKey: i) 275 | 276 | self.reusableCells.insert(cell!) 277 | } 278 | } 279 | } 280 | } 281 | 282 | /** 283 | * 284 | * 利用重用标识符从缓存池中找到cell 285 | */ 286 | func dequeueReusableCellWithIdentifier(identifier:String) -> JYTagViewCell? { 287 | for cell in self.reusableCells { 288 | 289 | if cell.identifier == identifier { 290 | reusableCells.remove(cell) 291 | return cell 292 | } 293 | } 294 | return nil 295 | } 296 | 297 | /** 298 | * 是否在屏幕上 299 | */ 300 | private func isInScreen(frame:CGRect) -> Bool{ 301 | return frame.maxY > self.contentOffset.y && frame.maxY < self.contentOffset.y + self.frame.size.height 302 | } 303 | 304 | 305 | /** 306 | * cell height 307 | */ 308 | private func heightAtIndex(index:NSInteger) -> CGFloat { 309 | return self.delegate_JY?.tagView(tagView: self, heightForRowInIndex: index) ?? kJYTagviewDefaultCellHeight 310 | } 311 | 312 | /** 获得每一个cell的宽度 */ 313 | private func widthAtIndex(index:NSInteger) -> CGFloat { 314 | return self.delegate_JY?.tagView(tagView: self, widthForRowInIndex: index) ?? kJYTagviewDefaultCellWidth 315 | } 316 | 317 | /** headerview*/ 318 | private func headerViewInTagview() -> UIView? { 319 | return self.dataSource_JY?.headerViewInTagView(tagView: self) 320 | } 321 | 322 | /** footerView*/ 323 | private func footerViewInTagview() -> UIView? { 324 | if ((self.dataSource_JY?.footerViewInTagView(tagView: self)) != nil) { 325 | return self.dataSource_JY?.footerViewInTagView(tagView: self) 326 | } 327 | return nil 328 | } 329 | 330 | // MARK: 事件处理 331 | 332 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 333 | let touch = touches.first! 334 | let point = touch.location(in: self) 335 | 336 | for displayingCell in self.displayingCells { 337 | if displayingCell.1.frame.contains(point) { 338 | self.delegate_JY?.tagView(tagView: self, didSelectAtIndex: displayingCell.0) 339 | } 340 | } 341 | } 342 | 343 | } 344 | -------------------------------------------------------------------------------- /JYTagView/Tag/JYTagViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JYTagViewCell.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/4. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class JYTagViewCell: UIView { 12 | 13 | var identifier:String? 14 | 15 | var textLabel:UILabel = { 16 | let label = UILabel() 17 | label.textAlignment = NSTextAlignment.center 18 | label.font = UIFont.systemFont(ofSize: 15) 19 | return label 20 | }() 21 | 22 | convenience init(identifier: String) { 23 | self.init() 24 | backgroundColor = .white 25 | self.identifier = identifier 26 | self.addSubview(textLabel) 27 | } 28 | 29 | override func layoutSubviews() { 30 | super.layoutSubviews() 31 | textLabel.frame = self.bounds 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /JYTagView/Tag/UIImage+RoundedCorner.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+RoundedCorner.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/7. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // TODO 8 | 9 | import UIKit 10 | 11 | struct Radius { 12 | var topLeftRadius:CGFloat = 0.0 13 | var topRightRadius:CGFloat = 0.0 14 | var bottomLeftRadius:CGFloat = 0.0 15 | var bottomRightRadius:CGFloat = 0.0 16 | } 17 | 18 | extension UIImage{ 19 | 20 | func imageWithSize(size:CGSize,radius:CGFloat) -> UIImage { 21 | 22 | 23 | return self 24 | } 25 | 26 | func imageWithSize(size:CGSize, radius:CGFloat, contentMode:UIView.ContentMode) -> UIImage { 27 | 28 | return self 29 | } 30 | 31 | class func imageWithSize(sizeToFit:CGSize, radius:CGFloat, borderColor:UIColor, borderWidth:CGFloat) -> UIImage{ 32 | 33 | return self.init() 34 | } 35 | 36 | class func imageWithSize(size:CGSize, radius:CGFloat, borderColor:UIColor) -> UIImage{ 37 | 38 | return self.init() 39 | } 40 | 41 | class func imageWithSize(size:CGSize, radius:CGFloat, borderColor:UIColor, borderWidth:CGFloat, backgroundColor:UIColor, backgroundImage:UIImage, contentMode:UIView.ContentMode) -> UIImage{ 42 | 43 | return self.init() 44 | } 45 | 46 | class func imageWithSize(size:CGSize,radius:Radius, borderColor:UIColor, borderWidth:CGFloat, backgroundColor:UIColor, backgroundImage:UIImage, contentMode:UIView.ContentMode) -> UIImage{ 47 | 48 | return self.init() 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /JYTagView/Tag/UIView+RoundedCorner.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+RoundedCorner.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/7. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // TODO 8 | 9 | import UIKit 10 | 11 | extension UIView{ 12 | 13 | func setCornerRadius(radius:CGFloat, borderColor:UIColor, borderWidth:CGFloat){ 14 | 15 | } 16 | 17 | func setCornerRadius(radius:Radius, borderColor:UIColor, borderWidth:CGFloat){ 18 | 19 | } 20 | 21 | func setCornerRadius(radius:CGFloat, borderColor:UIColor, borderWidth:CGFloat, backgroundColor:UIColor, backgroundImage:UIImage, contentMode:UIView.ContentMode){ 22 | 23 | } 24 | 25 | func setCornerRadius(radius:Radius, borderColor:UIColor, borderWidth:CGFloat, backgroundColor:UIColor, backgroundImage:UIImage, contentMode:UIView.ContentMode){ 26 | 27 | } 28 | 29 | func setCornerRadius(radius:Radius, borderColor:UIColor, borderWidth:CGFloat, backgroundColor:UIColor, backgroundImage:UIImage, contentMode:UIView.ContentMode, size:CGSize){ 30 | 31 | } 32 | 33 | 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /JYTagView/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // JYTagView 4 | // 5 | // Created by 张建宇 on 16/4/3. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ViewController: UIViewController ,JYTagviewDataSource ,JYTagviewDelegate{ 12 | 13 | var tagsView = JYTagView() 14 | 15 | var tagModels = [JYTagModel]() 16 | 17 | let identifier = "myIdentifier" 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | tagsView.frame = view.bounds 22 | tagsView.delegate_JY = self 23 | tagsView.dataSource_JY = self 24 | view.addSubview(tagsView) 25 | 26 | let file = Bundle.main.path(forResource: "tags", ofType: "json") 27 | 28 | let dataArr = NSArray(contentsOfFile: file!) 29 | 30 | for data in dataArr! { 31 | let model = JYTagModel.tag(dict: data as! [String : AnyObject]) 32 | self.tagModels.append(model) 33 | } 34 | tagsView.reloadData() 35 | } 36 | 37 | override func didReceiveMemoryWarning() { 38 | super.didReceiveMemoryWarning() 39 | // Dispose of any resources that can be recreated. 40 | } 41 | 42 | } 43 | 44 | extension ViewController { 45 | 46 | func numberOfCellsInTagView(tagView:JYTagView) -> Int{ 47 | 48 | return self.tagModels.count 49 | 50 | } 51 | 52 | func tagView(tagView:JYTagView, cellAtIndex index:Int) -> JYTagViewCell{ 53 | 54 | var cell:JYTagViewCell? = tagsView.dequeueReusableCellWithIdentifier(identifier: self.identifier) 55 | 56 | if cell == nil { 57 | cell = JYTagViewCell.init(identifier: self.identifier) 58 | } 59 | cell?.textLabel.text = self.tagModels[index].tagname 60 | return cell! 61 | 62 | } 63 | 64 | //@optional 65 | func headerViewInTagView(tagView:JYTagView) -> UIView{ 66 | 67 | let label = UILabel.init(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 50)) 68 | 69 | label.backgroundColor = .lightGray 70 | 71 | label.textColor = .white 72 | 73 | label.textAlignment = .center 74 | 75 | label.text = "我是头视图" 76 | 77 | return label 78 | } 79 | 80 | func footerViewInTagView(tagView:JYTagView) -> UIView{ 81 | 82 | let label = UILabel.init(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 50)) 83 | 84 | label.backgroundColor = .gray 85 | 86 | label.textColor = .white 87 | 88 | label.textAlignment = .center 89 | 90 | label.text = "我是尾视图" 91 | 92 | return label 93 | 94 | } 95 | 96 | 97 | func tagView(tagView:JYTagView, heightForRowInIndex index:NSInteger) -> CGFloat{ 98 | 99 | return CGFloat(25) 100 | } 101 | 102 | func tagView(tagView:JYTagView, widthForRowInIndex index:NSInteger) -> CGFloat{ 103 | 104 | let text:String = self.tagModels[index].tagname! 105 | 106 | // boundingRectWithSize 107 | 108 | let label = UILabel() 109 | label.font = UIFont.systemFont(ofSize: 15) 110 | label.text = text 111 | label.sizeToFit() 112 | let width = label.frame.maxX 113 | return width 114 | } 115 | 116 | //optional 117 | func tagView(tagView:JYTagView, didSelectAtIndex index:NSInteger){ 118 | 119 | 120 | let model = self.tagModels[index] 121 | 122 | if #available(iOS 8.0, *) { 123 | let alertView = UIAlertController.init(title: "提示", message: "点击了\(model.tagname!)", preferredStyle:.alert) 124 | let cancelAction = UIAlertAction.init(title: "取消", style: .cancel, handler: nil) 125 | 126 | alertView.addAction(cancelAction) 127 | 128 | self.present(alertView, animated: true, completion: nil) 129 | } else { 130 | // Fallback on earlier versions 131 | } 132 | } 133 | 134 | func tagView(tagView:JYTagView, maginForType type:JYTagviewMarginType){ 135 | 136 | } 137 | 138 | 139 | 140 | } 141 | 142 | 143 | -------------------------------------------------------------------------------- /JYTagViewTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /JYTagViewTests/JYTagViewTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JYTagViewTests.swift 3 | // JYTagViewTests 4 | // 5 | // Created by 张建宇 on 16/4/3. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import JYTagView 11 | 12 | class JYTagViewTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measureBlock { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /JYTagViewUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /JYTagViewUITests/JYTagViewUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JYTagViewUITests.swift 3 | // JYTagViewUITests 4 | // 5 | // Created by 张建宇 on 16/4/3. 6 | // Copyright © 2016年 张建宇. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class JYTagViewUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Reveal-iOS-SDK (1.6.2) 3 | 4 | DEPENDENCIES: 5 | - Reveal-iOS-SDK 6 | 7 | SPEC CHECKSUMS: 8 | Reveal-iOS-SDK: e2250b3c155bcfac53ae223ddc1f76d08f206c33 9 | 10 | COCOAPODS: 0.39.0 11 | -------------------------------------------------------------------------------- /Pods/Headers/Public/Reveal-iOS-SDK/Reveal/IBANetServiceTypes.h: -------------------------------------------------------------------------------- 1 | ../../../../Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBANetServiceTypes.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Reveal-iOS-SDK/Reveal/IBARevealLoader.h: -------------------------------------------------------------------------------- 1 | ../../../../Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBARevealLoader.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Reveal-iOS-SDK/Reveal/IBARevealLogger.h: -------------------------------------------------------------------------------- 1 | ../../../../Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBARevealLogger.h -------------------------------------------------------------------------------- /Pods/Headers/Public/Reveal-iOS-SDK/Reveal/Reveal.h: -------------------------------------------------------------------------------- 1 | ../../../../Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/Reveal.h -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Reveal-iOS-SDK (1.6.2) 3 | 4 | DEPENDENCIES: 5 | - Reveal-iOS-SDK 6 | 7 | SPEC CHECKSUMS: 8 | Reveal-iOS-SDK: e2250b3c155bcfac53ae223ddc1f76d08f206c33 9 | 10 | COCOAPODS: 0.39.0 11 | -------------------------------------------------------------------------------- /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 | 024C103848113AEF76AC5A742AF80B75 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 1E615E9CA3F7C983E82758A5B9F64D21 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */; }; 12 | 4F53192D75EB99D6C9B6BE7F2A55ECD7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */; }; 13 | /* End PBXBuildFile section */ 14 | 15 | /* Begin PBXFileReference section */ 16 | 12DFEEB3509D877B6CE65BCE2EEB0562 /* Reveal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Reveal.framework; path = "Reveal-Framework-iOS-1.6.2/Reveal.framework"; sourceTree = ""; }; 17 | 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; }; 18 | 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 19 | 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; }; 20 | 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; 21 | 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; 22 | 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; 23 | BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 24 | BB5D32B5D8FFDA27126FB97ADA2F84CF /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; 26 | D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-acknowledgements.markdown"; sourceTree = ""; }; 27 | DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; 28 | E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-frameworks.sh"; sourceTree = ""; }; 29 | E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | /* End PBXFileReference section */ 31 | 32 | /* Begin PBXFrameworksBuildPhase section */ 33 | F3168C673007601935FDD8CF0A0C1C66 /* Frameworks */ = { 34 | isa = PBXFrameworksBuildPhase; 35 | buildActionMask = 2147483647; 36 | files = ( 37 | 4F53192D75EB99D6C9B6BE7F2A55ECD7 /* Foundation.framework in Frameworks */, 38 | ); 39 | runOnlyForDeploymentPostprocessing = 0; 40 | }; 41 | /* End PBXFrameworksBuildPhase section */ 42 | 43 | /* Begin PBXGroup section */ 44 | 1F65C4CD40C947C4415F8D28536735CC /* Products */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | BB5D32B5D8FFDA27126FB97ADA2F84CF /* Pods.framework */, 48 | ); 49 | name = Products; 50 | sourceTree = ""; 51 | }; 52 | 75D98FF52E597A11900E131B6C4E1ADA /* Pods */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | E8446514FBAD26C0E18F24A5715AEF67 /* Info.plist */, 56 | 79A9DEDC89FE8336BF5FEDAAF75BF7FC /* Pods.modulemap */, 57 | D0405803033A2A777B8E4DFA0C1800ED /* Pods-acknowledgements.markdown */, 58 | 87B213035BAC5F75386F62D3C75D2342 /* Pods-acknowledgements.plist */, 59 | 894E5DA93A9F359521A89826BE6DA777 /* Pods-dummy.m */, 60 | E7F21354943D9F42A70697D5A5EF72E9 /* Pods-frameworks.sh */, 61 | CBC0F7C552B739C909B650A0F42F7F38 /* Pods-resources.sh */, 62 | 2BCC458FDD5F692BBB2BFC64BB5701FC /* Pods-umbrella.h */, 63 | 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */, 64 | DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */, 65 | ); 66 | name = Pods; 67 | path = "Target Support Files/Pods"; 68 | sourceTree = ""; 69 | }; 70 | 7DB346D0F39D3F0E887471402A8071AB = { 71 | isa = PBXGroup; 72 | children = ( 73 | BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, 74 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 75 | C6FF86527080A6ABFC16B69A3DC0DFFB /* Pods */, 76 | 1F65C4CD40C947C4415F8D28536735CC /* Products */, 77 | B7B80995527643776607AFFA75B91E24 /* Targets Support Files */, 78 | ); 79 | sourceTree = ""; 80 | }; 81 | 81C689C3AFC1C7FF242CFAB8DDD09E4A /* Frameworks */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | 12DFEEB3509D877B6CE65BCE2EEB0562 /* Reveal.framework */, 85 | ); 86 | name = Frameworks; 87 | sourceTree = ""; 88 | }; 89 | B7B80995527643776607AFFA75B91E24 /* Targets Support Files */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | 75D98FF52E597A11900E131B6C4E1ADA /* Pods */, 93 | ); 94 | name = "Targets Support Files"; 95 | sourceTree = ""; 96 | }; 97 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | BF6342C8B29F4CEEA088EFF7AB4DE362 /* iOS */, 101 | ); 102 | name = Frameworks; 103 | sourceTree = ""; 104 | }; 105 | BF6342C8B29F4CEEA088EFF7AB4DE362 /* iOS */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | 3E4E89230EF59BC255123B67864ACF77 /* Foundation.framework */, 109 | ); 110 | name = iOS; 111 | sourceTree = ""; 112 | }; 113 | C6FF86527080A6ABFC16B69A3DC0DFFB /* Pods */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | D70BEE20B57C04A4512260E625802768 /* Reveal-iOS-SDK */, 117 | ); 118 | name = Pods; 119 | sourceTree = ""; 120 | }; 121 | D70BEE20B57C04A4512260E625802768 /* Reveal-iOS-SDK */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 81C689C3AFC1C7FF242CFAB8DDD09E4A /* Frameworks */, 125 | ); 126 | path = "Reveal-iOS-SDK"; 127 | sourceTree = ""; 128 | }; 129 | /* End PBXGroup section */ 130 | 131 | /* Begin PBXHeadersBuildPhase section */ 132 | 59A00F9704B6AFE0A9DC699A4B8B033F /* Headers */ = { 133 | isa = PBXHeadersBuildPhase; 134 | buildActionMask = 2147483647; 135 | files = ( 136 | 024C103848113AEF76AC5A742AF80B75 /* Pods-umbrella.h in Headers */, 137 | ); 138 | runOnlyForDeploymentPostprocessing = 0; 139 | }; 140 | /* End PBXHeadersBuildPhase section */ 141 | 142 | /* Begin PBXNativeTarget section */ 143 | 1BA84416B19DF31967CCD7D02D962E49 /* Pods */ = { 144 | isa = PBXNativeTarget; 145 | buildConfigurationList = E151796BBCB376D96AD1C38DD0B21AC6 /* Build configuration list for PBXNativeTarget "Pods" */; 146 | buildPhases = ( 147 | 94E92B28A5AF3478251705B46FC8586F /* Sources */, 148 | F3168C673007601935FDD8CF0A0C1C66 /* Frameworks */, 149 | 59A00F9704B6AFE0A9DC699A4B8B033F /* Headers */, 150 | ); 151 | buildRules = ( 152 | ); 153 | dependencies = ( 154 | ); 155 | name = Pods; 156 | productName = Pods; 157 | productReference = BB5D32B5D8FFDA27126FB97ADA2F84CF /* Pods.framework */; 158 | productType = "com.apple.product-type.framework"; 159 | }; 160 | /* End PBXNativeTarget section */ 161 | 162 | /* Begin PBXProject section */ 163 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 164 | isa = PBXProject; 165 | attributes = { 166 | LastSwiftUpdateCheck = 0700; 167 | LastUpgradeCheck = 1020; 168 | }; 169 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 170 | compatibilityVersion = "Xcode 3.2"; 171 | developmentRegion = en; 172 | hasScannedForEncodings = 0; 173 | knownRegions = ( 174 | en, 175 | Base, 176 | ); 177 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 178 | productRefGroup = 1F65C4CD40C947C4415F8D28536735CC /* Products */; 179 | projectDirPath = ""; 180 | projectRoot = ""; 181 | targets = ( 182 | 1BA84416B19DF31967CCD7D02D962E49 /* Pods */, 183 | ); 184 | }; 185 | /* End PBXProject section */ 186 | 187 | /* Begin PBXSourcesBuildPhase section */ 188 | 94E92B28A5AF3478251705B46FC8586F /* Sources */ = { 189 | isa = PBXSourcesBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | 1E615E9CA3F7C983E82758A5B9F64D21 /* Pods-dummy.m in Sources */, 193 | ); 194 | runOnlyForDeploymentPostprocessing = 0; 195 | }; 196 | /* End PBXSourcesBuildPhase section */ 197 | 198 | /* Begin XCBuildConfiguration section */ 199 | 2126B6A134ED43DDDE71E53A2D4BFB6D /* Release */ = { 200 | isa = XCBuildConfiguration; 201 | baseConfigurationReference = DA312349A49333542E6F4B36B329960E /* Pods.release.xcconfig */; 202 | buildSettings = { 203 | CODE_SIGN_IDENTITY = ""; 204 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 205 | CURRENT_PROJECT_VERSION = 1; 206 | DEFINES_MODULE = YES; 207 | DYLIB_COMPATIBILITY_VERSION = 1; 208 | DYLIB_CURRENT_VERSION = 1; 209 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 210 | ENABLE_STRICT_OBJC_MSGSEND = YES; 211 | INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; 212 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 213 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 214 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 215 | MACH_O_TYPE = staticlib; 216 | MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; 217 | MTL_ENABLE_DEBUG_INFO = NO; 218 | OTHER_LDFLAGS = ""; 219 | OTHER_LIBTOOLFLAGS = ""; 220 | PODS_ROOT = "$(SRCROOT)"; 221 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 222 | PRODUCT_NAME = Pods; 223 | SDKROOT = iphoneos; 224 | SKIP_INSTALL = YES; 225 | TARGETED_DEVICE_FAMILY = "1,2"; 226 | VERSIONING_SYSTEM = "apple-generic"; 227 | VERSION_INFO_PREFIX = ""; 228 | }; 229 | name = Release; 230 | }; 231 | 2B389FAB51F6EEA43F72CA7BDC8E8E28 /* Debug */ = { 232 | isa = XCBuildConfiguration; 233 | buildSettings = { 234 | ALWAYS_SEARCH_USER_PATHS = NO; 235 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 236 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 237 | CLANG_CXX_LIBRARY = "libc++"; 238 | CLANG_ENABLE_MODULES = YES; 239 | CLANG_ENABLE_OBJC_ARC = YES; 240 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 241 | CLANG_WARN_BOOL_CONVERSION = YES; 242 | CLANG_WARN_COMMA = YES; 243 | CLANG_WARN_CONSTANT_CONVERSION = YES; 244 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 245 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 246 | CLANG_WARN_EMPTY_BODY = YES; 247 | CLANG_WARN_ENUM_CONVERSION = YES; 248 | CLANG_WARN_INFINITE_RECURSION = YES; 249 | CLANG_WARN_INT_CONVERSION = YES; 250 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 251 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 252 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 253 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 254 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 255 | CLANG_WARN_STRICT_PROTOTYPES = YES; 256 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 257 | CLANG_WARN_UNREACHABLE_CODE = YES; 258 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 259 | COPY_PHASE_STRIP = NO; 260 | ENABLE_STRICT_OBJC_MSGSEND = YES; 261 | ENABLE_TESTABILITY = YES; 262 | GCC_C_LANGUAGE_STANDARD = gnu99; 263 | GCC_DYNAMIC_NO_PIC = NO; 264 | GCC_NO_COMMON_BLOCKS = YES; 265 | GCC_OPTIMIZATION_LEVEL = 0; 266 | GCC_PREPROCESSOR_DEFINITIONS = ( 267 | "DEBUG=1", 268 | "$(inherited)", 269 | ); 270 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 271 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 272 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 273 | GCC_WARN_UNDECLARED_SELECTOR = YES; 274 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 275 | GCC_WARN_UNUSED_FUNCTION = YES; 276 | GCC_WARN_UNUSED_VARIABLE = YES; 277 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 278 | ONLY_ACTIVE_ARCH = YES; 279 | STRIP_INSTALLED_PRODUCT = NO; 280 | SYMROOT = "${SRCROOT}/../build"; 281 | }; 282 | name = Debug; 283 | }; 284 | 5A0C6FE968931D888F00C9EC18DDF5BC /* Release */ = { 285 | isa = XCBuildConfiguration; 286 | buildSettings = { 287 | ALWAYS_SEARCH_USER_PATHS = NO; 288 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 289 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 290 | CLANG_CXX_LIBRARY = "libc++"; 291 | CLANG_ENABLE_MODULES = YES; 292 | CLANG_ENABLE_OBJC_ARC = YES; 293 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 294 | CLANG_WARN_BOOL_CONVERSION = YES; 295 | CLANG_WARN_COMMA = YES; 296 | CLANG_WARN_CONSTANT_CONVERSION = YES; 297 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 298 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 299 | CLANG_WARN_EMPTY_BODY = YES; 300 | CLANG_WARN_ENUM_CONVERSION = YES; 301 | CLANG_WARN_INFINITE_RECURSION = YES; 302 | CLANG_WARN_INT_CONVERSION = YES; 303 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 304 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 305 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 306 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 307 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 308 | CLANG_WARN_STRICT_PROTOTYPES = YES; 309 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 310 | CLANG_WARN_UNREACHABLE_CODE = YES; 311 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 312 | COPY_PHASE_STRIP = YES; 313 | ENABLE_NS_ASSERTIONS = NO; 314 | ENABLE_STRICT_OBJC_MSGSEND = YES; 315 | GCC_C_LANGUAGE_STANDARD = gnu99; 316 | GCC_NO_COMMON_BLOCKS = YES; 317 | GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; 318 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 319 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 320 | GCC_WARN_UNDECLARED_SELECTOR = YES; 321 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 322 | GCC_WARN_UNUSED_FUNCTION = YES; 323 | GCC_WARN_UNUSED_VARIABLE = YES; 324 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 325 | STRIP_INSTALLED_PRODUCT = NO; 326 | SYMROOT = "${SRCROOT}/../build"; 327 | VALIDATE_PRODUCT = YES; 328 | }; 329 | name = Release; 330 | }; 331 | C73C0983CDD1DF3C772D23AFFE551F5A /* Debug */ = { 332 | isa = XCBuildConfiguration; 333 | baseConfigurationReference = 977577C045EDA9D9D1F46E2598D19FC7 /* Pods.debug.xcconfig */; 334 | buildSettings = { 335 | CODE_SIGN_IDENTITY = ""; 336 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 337 | CURRENT_PROJECT_VERSION = 1; 338 | DEFINES_MODULE = YES; 339 | DYLIB_COMPATIBILITY_VERSION = 1; 340 | DYLIB_CURRENT_VERSION = 1; 341 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 342 | ENABLE_STRICT_OBJC_MSGSEND = YES; 343 | INFOPLIST_FILE = "Target Support Files/Pods/Info.plist"; 344 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 345 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 346 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 347 | MACH_O_TYPE = staticlib; 348 | MODULEMAP_FILE = "Target Support Files/Pods/Pods.modulemap"; 349 | MTL_ENABLE_DEBUG_INFO = YES; 350 | OTHER_LDFLAGS = ""; 351 | OTHER_LIBTOOLFLAGS = ""; 352 | PODS_ROOT = "$(SRCROOT)"; 353 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 354 | PRODUCT_NAME = Pods; 355 | SDKROOT = iphoneos; 356 | SKIP_INSTALL = YES; 357 | TARGETED_DEVICE_FAMILY = "1,2"; 358 | VERSIONING_SYSTEM = "apple-generic"; 359 | VERSION_INFO_PREFIX = ""; 360 | }; 361 | name = Debug; 362 | }; 363 | /* End XCBuildConfiguration section */ 364 | 365 | /* Begin XCConfigurationList section */ 366 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 367 | isa = XCConfigurationList; 368 | buildConfigurations = ( 369 | 2B389FAB51F6EEA43F72CA7BDC8E8E28 /* Debug */, 370 | 5A0C6FE968931D888F00C9EC18DDF5BC /* Release */, 371 | ); 372 | defaultConfigurationIsVisible = 0; 373 | defaultConfigurationName = Release; 374 | }; 375 | E151796BBCB376D96AD1C38DD0B21AC6 /* Build configuration list for PBXNativeTarget "Pods" */ = { 376 | isa = XCConfigurationList; 377 | buildConfigurations = ( 378 | C73C0983CDD1DF3C772D23AFFE551F5A /* Debug */, 379 | 2126B6A134ED43DDDE71E53A2D4BFB6D /* Release */, 380 | ); 381 | defaultConfigurationIsVisible = 0; 382 | defaultConfigurationName = Release; 383 | }; 384 | /* End XCConfigurationList section */ 385 | }; 386 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 387 | } 388 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Jat.xcuserdatad/xcschemes/Pods.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Jat.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods.xcscheme 8 | 9 | isShown 10 | 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 1BA84416B19DF31967CCD7D02D962E49 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Reveal: -------------------------------------------------------------------------------- 1 | Versions/Current/Reveal -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBANetServiceTypes.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2014 Itty Bitty Apps Pty Ltd. All rights reserved. 3 | 4 | #ifndef reveal_core_IBANetServiceTypes_h 5 | #define reveal_core_IBANetServiceTypes_h 6 | #import 7 | 8 | typedef NS_ENUM(uint32_t, IBANetServiceInterface) { 9 | IBANetServiceInterfaceAny = kDNSServiceInterfaceIndexAny, 10 | IBANetServiceInterfaceLocalOnly = kDNSServiceInterfaceIndexLocalOnly, 11 | IBANetServiceInterfaceUnicast = kDNSServiceInterfaceIndexUnicast, 12 | IBANetServiceInterfaceP2P = kDNSServiceInterfaceIndexP2P 13 | }; 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBARevealLoader.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2013 Itty Bitty Apps. All rights reserved. 3 | 4 | #import 5 | 6 | extern NSString * const IBARevealLoaderRequestStartNotification; 7 | extern NSString * const IBARevealLoaderRequestStopNotification; 8 | 9 | extern NSString * const IBARevealLoaderSetOptionsNotification; 10 | extern NSString * const IBARevealLoaderOptionsLogLevelMaskKey; 11 | 12 | @interface IBARevealLoader : NSObject 13 | 14 | + (void)startServer; 15 | + (void)stopServer; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/IBARevealLogger.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2013 Itty Bitty Apps Pty Ltd. All rights reserved. 2 | // 3 | 4 | #import 5 | 6 | CF_EXTERN_C_BEGIN 7 | 8 | /*! 9 | \brief The Reveal Log level bit flags. 10 | \discussion These flags are additive. i.e. you should bitwise OR them together. 11 | 12 | \seealso IBARevealLoggerSetLevelMask 13 | \seealso IBARevealLoggerGetLevelMask 14 | 15 | Example: 16 | 17 | // Enable Error, Warning and Info logger levels. 18 | IBARevealLoggerSetLevelMask(IBARevealLogLevelError|IBARevealLogLevelWarn|IBARevealLogLevelInfo); 19 | 20 | */ 21 | typedef NS_OPTIONS(int32_t, IBARevealLogLevel) 22 | { 23 | IBARevealLogLevelNone = 0, 24 | IBARevealLogLevelDebug = (1 << 0), 25 | IBARevealLogLevelInfo = (1 << 1), 26 | IBARevealLogLevelWarn = (1 << 2), 27 | IBARevealLogLevelError = (1 << 3) 28 | }; 29 | 30 | /*! 31 | \brief Set the Reveal logger level mask. 32 | \param mask A bit mask which is a combination of the IBARevealLogLevel enum options. 33 | 34 | \discussion If you do not wish to see log messages from Reveal you should call this function with an appropriate level mask as early in your application's lifecycle as possible. For example in your application's main() function. 35 | 36 | Example: 37 | 38 | // Enable Error, Warning and Info logger levels. 39 | IBARevealLoggerSetLevelMask(IBARevealLogLevelError|IBARevealLogLevelWarn|IBARevealLogLevelInfo); 40 | 41 | */ 42 | CF_EXPORT void IBARevealLoggerSetLevelMask(int32_t mask); 43 | 44 | /*! 45 | \brief Get the current Reveal logger level mask. 46 | \return A bit mask representing the levels at which Reveal is currently logging. 47 | \discussion The default Reveal Logger level mask is IBARevealLogLevelError|IBARevealLogLevelWarn|IBARevealLogLevelInfo. 48 | 49 | Example: 50 | 51 | // Turn off the Info log level. 52 | IBARevealLoggerSetLevelMask(IBARevealLoggerGetLevelMask() & ~IBARevealLogLevelInfo); 53 | 54 | */ 55 | CF_EXPORT int32_t IBARevealLoggerGetLevelMask(void); 56 | 57 | CF_EXTERN_C_END 58 | -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Headers/Reveal.h: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2013 Itty Bitty Apps Pty Ltd. All rights reserved. 2 | // 3 | 4 | #import 5 | #import "IBARevealLogger.h" 6 | #import "IBARevealLoader.h" 7 | 8 | //! Project version number for Reveal. 9 | FOUNDATION_EXPORT double RevealVersionNumber; 10 | 11 | //! Project version string for Reveal. 12 | FOUNDATION_EXPORT const unsigned char RevealVersionString[]; 13 | -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Reveal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iDevOrz/TagsView/32f4d42927052f803300e6232e1344d8d7ce44cc/Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/A/Reveal -------------------------------------------------------------------------------- /Pods/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2/Reveal.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## Reveal-iOS-SDK 5 | 6 | # REVEAL LICENSE AGREEMENT v1.1 7 | 8 | ## NOTICE TO USER: 9 | 10 | This is a legally enforceable agreement between you (__"you"__ or __"yours"__ and other grammatical equivalents) and Itty Bitty Apps Pty Ltd. (__"the Company"__), which covers your use of the Reveal software product that accompanies this Agreement and related software components, which may include associated media, printed materials, and "online" or electronic documentation. All such software and materials are referred to herein as the __"Software"__ or __"the Reveal Software"__. If you do not agree to the terms of this License Agreement, then do not install or use the Software. By explicitly accepting this License Agreement, or by installing, copying, downloading, accessing, or otherwise using the Software, you are acknowledging and agreeing to be bound by the following terms: 11 | 12 | ## 1. DEFINITIONS 13 | 14 | __(a) "Software"__ shall mean the Reveal software including any Updates thereto, in object and source form, and the media and Documentation provided by the Company to you and for which you are granted a license pursuant to this Agreement. 15 | 16 | __(b) "Documentation"__ shall mean the printed or online written reference material furnished to you in conjunction with the Software, including, without limitation, instructions, guidelines, and end user guides. 17 | 18 | __(c) "Intellectual Property Rights"__ shall mean all intellectual property rights, including, without limitation, patent, copyright, trademark, and trade secret. 19 | 20 | __(d) "Updates"__ shall mean a modification, error correction, bug fix, new release, or other update to or for the Software. 21 | 22 | 23 | ## 2. LICENSE GRANT 24 | 25 | The Company may, at its sole discretion, grant you a Trial License, a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License. 26 | 27 | If you have not purchased or otherwise rightfully obtained a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License for the Reveal Software, the Trial License Terms (2.1) are applicable to your use of the Reveal Software. The Trial License Terms are also applicable to any usage of the Reveal Software by you that is not covered under any other licenses you may have. 28 | 29 | The Personal License Terms (2.2) apply if you have a Personal License. The Commercial Seat License Terms (2.3) apply if you have a Commercial Seat License. The Educational License Terms (2.4) apply if you have an Educational License. The Site License Terms (2.5) apply if you have a Site License. The Enterprise License Terms (2.6) apply if you have an Enterprise License. 30 | 31 | The General Terms (3) apply in all cases. 32 | 33 | ### 2.1 TRIAL LICENSE TERMS 34 | 35 | The Company grants you a non-exclusive license to use the Software for time-limited evaluation purposes, only in accordance with the terms and conditions set forth herein. The Software may be used for a period of 30 calendar days from the first time you run the Software. Upon lapse of such trial period all of or part of the functionality of the Software will be disabled automatically. 36 | 37 | If you wish to use the Software after the trial period, you must purchase a Personal License, a Commercial Seat License, an Educational License, a Site License or an Enterprise License. The Company may extend to you an expiring license key, in which event such a license key will be considered a means to extend the trial period under the Trial License Terms. 38 | 39 | 40 | ### 2.2 PERSONAL LICENSE TERMS 41 | 42 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you. Use of the Software under this license may be for both commercial and non-commercial purposes. Personal licences are not available to companies, commercial institutions, government agencies or business entities. 43 | 44 | 45 | ### 2.3 COMMERCIAL SEAT LICENSE TERMS 46 | 47 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 48 | 49 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. A Commercial Seat License must be purchased for every person employed by you or employed by any fully owned subsidiary of yours wishing to use the Software. 50 | 51 | This license is granted exclusively on a per-employee basis within your organisation and is not transferable to another current employee without written permission. 52 | 53 | This License does not allow the use of the Software other than for business purposes of your company. If entering into a Commercial Seat License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 54 | 55 | 56 | ### 2.4 EDUCATIONAL LICENSE TERMS 57 | 58 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you. 59 | 60 | Educational Licenses are available only to individual students and teaching staff. Use of the Software under this license must be for non-commercial purposes only, including education and research. 61 | 62 | 63 | ### 2.5 SITE LICENSE TERMS 64 | 65 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 66 | 67 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. 68 | 69 | Unless otherwise specified, any Site License you acquire from the Company is valid only for use at the business locations listed on your sales invoice. 70 | 71 | This License does not allow the use of the Software other than for business purposes of your company. If entering into a Site License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 72 | 73 | 74 | ### 2.6 ENTERPRISE LICENSE TERMS 75 | 76 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 77 | 78 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. 79 | 80 | This License allows global use of the Software by all employees or employees of any fully owned subsidiary of the company, commercial institution, government agency or business entity listed in your sales invoice. 81 | 82 | This License does not allow the use of the Software other than for business purposes of your company. If entering into an Enterprise License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 83 | 84 | 85 | ## 3. GENERAL TERMS 86 | 87 | ### 3.1 TITLE 88 | 89 | ‘REVEAL’™ and ‘ITTY BITTY APPS’™ represent proprietary common law trademarks owned by the Company and must not be used without written permission. 90 | 91 | The Company shall own and retain all right, title and interest in and to all Intellectual Property Rights related to the Software, the Documentation and all improvements to any of them however so created. You do not acquire any other rights, express or implied, in the Software. ALL RIGHTS NOT EXPRESSLY GRANTED HEREUNDER ARE RESERVED TO THE COMPANY. 92 | 93 | ### 3.2 ARCHIVAL OR BACKUP COPIES 94 | 95 | You may copy the Software for backup and archival purposes only, provided that the original and each copy is kept in your possession and that your installation and use of the Software does not exceed that allowed in the "License Grant" section above. 96 | 97 | ### 3.3 THINGS YOU MUST NOT DO 98 | 99 | The Software and Documentation are protected by Australian and international copyright law. You must treat the Software and Documentation like any other copyrighted material—for example, a book. You may not: 100 | 101 | * copy the Documentation, 102 | * copy the Software except to make archival or backup copies as provided above, 103 | * modify or adapt the Software or merge it into another program, 104 | * reverse engineer, disassemble, decompile or make any attempt to discover the source code of the Software, 105 | * place the Software onto a server so that it is accessible via a public network such as the Internet, or 106 | * sublicense, rent, lease, sublicense or lend any portion of the Software or Documentation. 107 | 108 | ### 3.4 LIMITATION OF LICENSE VALIDITY 109 | 110 | Any License to use the Software granted to you under this License Agreement is limited to the current major release of the Software exclusively. The Company will at its sole discretion decide when a version of the Software will be considered a new major release. The Company reserves the right to change the terms of this agreement in any future major or minor release of the software. 111 | 112 | ### 3.5 ADDITIONAL SERVICES 113 | 114 | Fees may apply for additional services and products offered by the company and others, such as services that integrate with the Software or extend the functionality of the Software. 115 | 116 | ### 3.6 TECHNICAL AND RELATED INFORMATION 117 | 118 | The Company and its subsidiaries may collect and use technical and related information, such as technical information concerning your computer, system and application software. The Company does not collect (a) any information that identifies your work, (b) any file names or file contents of anything you work on using the Software. The Company and its subsidiaries are free to use the collected information in any form that does not personally identify you. 119 | 120 | ### 3.7 PRIVACY 121 | 122 | The Company will not sell or in any way license usage of your personal information to third parties. The Company will make reasonable efforts to keep your personal information secure. 123 | 124 | ### 3.8 TRANSFERS 125 | 126 | With prior notice to the Company, you may transfer all your rights to use the Software and Documentation only once and permanently to another person or legal entity provided you transfer this License Agreement, the Software and Documentation, including all copies, updates and prior versions to such person or entity and that you retain no copies, including copies stored on computer. The receiving person or legal entity must satisfy the conditions of the applicable license terms set out in section 2. 127 | 128 | ### 3.9 LIMITED WARRANTY 129 | 130 | We warrant that for a period of 14 days after delivery of this copy of the Software to you the Software will perform in substantial accordance with the Documentation. 131 | 132 | To the extent permitted by applicable law, THE FOREGOING LIMITED WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, AND WE DISCLAIM ANY AND ALL IMPLIED WARRANTIES OR CONDITIONS, INCLUDING ANY IMPLIED WARRANTY OF TITLE, NONINFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, regardless of whether we know or had reason to know of your particular needs. No employee, agent, dealer or distributor of ours is authorized to modify this limited warranty, nor to make any additional warranties. 133 | SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. 134 | 135 | ### 3.10 LIMITED REMEDY 136 | 137 | Our entire liability and your exclusive remedy for breach of the foregoing warranty shall be, at our option, to return the price you paid minus fees incurred to transfer those funds to you. 138 | 139 | IN NO EVENT WILL WE BE LIABLE TO YOU FOR ANY DIRECT OR INDIRECT DAMAGES, INCLUDING ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING FROM THE USE OR THE INABILITY TO USE THE SOFTWARE (EVEN IF WE OR AN AUTHORIZED DEALER OR DISTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF THESE DAMAGES), OR FOR ANY CLAIM BY ANY OTHER PARTY. 140 | SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. 141 | 142 | ### 3.11 TERM AND TERMINATION 143 | 144 | This license agreement takes effect upon your use of the software and remains effective until terminated. You may terminate it at any time by destroying all copies of the Software and Documentation in your possession. It will also automatically terminate if you fail to comply with any term or condition of this license agreement. You hereby agree that on termination of this license to permanently destroy all copies of the Software and Documentation in your possession. 145 | 146 | ### 3.12 CONFIDENTIALITY 147 | 148 | The Software contains trade secrets and proprietary know-how that belong to the Company and it is being made available to you in strict confidence. ANY USE OR DISCLOSURE OF THE SOFTWARE, OR OF ITS ALGORITHMS, PROTOCOLS OR INTERFACES, OTHER THAN IN STRICT ACCORDANCE WITH THIS LICENSE AGREEMENT, MAY BE ACTIONABLE AS A VIOLATION OF THE COMPANY'S TRADE SECRET RIGHTS. 149 | 150 | ### 3.13 GENERAL PROVISIONS 151 | 152 | __3.13.1__ This written license agreement is the exclusive agreement between you and the Company concerning the Software and Documentation and supersedes any prior purchase order, communication, advertising or representation concerning the Software. 153 | 154 | __3.13.2__ This is the entire agreement between the parties relating to the subject matter hereof and all other terms are rejected. No waiver or modification of this Agreement shall be valid unless in writing signed by each party. The waiver of a breach of any term hereof shall in no way be construed as a waiver of any term or other breach hereof. If any provision of this Agreement is held by a court of competent jurisdiction to be contrary to law the remaining provisions of this Agreement shall remain in full force and effect. 155 | 156 | __3.13.3__ In the event of litigation between you and the Company concerning the Software or Documentation, the prevailing party in the litigation will be entitled to recover attorney fees and expenses from the other party. 157 | 158 | __3.13.4__ This Agreement, and all disputes arising out of or related thereto, shall be governed by and construed under the laws of the State of Victoria, Australia, without reference to conflict of laws principles. All such disputes shall be subject to the exclusive jurisdiction of the state and federal courts located in Australia, and the parties agree and submit to the personal and exclusive jurisdiction and venue of these courts. 159 | 160 | 161 | ## 4. CONTACT INFORMATION 162 | 163 | If you have any questions about this License Agreement, or if you want to contact the Company for any reason, please direct all mail correspondence to: Itty Bitty Apps Pty. Ltd. Level 2, 27 Hardware Lane, Melbourne, Victoria, Australia, 3000, or electronic correspondence to info@ittybittyapps.com. 164 | 165 | Do you agree to be bound by the terms of this agreement? 166 | 167 | Generated by CocoaPods - http://cocoapods.org 168 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-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 | # REVEAL LICENSE AGREEMENT v1.1 18 | 19 | ## NOTICE TO USER: 20 | 21 | This is a legally enforceable agreement between you (__"you"__ or __"yours"__ and other grammatical equivalents) and Itty Bitty Apps Pty Ltd. (__"the Company"__), which covers your use of the Reveal software product that accompanies this Agreement and related software components, which may include associated media, printed materials, and "online" or electronic documentation. All such software and materials are referred to herein as the __"Software"__ or __"the Reveal Software"__. If you do not agree to the terms of this License Agreement, then do not install or use the Software. By explicitly accepting this License Agreement, or by installing, copying, downloading, accessing, or otherwise using the Software, you are acknowledging and agreeing to be bound by the following terms: 22 | 23 | ## 1. DEFINITIONS 24 | 25 | __(a) "Software"__ shall mean the Reveal software including any Updates thereto, in object and source form, and the media and Documentation provided by the Company to you and for which you are granted a license pursuant to this Agreement. 26 | 27 | __(b) "Documentation"__ shall mean the printed or online written reference material furnished to you in conjunction with the Software, including, without limitation, instructions, guidelines, and end user guides. 28 | 29 | __(c) "Intellectual Property Rights"__ shall mean all intellectual property rights, including, without limitation, patent, copyright, trademark, and trade secret. 30 | 31 | __(d) "Updates"__ shall mean a modification, error correction, bug fix, new release, or other update to or for the Software. 32 | 33 | 34 | ## 2. LICENSE GRANT 35 | 36 | The Company may, at its sole discretion, grant you a Trial License, a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License. 37 | 38 | If you have not purchased or otherwise rightfully obtained a Personal License, an Educational License, a Commercial Seat License, a Site License or an Enterprise License for the Reveal Software, the Trial License Terms (2.1) are applicable to your use of the Reveal Software. The Trial License Terms are also applicable to any usage of the Reveal Software by you that is not covered under any other licenses you may have. 39 | 40 | The Personal License Terms (2.2) apply if you have a Personal License. The Commercial Seat License Terms (2.3) apply if you have a Commercial Seat License. The Educational License Terms (2.4) apply if you have an Educational License. The Site License Terms (2.5) apply if you have a Site License. The Enterprise License Terms (2.6) apply if you have an Enterprise License. 41 | 42 | The General Terms (3) apply in all cases. 43 | 44 | ### 2.1 TRIAL LICENSE TERMS 45 | 46 | The Company grants you a non-exclusive license to use the Software for time-limited evaluation purposes, only in accordance with the terms and conditions set forth herein. The Software may be used for a period of 30 calendar days from the first time you run the Software. Upon lapse of such trial period all of or part of the functionality of the Software will be disabled automatically. 47 | 48 | If you wish to use the Software after the trial period, you must purchase a Personal License, a Commercial Seat License, an Educational License, a Site License or an Enterprise License. The Company may extend to you an expiring license key, in which event such a license key will be considered a means to extend the trial period under the Trial License Terms. 49 | 50 | 51 | ### 2.2 PERSONAL LICENSE TERMS 52 | 53 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you. Use of the Software under this license may be for both commercial and non-commercial purposes. Personal licences are not available to companies, commercial institutions, government agencies or business entities. 54 | 55 | 56 | ### 2.3 COMMERCIAL SEAT LICENSE TERMS 57 | 58 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 59 | 60 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. A Commercial Seat License must be purchased for every person employed by you or employed by any fully owned subsidiary of yours wishing to use the Software. 61 | 62 | This license is granted exclusively on a per-employee basis within your organisation and is not transferable to another current employee without written permission. 63 | 64 | This License does not allow the use of the Software other than for business purposes of your company. If entering into a Commercial Seat License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 65 | 66 | 67 | ### 2.4 EDUCATIONAL LICENSE TERMS 68 | 69 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License grants you the right to activate and use the Software on no more than 2 computers primarily used by you. 70 | 71 | Educational Licenses are available only to individual students and teaching staff. Use of the Software under this license must be for non-commercial purposes only, including education and research. 72 | 73 | 74 | ### 2.5 SITE LICENSE TERMS 75 | 76 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 77 | 78 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. 79 | 80 | Unless otherwise specified, any Site License you acquire from the Company is valid only for use at the business locations listed on your sales invoice. 81 | 82 | This License does not allow the use of the Software other than for business purposes of your company. If entering into a Site License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 83 | 84 | 85 | ### 2.6 ENTERPRISE LICENSE TERMS 86 | 87 | The Company grants you a non-exclusive license to use the Software, only in accordance with the terms and conditions set forth herein. This License is only available to companies, commercial institutions, government agencies and business entities. 88 | 89 | This License does not allow the Software to be activated and used on computers that are not either a) owned by you, b) owned by any fully owned subsidiary of yours, c) owned by or operated primarily by your employees or employees of any fully owned subsidiary of yours. 90 | 91 | This License allows global use of the Software by all employees or employees of any fully owned subsidiary of the company, commercial institution, government agency or business entity listed in your sales invoice. 92 | 93 | This License does not allow the use of the Software other than for business purposes of your company. If entering into an Enterprise License you personally warrant that you have full legal authority to enter into this agreement on behalf of your employer. 94 | 95 | 96 | ## 3. GENERAL TERMS 97 | 98 | ### 3.1 TITLE 99 | 100 | ‘REVEAL’™ and ‘ITTY BITTY APPS’™ represent proprietary common law trademarks owned by the Company and must not be used without written permission. 101 | 102 | The Company shall own and retain all right, title and interest in and to all Intellectual Property Rights related to the Software, the Documentation and all improvements to any of them however so created. You do not acquire any other rights, express or implied, in the Software. ALL RIGHTS NOT EXPRESSLY GRANTED HEREUNDER ARE RESERVED TO THE COMPANY. 103 | 104 | ### 3.2 ARCHIVAL OR BACKUP COPIES 105 | 106 | You may copy the Software for backup and archival purposes only, provided that the original and each copy is kept in your possession and that your installation and use of the Software does not exceed that allowed in the "License Grant" section above. 107 | 108 | ### 3.3 THINGS YOU MUST NOT DO 109 | 110 | The Software and Documentation are protected by Australian and international copyright law. You must treat the Software and Documentation like any other copyrighted material—for example, a book. You may not: 111 | 112 | * copy the Documentation, 113 | * copy the Software except to make archival or backup copies as provided above, 114 | * modify or adapt the Software or merge it into another program, 115 | * reverse engineer, disassemble, decompile or make any attempt to discover the source code of the Software, 116 | * place the Software onto a server so that it is accessible via a public network such as the Internet, or 117 | * sublicense, rent, lease, sublicense or lend any portion of the Software or Documentation. 118 | 119 | ### 3.4 LIMITATION OF LICENSE VALIDITY 120 | 121 | Any License to use the Software granted to you under this License Agreement is limited to the current major release of the Software exclusively. The Company will at its sole discretion decide when a version of the Software will be considered a new major release. The Company reserves the right to change the terms of this agreement in any future major or minor release of the software. 122 | 123 | ### 3.5 ADDITIONAL SERVICES 124 | 125 | Fees may apply for additional services and products offered by the company and others, such as services that integrate with the Software or extend the functionality of the Software. 126 | 127 | ### 3.6 TECHNICAL AND RELATED INFORMATION 128 | 129 | The Company and its subsidiaries may collect and use technical and related information, such as technical information concerning your computer, system and application software. The Company does not collect (a) any information that identifies your work, (b) any file names or file contents of anything you work on using the Software. The Company and its subsidiaries are free to use the collected information in any form that does not personally identify you. 130 | 131 | ### 3.7 PRIVACY 132 | 133 | The Company will not sell or in any way license usage of your personal information to third parties. The Company will make reasonable efforts to keep your personal information secure. 134 | 135 | ### 3.8 TRANSFERS 136 | 137 | With prior notice to the Company, you may transfer all your rights to use the Software and Documentation only once and permanently to another person or legal entity provided you transfer this License Agreement, the Software and Documentation, including all copies, updates and prior versions to such person or entity and that you retain no copies, including copies stored on computer. The receiving person or legal entity must satisfy the conditions of the applicable license terms set out in section 2. 138 | 139 | ### 3.9 LIMITED WARRANTY 140 | 141 | We warrant that for a period of 14 days after delivery of this copy of the Software to you the Software will perform in substantial accordance with the Documentation. 142 | 143 | To the extent permitted by applicable law, THE FOREGOING LIMITED WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, AND WE DISCLAIM ANY AND ALL IMPLIED WARRANTIES OR CONDITIONS, INCLUDING ANY IMPLIED WARRANTY OF TITLE, NONINFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, regardless of whether we know or had reason to know of your particular needs. No employee, agent, dealer or distributor of ours is authorized to modify this limited warranty, nor to make any additional warranties. 144 | SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. 145 | 146 | ### 3.10 LIMITED REMEDY 147 | 148 | Our entire liability and your exclusive remedy for breach of the foregoing warranty shall be, at our option, to return the price you paid minus fees incurred to transfer those funds to you. 149 | 150 | IN NO EVENT WILL WE BE LIABLE TO YOU FOR ANY DIRECT OR INDIRECT DAMAGES, INCLUDING ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING FROM THE USE OR THE INABILITY TO USE THE SOFTWARE (EVEN IF WE OR AN AUTHORIZED DEALER OR DISTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF THESE DAMAGES), OR FOR ANY CLAIM BY ANY OTHER PARTY. 151 | SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION MAY NOT APPLY TO YOU. 152 | 153 | ### 3.11 TERM AND TERMINATION 154 | 155 | This license agreement takes effect upon your use of the software and remains effective until terminated. You may terminate it at any time by destroying all copies of the Software and Documentation in your possession. It will also automatically terminate if you fail to comply with any term or condition of this license agreement. You hereby agree that on termination of this license to permanently destroy all copies of the Software and Documentation in your possession. 156 | 157 | ### 3.12 CONFIDENTIALITY 158 | 159 | The Software contains trade secrets and proprietary know-how that belong to the Company and it is being made available to you in strict confidence. ANY USE OR DISCLOSURE OF THE SOFTWARE, OR OF ITS ALGORITHMS, PROTOCOLS OR INTERFACES, OTHER THAN IN STRICT ACCORDANCE WITH THIS LICENSE AGREEMENT, MAY BE ACTIONABLE AS A VIOLATION OF THE COMPANY'S TRADE SECRET RIGHTS. 160 | 161 | ### 3.13 GENERAL PROVISIONS 162 | 163 | __3.13.1__ This written license agreement is the exclusive agreement between you and the Company concerning the Software and Documentation and supersedes any prior purchase order, communication, advertising or representation concerning the Software. 164 | 165 | __3.13.2__ This is the entire agreement between the parties relating to the subject matter hereof and all other terms are rejected. No waiver or modification of this Agreement shall be valid unless in writing signed by each party. The waiver of a breach of any term hereof shall in no way be construed as a waiver of any term or other breach hereof. If any provision of this Agreement is held by a court of competent jurisdiction to be contrary to law the remaining provisions of this Agreement shall remain in full force and effect. 166 | 167 | __3.13.3__ In the event of litigation between you and the Company concerning the Software or Documentation, the prevailing party in the litigation will be entitled to recover attorney fees and expenses from the other party. 168 | 169 | __3.13.4__ This Agreement, and all disputes arising out of or related thereto, shall be governed by and construed under the laws of the State of Victoria, Australia, without reference to conflict of laws principles. All such disputes shall be subject to the exclusive jurisdiction of the state and federal courts located in Australia, and the parties agree and submit to the personal and exclusive jurisdiction and venue of these courts. 170 | 171 | 172 | ## 4. CONTACT INFORMATION 173 | 174 | If you have any questions about this License Agreement, or if you want to contact the Company for any reason, please direct all mail correspondence to: Itty Bitty Apps Pty. Ltd. Level 2, 27 Hardware Lane, Melbourne, Victoria, Australia, 3000, or electronic correspondence to info@ittybittyapps.com. 175 | 176 | Do you agree to be bound by the terms of this agreement? 177 | 178 | Title 179 | Reveal-iOS-SDK 180 | Type 181 | PSGroupSpecifier 182 | 183 | 184 | FooterText 185 | Generated by CocoaPods - http://cocoapods.org 186 | Title 187 | 188 | Type 189 | PSGroupSpecifier 190 | 191 | 192 | StringsTable 193 | Acknowledgements 194 | Title 195 | Acknowledgements 196 | 197 | 198 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods : NSObject 3 | @end 4 | @implementation PodsDummy_Pods 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-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 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${CONFIGURATION_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 | realpath() { 12 | DIRECTORY="$(cd "${1%/*}" && pwd)" 13 | FILENAME="${1##*/}" 14 | echo "$DIRECTORY/$FILENAME" 15 | } 16 | 17 | install_resource() 18 | { 19 | case $1 in 20 | *.storyboard) 21 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 22 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 23 | ;; 24 | *.xib) 25 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 26 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 27 | ;; 28 | *.framework) 29 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 30 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 31 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 32 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 33 | ;; 34 | *.xcdatamodel) 35 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" 36 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" 37 | ;; 38 | *.xcdatamodeld) 39 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" 40 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" 41 | ;; 42 | *.xcmappingmodel) 43 | echo "xcrun mapc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm\"" 44 | xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" 45 | ;; 46 | *.xcassets) 47 | ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") 48 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 49 | ;; 50 | /*) 51 | echo "$1" 52 | echo "$1" >> "$RESOURCES_TO_COPY" 53 | ;; 54 | *) 55 | echo "${PODS_ROOT}/$1" 56 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" 57 | ;; 58 | esac 59 | } 60 | 61 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 62 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 63 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 64 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 65 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 66 | fi 67 | rm -f "$RESOURCES_TO_COPY" 68 | 69 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 70 | then 71 | case "${TARGETED_DEVICE_FAMILY}" in 72 | 1,2) 73 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 74 | ;; 75 | 1) 76 | TARGET_DEVICE_ARGS="--target-device iphone" 77 | ;; 78 | 2) 79 | TARGET_DEVICE_ARGS="--target-device ipad" 80 | ;; 81 | *) 82 | TARGET_DEVICE_ARGS="--target-device mac" 83 | ;; 84 | esac 85 | 86 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 87 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 88 | while read line; do 89 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 90 | XCASSET_FILES+=("$line") 91 | fi 92 | done <<<"$OTHER_XCASSETS" 93 | 94 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 95 | fi 96 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double PodsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char PodsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Reveal-iOS-SDK/Reveal-Framework-iOS-1.6.2" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Reveal-iOS-SDK" 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Reveal-iOS-SDK" 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"z" -framework "CFNetwork" -framework "CoreGraphics" -framework "QuartzCore" -framework "Reveal" 7 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods 8 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods { 2 | umbrella header "Pods-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods/Pods.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods 4 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TagsView by Swift 2 | 3 | ##效果图 4 | 5 | ![](https://github.com/Jatstar/TagsView/blob/master/1.gif) 6 | 7 | ![](https://github.com/Jatstar/TagsView/blob/master/2.gif) 8 | 9 | ## 测试环境 10 | 11 | * Xcode 7.3 12 | 13 | * iOS 9.3 14 | 15 | ## 说明 16 | 17 | * 重用池 18 | 19 | * 4s不卡 20 | 21 | * 响应点击 22 | -------------------------------------------------------------------------------- /podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | pod 'Reveal-iOS-SDK', :configurations => ['Debug'] --------------------------------------------------------------------------------