├── CRYoYoBallAnimation.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── bear.xcuserdatad │ └── xcschemes │ ├── CRYoYoBallAnimation.xcscheme │ └── xcschememanagement.plist ├── CRYoYoBallAnimation.xcworkspace └── contents.xcworkspacedata ├── CRYoYoBallAnimation ├── AppDelegate.h ├── AppDelegate.m ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ └── ReferenceLineBg.imageset │ │ ├── Contents.json │ │ ├── ReferenceLineBg@2x.png │ │ └── ReferenceLineBg@3x.png ├── Base.lproj │ └── LaunchScreen.storyboard ├── Info.plist ├── ViewController.h ├── ViewController.m ├── YoYoView.h ├── YoYoView.m └── main.m ├── Podfile ├── Pods ├── BearSkill │ ├── LICENSE │ ├── Pod │ │ └── Classes │ │ │ ├── AttributeString │ │ │ ├── NSMutableAttributedString+BearSet.h │ │ │ └── NSMutableAttributedString+BearSet.m │ │ │ ├── Constants │ │ │ ├── ApplicationOpenURLManager.h │ │ │ ├── ApplicationOpenURLManager.m │ │ │ ├── BearConstants.h │ │ │ └── BearConstants.m │ │ │ ├── Layout │ │ │ ├── UITableView+BearStoreCellHeight.h │ │ │ ├── UITableView+BearStoreCellHeight.m │ │ │ ├── UIView+BearSet.h │ │ │ └── UIView+BearSet.m │ │ │ └── UI&Extend │ │ │ ├── BearAlertView │ │ │ ├── BearAlertBtnsView.h │ │ │ ├── BearAlertBtnsView.m │ │ │ ├── BearAlertContentView.h │ │ │ ├── BearAlertContentView.m │ │ │ ├── BearAlertView.h │ │ │ └── BearAlertView.m │ │ │ ├── BearCutOutView.h │ │ │ ├── BearCutOutView.m │ │ │ ├── UILabel+BearSet.h │ │ │ ├── UILabel+BearSet.m │ │ │ ├── UITextField+BearLimitLength.h │ │ │ └── UITextField+BearLimitLength.m │ └── README.md ├── Headers │ ├── Private │ │ └── BearSkill │ │ │ ├── ApplicationOpenURLManager.h │ │ │ ├── BearAlertBtnsView.h │ │ │ ├── BearAlertContentView.h │ │ │ ├── BearAlertView.h │ │ │ ├── BearConstants.h │ │ │ ├── BearCutOutView.h │ │ │ ├── NSMutableAttributedString+BearSet.h │ │ │ ├── UILabel+BearSet.h │ │ │ ├── UITableView+BearStoreCellHeight.h │ │ │ ├── UITextField+BearLimitLength.h │ │ │ └── UIView+BearSet.h │ └── Public │ │ └── BearSkill │ │ ├── ApplicationOpenURLManager.h │ │ ├── BearAlertBtnsView.h │ │ ├── BearAlertContentView.h │ │ ├── BearAlertView.h │ │ ├── BearConstants.h │ │ ├── BearCutOutView.h │ │ ├── NSMutableAttributedString+BearSet.h │ │ ├── UILabel+BearSet.h │ │ ├── UITableView+BearStoreCellHeight.h │ │ ├── UITextField+BearLimitLength.h │ │ └── UIView+BearSet.h ├── Local Podspecs │ └── BearSkill.podspec.json ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── bear.xcuserdatad │ │ └── xcschemes │ │ ├── BearSkill.xcscheme │ │ ├── Pods-CRYoYoBallAnimation.xcscheme │ │ └── xcschememanagement.plist └── Target Support Files │ ├── BearSkill │ ├── BearSkill-dummy.m │ ├── BearSkill-prefix.pch │ └── BearSkill.xcconfig │ └── Pods-CRYoYoBallAnimation │ ├── Pods-CRYoYoBallAnimation-acknowledgements.markdown │ ├── Pods-CRYoYoBallAnimation-acknowledgements.plist │ ├── Pods-CRYoYoBallAnimation-dummy.m │ ├── Pods-CRYoYoBallAnimation-frameworks.sh │ ├── Pods-CRYoYoBallAnimation-resources.sh │ ├── Pods-CRYoYoBallAnimation.debug.xcconfig │ └── Pods-CRYoYoBallAnimation.release.xcconfig ├── README.md └── Resource ├── CRYoYoBallAnimation.gif └── footBall.gif /CRYoYoBallAnimation.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0999B8D11ECCA46E00D9F241 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0999B8D01ECCA46E00D9F241 /* main.m */; }; 11 | 0999B8D41ECCA46E00D9F241 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 0999B8D31ECCA46E00D9F241 /* AppDelegate.m */; }; 12 | 0999B8D71ECCA46E00D9F241 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0999B8D61ECCA46E00D9F241 /* ViewController.m */; }; 13 | 0999B8DC1ECCA46F00D9F241 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0999B8DB1ECCA46F00D9F241 /* Assets.xcassets */; }; 14 | 0999B8DF1ECCA46F00D9F241 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0999B8DD1ECCA46F00D9F241 /* LaunchScreen.storyboard */; }; 15 | 0999B8E81ECCA80200D9F241 /* YoYoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0999B8E71ECCA80200D9F241 /* YoYoView.m */; }; 16 | 0999B8F01ECE7D2600D9F241 /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 0999B8EF1ECE7D2600D9F241 /* README.md */; }; 17 | E29521C7C8CFD1AF6EAA648E /* libPods-CRYoYoBallAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCD0DEBF046B200D8DA6D715 /* libPods-CRYoYoBallAnimation.a */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 0999B8CC1ECCA46E00D9F241 /* CRYoYoBallAnimation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CRYoYoBallAnimation.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 0999B8D01ECCA46E00D9F241 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 23 | 0999B8D21ECCA46E00D9F241 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 24 | 0999B8D31ECCA46E00D9F241 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 25 | 0999B8D51ECCA46E00D9F241 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 26 | 0999B8D61ECCA46E00D9F241 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 27 | 0999B8DB1ECCA46F00D9F241 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 0999B8DE1ECCA46F00D9F241 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | 0999B8E01ECCA46F00D9F241 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | 0999B8E61ECCA80200D9F241 /* YoYoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YoYoView.h; sourceTree = ""; }; 31 | 0999B8E71ECCA80200D9F241 /* YoYoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YoYoView.m; sourceTree = ""; }; 32 | 0999B8EF1ECE7D2600D9F241 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 33 | 275B6ADB5F3BF7B9E40BF7EA /* Pods-CRYoYoBallAnimation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CRYoYoBallAnimation.release.xcconfig"; path = "Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation.release.xcconfig"; sourceTree = ""; }; 34 | 88F21C60553999BBDEE19AC7 /* Pods-CRYoYoBallAnimation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CRYoYoBallAnimation.debug.xcconfig"; path = "Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation.debug.xcconfig"; sourceTree = ""; }; 35 | CCD0DEBF046B200D8DA6D715 /* libPods-CRYoYoBallAnimation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-CRYoYoBallAnimation.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | /* End PBXFileReference section */ 37 | 38 | /* Begin PBXFrameworksBuildPhase section */ 39 | 0999B8C91ECCA46E00D9F241 /* Frameworks */ = { 40 | isa = PBXFrameworksBuildPhase; 41 | buildActionMask = 2147483647; 42 | files = ( 43 | E29521C7C8CFD1AF6EAA648E /* libPods-CRYoYoBallAnimation.a in Frameworks */, 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | 0999B8C31ECCA46E00D9F241 = { 51 | isa = PBXGroup; 52 | children = ( 53 | 0999B8EF1ECE7D2600D9F241 /* README.md */, 54 | 0999B8CE1ECCA46E00D9F241 /* CRYoYoBallAnimation */, 55 | 0999B8CD1ECCA46E00D9F241 /* Products */, 56 | 2147B89E7495940594040E36 /* Pods */, 57 | 1CED3C2E19B29B21DC876030 /* Frameworks */, 58 | ); 59 | sourceTree = ""; 60 | }; 61 | 0999B8CD1ECCA46E00D9F241 /* Products */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | 0999B8CC1ECCA46E00D9F241 /* CRYoYoBallAnimation.app */, 65 | ); 66 | name = Products; 67 | sourceTree = ""; 68 | }; 69 | 0999B8CE1ECCA46E00D9F241 /* CRYoYoBallAnimation */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 0999B8D21ECCA46E00D9F241 /* AppDelegate.h */, 73 | 0999B8D31ECCA46E00D9F241 /* AppDelegate.m */, 74 | 0999B8D51ECCA46E00D9F241 /* ViewController.h */, 75 | 0999B8D61ECCA46E00D9F241 /* ViewController.m */, 76 | 0999B8E61ECCA80200D9F241 /* YoYoView.h */, 77 | 0999B8E71ECCA80200D9F241 /* YoYoView.m */, 78 | 0999B8DB1ECCA46F00D9F241 /* Assets.xcassets */, 79 | 0999B8DD1ECCA46F00D9F241 /* LaunchScreen.storyboard */, 80 | 0999B8E01ECCA46F00D9F241 /* Info.plist */, 81 | 0999B8CF1ECCA46E00D9F241 /* Supporting Files */, 82 | ); 83 | path = CRYoYoBallAnimation; 84 | sourceTree = ""; 85 | }; 86 | 0999B8CF1ECCA46E00D9F241 /* Supporting Files */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 0999B8D01ECCA46E00D9F241 /* main.m */, 90 | ); 91 | name = "Supporting Files"; 92 | sourceTree = ""; 93 | }; 94 | 1CED3C2E19B29B21DC876030 /* Frameworks */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | CCD0DEBF046B200D8DA6D715 /* libPods-CRYoYoBallAnimation.a */, 98 | ); 99 | name = Frameworks; 100 | sourceTree = ""; 101 | }; 102 | 2147B89E7495940594040E36 /* Pods */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | 88F21C60553999BBDEE19AC7 /* Pods-CRYoYoBallAnimation.debug.xcconfig */, 106 | 275B6ADB5F3BF7B9E40BF7EA /* Pods-CRYoYoBallAnimation.release.xcconfig */, 107 | ); 108 | name = Pods; 109 | sourceTree = ""; 110 | }; 111 | /* End PBXGroup section */ 112 | 113 | /* Begin PBXNativeTarget section */ 114 | 0999B8CB1ECCA46E00D9F241 /* CRYoYoBallAnimation */ = { 115 | isa = PBXNativeTarget; 116 | buildConfigurationList = 0999B8E31ECCA46F00D9F241 /* Build configuration list for PBXNativeTarget "CRYoYoBallAnimation" */; 117 | buildPhases = ( 118 | EA4B22B7A1CEAB81D417CB24 /* [CP] Check Pods Manifest.lock */, 119 | 0999B8C81ECCA46E00D9F241 /* Sources */, 120 | 0999B8C91ECCA46E00D9F241 /* Frameworks */, 121 | 0999B8CA1ECCA46E00D9F241 /* Resources */, 122 | 5304F843C5BBF1722E21BFDA /* [CP] Embed Pods Frameworks */, 123 | A260B33CC590D8EC04F20772 /* [CP] Copy Pods Resources */, 124 | ); 125 | buildRules = ( 126 | ); 127 | dependencies = ( 128 | ); 129 | name = CRYoYoBallAnimation; 130 | productName = CRYoYoBallAnimation; 131 | productReference = 0999B8CC1ECCA46E00D9F241 /* CRYoYoBallAnimation.app */; 132 | productType = "com.apple.product-type.application"; 133 | }; 134 | /* End PBXNativeTarget section */ 135 | 136 | /* Begin PBXProject section */ 137 | 0999B8C41ECCA46E00D9F241 /* Project object */ = { 138 | isa = PBXProject; 139 | attributes = { 140 | LastUpgradeCheck = 0830; 141 | ORGANIZATIONNAME = Bear; 142 | TargetAttributes = { 143 | 0999B8CB1ECCA46E00D9F241 = { 144 | CreatedOnToolsVersion = 8.3.2; 145 | DevelopmentTeam = VT6HKJNGDV; 146 | ProvisioningStyle = Automatic; 147 | }; 148 | }; 149 | }; 150 | buildConfigurationList = 0999B8C71ECCA46E00D9F241 /* Build configuration list for PBXProject "CRYoYoBallAnimation" */; 151 | compatibilityVersion = "Xcode 3.2"; 152 | developmentRegion = English; 153 | hasScannedForEncodings = 0; 154 | knownRegions = ( 155 | en, 156 | Base, 157 | ); 158 | mainGroup = 0999B8C31ECCA46E00D9F241; 159 | productRefGroup = 0999B8CD1ECCA46E00D9F241 /* Products */; 160 | projectDirPath = ""; 161 | projectRoot = ""; 162 | targets = ( 163 | 0999B8CB1ECCA46E00D9F241 /* CRYoYoBallAnimation */, 164 | ); 165 | }; 166 | /* End PBXProject section */ 167 | 168 | /* Begin PBXResourcesBuildPhase section */ 169 | 0999B8CA1ECCA46E00D9F241 /* Resources */ = { 170 | isa = PBXResourcesBuildPhase; 171 | buildActionMask = 2147483647; 172 | files = ( 173 | 0999B8DF1ECCA46F00D9F241 /* LaunchScreen.storyboard in Resources */, 174 | 0999B8DC1ECCA46F00D9F241 /* Assets.xcassets in Resources */, 175 | ); 176 | runOnlyForDeploymentPostprocessing = 0; 177 | }; 178 | /* End PBXResourcesBuildPhase section */ 179 | 180 | /* Begin PBXShellScriptBuildPhase section */ 181 | 5304F843C5BBF1722E21BFDA /* [CP] Embed Pods Frameworks */ = { 182 | isa = PBXShellScriptBuildPhase; 183 | buildActionMask = 2147483647; 184 | files = ( 185 | ); 186 | inputPaths = ( 187 | ); 188 | name = "[CP] Embed Pods Frameworks"; 189 | outputPaths = ( 190 | ); 191 | runOnlyForDeploymentPostprocessing = 0; 192 | shellPath = /bin/sh; 193 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-frameworks.sh\"\n"; 194 | showEnvVarsInLog = 0; 195 | }; 196 | A260B33CC590D8EC04F20772 /* [CP] Copy Pods Resources */ = { 197 | isa = PBXShellScriptBuildPhase; 198 | buildActionMask = 2147483647; 199 | files = ( 200 | ); 201 | inputPaths = ( 202 | ); 203 | name = "[CP] Copy Pods Resources"; 204 | outputPaths = ( 205 | ); 206 | runOnlyForDeploymentPostprocessing = 0; 207 | shellPath = /bin/sh; 208 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-resources.sh\"\n"; 209 | showEnvVarsInLog = 0; 210 | }; 211 | EA4B22B7A1CEAB81D417CB24 /* [CP] Check Pods Manifest.lock */ = { 212 | isa = PBXShellScriptBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | inputPaths = ( 217 | ); 218 | name = "[CP] Check Pods Manifest.lock"; 219 | outputPaths = ( 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 224 | showEnvVarsInLog = 0; 225 | }; 226 | /* End PBXShellScriptBuildPhase section */ 227 | 228 | /* Begin PBXSourcesBuildPhase section */ 229 | 0999B8C81ECCA46E00D9F241 /* Sources */ = { 230 | isa = PBXSourcesBuildPhase; 231 | buildActionMask = 2147483647; 232 | files = ( 233 | 0999B8E81ECCA80200D9F241 /* YoYoView.m in Sources */, 234 | 0999B8D71ECCA46E00D9F241 /* ViewController.m in Sources */, 235 | 0999B8F01ECE7D2600D9F241 /* README.md in Sources */, 236 | 0999B8D41ECCA46E00D9F241 /* AppDelegate.m in Sources */, 237 | 0999B8D11ECCA46E00D9F241 /* main.m in Sources */, 238 | ); 239 | runOnlyForDeploymentPostprocessing = 0; 240 | }; 241 | /* End PBXSourcesBuildPhase section */ 242 | 243 | /* Begin PBXVariantGroup section */ 244 | 0999B8DD1ECCA46F00D9F241 /* LaunchScreen.storyboard */ = { 245 | isa = PBXVariantGroup; 246 | children = ( 247 | 0999B8DE1ECCA46F00D9F241 /* Base */, 248 | ); 249 | name = LaunchScreen.storyboard; 250 | sourceTree = ""; 251 | }; 252 | /* End PBXVariantGroup section */ 253 | 254 | /* Begin XCBuildConfiguration section */ 255 | 0999B8E11ECCA46F00D9F241 /* Debug */ = { 256 | isa = XCBuildConfiguration; 257 | buildSettings = { 258 | ALWAYS_SEARCH_USER_PATHS = NO; 259 | CLANG_ANALYZER_NONNULL = YES; 260 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 261 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 262 | CLANG_CXX_LIBRARY = "libc++"; 263 | CLANG_ENABLE_MODULES = YES; 264 | CLANG_ENABLE_OBJC_ARC = YES; 265 | CLANG_WARN_BOOL_CONVERSION = YES; 266 | CLANG_WARN_CONSTANT_CONVERSION = YES; 267 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 268 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 269 | CLANG_WARN_EMPTY_BODY = YES; 270 | CLANG_WARN_ENUM_CONVERSION = YES; 271 | CLANG_WARN_INFINITE_RECURSION = YES; 272 | CLANG_WARN_INT_CONVERSION = YES; 273 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 274 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 275 | CLANG_WARN_UNREACHABLE_CODE = YES; 276 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 277 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 278 | COPY_PHASE_STRIP = NO; 279 | DEBUG_INFORMATION_FORMAT = dwarf; 280 | ENABLE_STRICT_OBJC_MSGSEND = YES; 281 | ENABLE_TESTABILITY = YES; 282 | GCC_C_LANGUAGE_STANDARD = gnu99; 283 | GCC_DYNAMIC_NO_PIC = NO; 284 | GCC_NO_COMMON_BLOCKS = YES; 285 | GCC_OPTIMIZATION_LEVEL = 0; 286 | GCC_PREPROCESSOR_DEFINITIONS = ( 287 | "DEBUG=1", 288 | "$(inherited)", 289 | ); 290 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 291 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 292 | GCC_WARN_UNDECLARED_SELECTOR = YES; 293 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 294 | GCC_WARN_UNUSED_FUNCTION = YES; 295 | GCC_WARN_UNUSED_VARIABLE = YES; 296 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 297 | MTL_ENABLE_DEBUG_INFO = YES; 298 | ONLY_ACTIVE_ARCH = YES; 299 | SDKROOT = iphoneos; 300 | TARGETED_DEVICE_FAMILY = "1,2"; 301 | }; 302 | name = Debug; 303 | }; 304 | 0999B8E21ECCA46F00D9F241 /* Release */ = { 305 | isa = XCBuildConfiguration; 306 | buildSettings = { 307 | ALWAYS_SEARCH_USER_PATHS = NO; 308 | CLANG_ANALYZER_NONNULL = YES; 309 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 310 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 311 | CLANG_CXX_LIBRARY = "libc++"; 312 | CLANG_ENABLE_MODULES = YES; 313 | CLANG_ENABLE_OBJC_ARC = YES; 314 | CLANG_WARN_BOOL_CONVERSION = YES; 315 | CLANG_WARN_CONSTANT_CONVERSION = YES; 316 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 317 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 318 | CLANG_WARN_EMPTY_BODY = YES; 319 | CLANG_WARN_ENUM_CONVERSION = YES; 320 | CLANG_WARN_INFINITE_RECURSION = YES; 321 | CLANG_WARN_INT_CONVERSION = YES; 322 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 323 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 324 | CLANG_WARN_UNREACHABLE_CODE = YES; 325 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 326 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 327 | COPY_PHASE_STRIP = NO; 328 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 329 | ENABLE_NS_ASSERTIONS = NO; 330 | ENABLE_STRICT_OBJC_MSGSEND = YES; 331 | GCC_C_LANGUAGE_STANDARD = gnu99; 332 | GCC_NO_COMMON_BLOCKS = YES; 333 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 334 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 335 | GCC_WARN_UNDECLARED_SELECTOR = YES; 336 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 337 | GCC_WARN_UNUSED_FUNCTION = YES; 338 | GCC_WARN_UNUSED_VARIABLE = YES; 339 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 340 | MTL_ENABLE_DEBUG_INFO = NO; 341 | SDKROOT = iphoneos; 342 | TARGETED_DEVICE_FAMILY = "1,2"; 343 | VALIDATE_PRODUCT = YES; 344 | }; 345 | name = Release; 346 | }; 347 | 0999B8E41ECCA46F00D9F241 /* Debug */ = { 348 | isa = XCBuildConfiguration; 349 | baseConfigurationReference = 88F21C60553999BBDEE19AC7 /* Pods-CRYoYoBallAnimation.debug.xcconfig */; 350 | buildSettings = { 351 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 352 | DEVELOPMENT_TEAM = VT6HKJNGDV; 353 | INFOPLIST_FILE = CRYoYoBallAnimation/Info.plist; 354 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 355 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 356 | PRODUCT_BUNDLE_IDENTIFIER = Bear.CRYoYoBallAnimation; 357 | PRODUCT_NAME = "$(TARGET_NAME)"; 358 | }; 359 | name = Debug; 360 | }; 361 | 0999B8E51ECCA46F00D9F241 /* Release */ = { 362 | isa = XCBuildConfiguration; 363 | baseConfigurationReference = 275B6ADB5F3BF7B9E40BF7EA /* Pods-CRYoYoBallAnimation.release.xcconfig */; 364 | buildSettings = { 365 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 366 | DEVELOPMENT_TEAM = VT6HKJNGDV; 367 | INFOPLIST_FILE = CRYoYoBallAnimation/Info.plist; 368 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 369 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 370 | PRODUCT_BUNDLE_IDENTIFIER = Bear.CRYoYoBallAnimation; 371 | PRODUCT_NAME = "$(TARGET_NAME)"; 372 | }; 373 | name = Release; 374 | }; 375 | /* End XCBuildConfiguration section */ 376 | 377 | /* Begin XCConfigurationList section */ 378 | 0999B8C71ECCA46E00D9F241 /* Build configuration list for PBXProject "CRYoYoBallAnimation" */ = { 379 | isa = XCConfigurationList; 380 | buildConfigurations = ( 381 | 0999B8E11ECCA46F00D9F241 /* Debug */, 382 | 0999B8E21ECCA46F00D9F241 /* Release */, 383 | ); 384 | defaultConfigurationIsVisible = 0; 385 | defaultConfigurationName = Release; 386 | }; 387 | 0999B8E31ECCA46F00D9F241 /* Build configuration list for PBXNativeTarget "CRYoYoBallAnimation" */ = { 388 | isa = XCConfigurationList; 389 | buildConfigurations = ( 390 | 0999B8E41ECCA46F00D9F241 /* Debug */, 391 | 0999B8E51ECCA46F00D9F241 /* Release */, 392 | ); 393 | defaultConfigurationIsVisible = 0; 394 | defaultConfigurationName = Release; 395 | }; 396 | /* End XCConfigurationList section */ 397 | }; 398 | rootObject = 0999B8C41ECCA46E00D9F241 /* Project object */; 399 | } 400 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation.xcodeproj/xcuserdata/bear.xcuserdatad/xcschemes/CRYoYoBallAnimation.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation.xcodeproj/xcuserdata/bear.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | CRYoYoBallAnimation.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 0999B8CB1ECCA46E00D9F241 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @interface AppDelegate () 13 | 14 | @end 15 | 16 | @implementation AppDelegate 17 | 18 | 19 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 20 | 21 | ViewController *vc = [ViewController new]; 22 | 23 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 24 | self.window.rootViewController = vc; 25 | [self.window makeKeyAndVisible]; 26 | 27 | return YES; 28 | } 29 | 30 | 31 | - (void)applicationWillResignActive:(UIApplication *)application { 32 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 33 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 34 | } 35 | 36 | 37 | - (void)applicationDidEnterBackground:(UIApplication *)application { 38 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 39 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 40 | } 41 | 42 | 43 | - (void)applicationWillEnterForeground:(UIApplication *)application { 44 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 45 | } 46 | 47 | 48 | - (void)applicationDidBecomeActive:(UIApplication *)application { 49 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 50 | } 51 | 52 | 53 | - (void)applicationWillTerminate:(UIApplication *)application { 54 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 55 | } 56 | 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/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" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | } 88 | ], 89 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /CRYoYoBallAnimation/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CRYoYoBallAnimation/Assets.xcassets/ReferenceLineBg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "ReferenceLineBg@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "ReferenceLineBg@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /CRYoYoBallAnimation/Assets.xcassets/ReferenceLineBg.imageset/ReferenceLineBg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CRAnimation/CRYoYoBallAnimation/9c7ae9e24efb353c0d4fe7fcf3a01daf148e4f07/CRYoYoBallAnimation/Assets.xcassets/ReferenceLineBg.imageset/ReferenceLineBg@2x.png -------------------------------------------------------------------------------- /CRYoYoBallAnimation/Assets.xcassets/ReferenceLineBg.imageset/ReferenceLineBg@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CRAnimation/CRYoYoBallAnimation/9c7ae9e24efb353c0d4fe7fcf3a01daf148e4f07/CRYoYoBallAnimation/Assets.xcassets/ReferenceLineBg.imageset/ReferenceLineBg@3x.png -------------------------------------------------------------------------------- /CRYoYoBallAnimation/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 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UIStatusBarStyle 30 | UIStatusBarStyleLightContent 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import 11 | #import "BearConstants.h" 12 | #import "YoYoView.h" 13 | 14 | #define color_222222 UIColorFromHEX(0x222222) 15 | #define color_2F2F2F UIColorFromHEX(0x2F2F2F) 16 | 17 | @interface ViewController () 18 | { 19 | YoYoView *_yoyoView; 20 | } 21 | 22 | @end 23 | 24 | @implementation ViewController 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | 29 | self.view.backgroundColor = color_222222; 30 | 31 | [self createUI]; 32 | } 33 | 34 | - (void)createUI 35 | { 36 | _yoyoView = [[YoYoView alloc] initWithFrame:CGRectMake(0, 0, 270, 270)]; 37 | _yoyoView.layer.cornerRadius = 57; 38 | _yoyoView.layer.masksToBounds = YES; 39 | _yoyoView.backgroundColor = color_2F2F2F; 40 | [self.view addSubview:_yoyoView]; 41 | 42 | [_yoyoView BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/YoYoView.h: -------------------------------------------------------------------------------- 1 | // 2 | // YoYoView.h 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YoYoView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/YoYoView.m: -------------------------------------------------------------------------------- 1 | // 2 | // YoYoView.m 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import "YoYoView.h" 10 | #import 11 | #import "BearConstants.h" 12 | 13 | #define color_00E480 UIColorFromHEX(0x00E480) 14 | 15 | @interface YoYoView () 16 | { 17 | CAShapeLayer *_ringLayer; 18 | CAShapeLayer *_ballLayer; 19 | CAShapeLayer *_ballContentLayer; 20 | } 21 | 22 | @end 23 | 24 | @implementation YoYoView 25 | 26 | - (instancetype)initWithFrame:(CGRect)frame 27 | { 28 | self = [super initWithFrame:frame]; 29 | 30 | if (self) { 31 | [self createUI]; 32 | [self startAnimation]; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (void)createUI 39 | { 40 | CGFloat ringLayerRadius = 73; 41 | CGFloat ballLayerRadius = 11; 42 | CGFloat ballContentLayerWidth = 232; 43 | 44 | CGRect ringLayerRect = CGRectMake(0, 0, 2 * ringLayerRadius, 2 * ringLayerRadius); 45 | 46 | UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:ringLayerRect]; 47 | 48 | _ringLayer = [CAShapeLayer layer]; 49 | _ringLayer.path = path.CGPath; 50 | _ringLayer.lineWidth = 22; 51 | _ringLayer.strokeColor = color_00E480.CGColor; 52 | _ringLayer.frame = ringLayerRect; 53 | _ringLayer.fillColor = [UIColor clearColor].CGColor; 54 | _ringLayer.position = CGPointMake(self.width / 2.0, self.height / 2.0); 55 | [self.layer addSublayer:_ringLayer]; 56 | 57 | _ballContentLayer = [CAShapeLayer layer]; 58 | _ballContentLayer.frame = CGRectMake(0, 0, ballContentLayerWidth, ballContentLayerWidth); 59 | //_ballContentLayer.borderWidth = 1; 60 | //_ballContentLayer.borderColor = [UIColor greenColor].CGColor; 61 | _ballContentLayer.position = CGPointMake(self.width / 2.0, self.height / 2.0); 62 | [self.layer addSublayer:_ballContentLayer]; 63 | 64 | [self initRotate]; 65 | 66 | _ballLayer = [CAShapeLayer layer]; 67 | _ballLayer.frame = CGRectMake(0, 0, 2 * ballLayerRadius, 2 * ballLayerRadius); 68 | _ballLayer.cornerRadius = ballLayerRadius; 69 | _ballLayer.backgroundColor = color_00E480.CGColor; 70 | _ballLayer.position = CGPointMake(ballContentLayerWidth / 2.0, 0); 71 | [_ballContentLayer addSublayer:_ballLayer]; 72 | } 73 | 74 | - (void)initRotate 75 | { 76 | CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2 / 2.0); 77 | _ballContentLayer.affineTransform = transform; 78 | } 79 | 80 | - (void)startAnimation 81 | { 82 | CAMediaTimingFunction *timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.79 :0.14 :0.13 :0.83]; 83 | 84 | CABasicAnimation *animation = [CABasicAnimation animation]; 85 | animation.keyPath = @"transform.rotation"; 86 | animation.duration = 2.5 87 | ; 88 | animation.repeatCount = INFINITY; 89 | animation.byValue = @(M_PI * 2); 90 | animation.timingFunction = timingFunction; 91 | [_ballContentLayer addAnimation:animation forKey:animation.keyPath]; 92 | } 93 | 94 | @end 95 | -------------------------------------------------------------------------------- /CRYoYoBallAnimation/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CRYoYoBallAnimation 4 | // 5 | // Created by Bear on 2017/5/17. 6 | // Copyright © 2017年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'CRYoYoBallAnimation' do 5 | 6 | pod ‘BearSkill’, :git => 'https://github.com/BearRan/BearSkill', :commit => '81b9c9a' 7 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 8 | # use_frameworks! 9 | 10 | # Pods for CRYoYoBallAnimation 11 | 12 | end 13 | -------------------------------------------------------------------------------- /Pods/BearSkill/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Bear <648070256@qq.com> 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+BearSet.h 3 | // Pods 4 | // 5 | // Created by apple on 16/5/16. 6 | // 7 | // 8 | 9 | 10 | // 11 | // 富文本设置 12 | // 适用于 UILabel, UITextField, UITextView 13 | // 适用于所有的AttributeString 14 | // 15 | 16 | #import 17 | 18 | @interface NSMutableAttributedString (BearSet) 19 | 20 | // 判断单个字符是否符合某一种正则 21 | - (BOOL)judgeCharacter_regex:(NSString *)regex withStr:(NSString *)str; 22 | 23 | // 对符合正则的字符串中的某些字符进行富文本设置 24 | - (void)setAttributeCharacter_regex:(NSString *)regex font:(UIFont *)font color:(UIColor *)color; 25 | 26 | // 对指定的字符串进行富文本设置 27 | - (void)setAttributeString_specifyStr:(NSString *)specifyStr font:(UIFont *)font color:(UIColor *)color; 28 | 29 | // 设置行间距 30 | - (void)setLineSpacing:(CGFloat)spacing; 31 | 32 | // 设置删除线 33 | - (void)setDeleteLine; 34 | - (void)setDeleteLineWithLineColor:(UIColor *)lineColor; 35 | - (void)setDeleteLineWithRange:(NSRange)range lineColor:(UIColor *)lineColor; 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+BearSet.m 3 | // Pods 4 | // 5 | // Created by apple on 16/5/16. 6 | // 7 | // 8 | 9 | #import "NSMutableAttributedString+BearSet.h" 10 | 11 | @implementation NSMutableAttributedString (BearSet) 12 | 13 | // 判断单个字符是否符合某一种正则 14 | // 演示数据:regex = @"[0-9]|[.]|[+]|[-]"; 15 | - (BOOL)judgeCharacter_regex:(NSString *)regex withStr:(NSString *)str 16 | { 17 | NSPredicate *strPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; 18 | if ([strPredicate evaluateWithObject:str]) { 19 | return YES; 20 | } 21 | 22 | return NO; 23 | } 24 | 25 | // 对符合正则的字符串中的某些字符进行富文本设置 26 | - (void)setAttributeCharacter_regex:(NSString *)regex font:(UIFont *)font color:(UIColor *)color 27 | { 28 | NSString *string = self.string; 29 | 30 | for (int i = 0; i < [string length]; i++) { 31 | NSRange tempRange = NSMakeRange(i, 1); 32 | NSString *tempStr = [string substringWithRange:tempRange]; 33 | if ([self judgeCharacter_regex:regex withStr:tempStr]) { 34 | 35 | if (font) { 36 | [self addAttribute:NSFontAttributeName value:font range:tempRange]; 37 | } 38 | 39 | if (color) { 40 | [self addAttribute:NSForegroundColorAttributeName value:color range:tempRange]; 41 | } 42 | 43 | } 44 | } 45 | } 46 | 47 | // 对指定的字符串进行富文本设置 48 | - (void)setAttributeString_specifyStr:(NSString *)specifyStr font:(UIFont *)font color:(UIColor *)color 49 | { 50 | NSString *string = self.string; 51 | 52 | if ([string rangeOfString:specifyStr].location != NSNotFound) { 53 | 54 | NSRange tempRange = [string rangeOfString:specifyStr]; 55 | 56 | if (font) { 57 | [self addAttribute:NSFontAttributeName value:font range:tempRange]; 58 | } 59 | 60 | if (color) { 61 | [self addAttribute:NSForegroundColorAttributeName value:color range:tempRange]; 62 | } 63 | 64 | } 65 | } 66 | 67 | // 设置行间距 68 | - (void)setLineSpacing:(CGFloat)spacing 69 | { 70 | NSString *labelText = self.string; 71 | 72 | NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 73 | [paragraphStyle setLineSpacing:spacing];//调整行间距 74 | 75 | [self addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])]; 76 | } 77 | 78 | // 设置删除线 79 | - (void)setDeleteLine 80 | { 81 | NSString *string = self.string; 82 | 83 | [self setDeleteLineWithRange:NSMakeRange(0, [string length]) lineColor:[UIColor grayColor]]; 84 | } 85 | 86 | - (void)setDeleteLineWithLineColor:(UIColor *)lineColor 87 | { 88 | NSString *string = self.string; 89 | 90 | [self setDeleteLineWithRange:NSMakeRange(0, [string length]) lineColor:lineColor]; 91 | } 92 | 93 | - (void)setDeleteLineWithRange:(NSRange)range lineColor:(UIColor *)lineColor 94 | { 95 | [self addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:range]; 96 | [self addAttribute:NSStrikethroughColorAttributeName value:lineColor range:range]; 97 | } 98 | 99 | @end 100 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Constants/ApplicationOpenURLManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ApplicationOpenURLManager.h 3 | // Pods 4 | // 5 | // Created by apple on 16/9/18. 6 | // 7 | // 8 | 9 | #import 10 | 11 | static NSString *kPrefs_Privacy = @"prefs:root=Privacy"; 12 | static NSString *kPrefs_Contacts = @"prefs:root=Privacy&path=CONTACTS"; 13 | static NSString *kPrefs_Location = @"prefs:root=LOCATION_SERVICES"; 14 | static NSString *kPrefs_ = @""; 15 | 16 | @interface ApplicationOpenURLManager : NSObject 17 | 18 | // 打开系统设置 19 | + (void)openPrefsURL:(NSString *)openURL; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Constants/ApplicationOpenURLManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // ApplicationOpenURLManager.m 3 | // Pods 4 | // 5 | // Created by apple on 16/9/18. 6 | // 7 | // 8 | 9 | #import "ApplicationOpenURLManager.h" 10 | #import "BearConstants.h" 11 | 12 | @implementation ApplicationOpenURLManager 13 | 14 | // 打开系统设置 15 | + (void)openPrefsURL:(NSString *)openURL 16 | { 17 | NSURL *url; 18 | 19 | if (over_iOS10) { 20 | url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 21 | } 22 | else{ 23 | url = [NSURL URLWithString:openURL]; 24 | } 25 | 26 | if ([[UIApplication sharedApplication] canOpenURL:url]) { 27 | [[UIApplication sharedApplication] openURL:url]; 28 | } 29 | else{ 30 | UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"无法进行跳转,请手动前往设置" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil]; 31 | } 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Constants/BearConstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // BearConstants.h 3 | // Bear 4 | // 5 | // Created by Bear on 30/12/24. 6 | // Copyright © 2015年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | 13 | 14 | // NotificationCenter字段 15 | static NSString *NotificationTest = @"NotificationTest"; 16 | 17 | 18 | // UserDefaults字段 19 | static NSString *usTest = @"usTest"; 20 | 21 | 22 | 23 | /** 24 | * UserDefaults 25 | * 26 | * UDGET 获取UserDefaults数据 27 | * USSET 设置UserDefaults数据 28 | * UDDELETE 删除UserDefaults数据 29 | */ 30 | #define UDGET(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]? [[NSUserDefaults standardUserDefaults] objectForKey:key] : @"" 31 | #define UDSET(value, key) [[NSUserDefaults standardUserDefaults] setObject:value forKey:key] 32 | #define UDDELETE(key) [[NSUserDefaults standardUserDefaults] removeObjectForKey:key]; 33 | 34 | 35 | 36 | /** 37 | * Bear自定义log 38 | */ 39 | #define ShowBearLog 1 40 | #if ShowBearLog 41 | //#define BearLog(FORMAT, ...) fprintf(stderr,"===== Bear Log =====\t\t%s:%d\n%s\n\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]) 42 | #define BearLog(FORMAT, ...) fprintf(stderr,"== Bear ==\t%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]) 43 | #else 44 | #define BearLog(FORMAT, ...) 45 | #endif 46 | 47 | 48 | 49 | /** 50 | * 判断系统版本 51 | * 52 | * 53 | */ 54 | #define SystemVersion [[[UIDevice currentDevice] systemVersion] floatValue] 55 | 56 | #define iOSVersion [[[UIDevice currentDevice] systemVersion] floatValue] 57 | #define over_iOS6 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0) 58 | #define over_iOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 59 | #define over_iOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 60 | #define over_iOS9 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) 61 | #define over_iOS10 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) 62 | 63 | 64 | 65 | /** 66 | * RGB 67 | */ 68 | #define RGB(r, g, b) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:1.0f] 69 | #define RGBAlpha(r, g, b, alpha) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:alpha] 70 | #define UIColorFromHEX(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 71 | 72 | 73 | 74 | /** 75 | * 屏幕尺寸 76 | */ 77 | 78 | // 6p (物理点) 79 | #define WIDTH6P 414.0 80 | #define HEIGHT6P 736.0 81 | 82 | // 6p_N (像素点) 83 | #define NWIDTH6P 1242.0 84 | #define NHEIGHT6P 2208.0 85 | 86 | 87 | // 6 88 | #define WIDTH6 375.0 89 | #define HEIGHT6 667.0 90 | 91 | // 6_N 92 | #define NWIDTH6 750.0 93 | #define NHEIGHT6 1334.0 94 | 95 | 96 | // 5 | 5c | 5s 97 | #define WIDTH5 320.0 98 | #define HEIGHT5 568.0 99 | 100 | // 5 | 5c | 5s _N 101 | #define NWIDTH5 640.0 102 | #define NHEIGHT5 1136.0 103 | 104 | 105 | // 4|4s 106 | #define WIDTH4 320.0 107 | #define HEIGHT4 480.0 108 | 109 | // 4|4s _N 110 | #define NWIDTH4 640.0 111 | #define NHEIGHT4 960.0 112 | 113 | 114 | // 屏幕宽高 115 | #define WIDTH ([UIScreen mainScreen].bounds.size.width) 116 | #define HEIGHT ([UIScreen mainScreen].bounds.size.height) 117 | 118 | // tabbar高度 119 | #define TABBAR_HEIGHT self.tabBarController.tabBar.frame.size.height 120 | 121 | // 状态栏高度 122 | #define STATUS_HEIGHT [[UIApplication sharedApplication] statusBarFrame].size.height 123 | 124 | // Navigationbar高度 125 | #define NAVIGATIONBAR_HEIGHT self.navigationController.navigationBar.frame.size.height 126 | 127 | // Navigationbar高度 128 | #define NAV_44 44 129 | 130 | // Nav+Status 131 | #define NAV_STA (NAVIGATIONBAR_HEIGHT + STATUS_HEIGHT) 132 | 133 | // Nav+Status 134 | #define NAV44_STA (NAV_44 + STATUS_HEIGHT) 135 | 136 | // int 转换 NSNumber 137 | #define IntToNumber(int) [NSNumber numberWithInt:int] 138 | 139 | 140 | 141 | 142 | 143 | // 适配对应 高度 < 5高度时,高度 = 5高度 144 | #define LayOutHeight ((HEIGHT < HEIGHT5) ? HEIGHT5 : HEIGHT) 145 | 146 | // 物理点 为单位 147 | #define XX_4(value) (1.0 * (value) * WIDTH / WIDTH4) 148 | #define XX_5(value) (1.0 * (value) * WIDTH / WIDTH5) 149 | #define XX_6(value) (1.0 * (value) * WIDTH / WIDTH6) 150 | #define XX_6P(value) (1.0 * (value) * WIDTH / WIDTH6P) 151 | 152 | #define YY_4(value) (1.0 * (value) * LayOutHeight / HEIGHT4) 153 | #define YY_5(value) (1.0 * (value) * LayOutHeight / HEIGHT5) 154 | #define YY_6(value) (1.0 * (value) * LayOutHeight / HEIGHT6) 155 | #define YY_6P(value) (1.0 * (value) * LayOutHeight / HEIGHT6P) 156 | 157 | 158 | // 像素点 为单位 159 | #define XX_4N(value) (1.0 * (value) * WIDTH / NWIDTH4) 160 | #define XX_5N(value) (1.0 * (value) * WIDTH / NWIDTH5) 161 | #define XX_6N(value) (1.0 * (value) * WIDTH / NWIDTH6) 162 | #define XX_6PN(value) (1.0 * (value) * WIDTH / NWIDTH6P) 163 | 164 | #define YY_4N(value) (1.0 * (value) * LayOutHeight / NHEIGHT4) 165 | #define YY_5N(value) (1.0 * (value) * LayOutHeight / NHEIGHT5) 166 | #define YY_6N(value) (1.0 * (value) * LayOutHeight / NHEIGHT6) 167 | #define YY_6PN(value) (1.0 * (value) * LayOutHeight / NHEIGHT6P) 168 | 169 | 170 | // AppDelegate 171 | #define JKZJAPP_Delegate (AppDelegate *)[[UIApplication sharedApplication] delegate] 172 | 173 | 174 | // Font 175 | #define SystemFont(value) [UIFont systemFontOfSize:value] 176 | #define FontSize(value) [UIFont systemFontOfSize:(CGFloat)floor(value)] 177 | #define FontSize_4(value) FontSize(XX_4(value)) 178 | #define FontSize_5(value) FontSize(XX_5(value)) 179 | #define FontSize_6(value) FontSize(XX_6(value)) 180 | #define FontSize_6P(value) FontSize(XX_6P(value)) 181 | 182 | 183 | 184 | 185 | @interface BearConstants : NSObject 186 | 187 | // 获取当前时间,日期 188 | + (NSString *)getCurrentTimeStr; 189 | 190 | // dict取值并判断是否为空 191 | + (id)setDataWithDict:(NSDictionary *)dict keyStr:(NSString *)keyStr; 192 | 193 | // dict取值并判断是否为空,string类型专用 194 | + (NSString *)setStringWithDict:(NSDictionary *)dict keyStr:(NSString *)keyStr; 195 | 196 | // 防止字符串为 197 | + (NSString *)avoidStringCrash:(id)string; 198 | 199 | // 判断字符串是否为空 200 | + (BOOL)judgeStringExist:(id)string; 201 | 202 | // 判断数组里的字符串是否都存在 203 | + (BOOL)judgeStringExistFromArray:(NSArray *)array; 204 | 205 | // 判断dict中是否包含某字段 206 | + (BOOL)judgeDictHaveStr:(NSString *)keyStr dict:(NSDictionary *)dict; 207 | 208 | // 从URL获取图片 209 | + (UIImage *)getImageFromURL:(NSString *)imageURL; 210 | 211 | // 修改iamge尺寸 212 | + (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)newsize; 213 | 214 | // 验证姓名 215 | + (BOOL)validateNameString:(NSString *)nameStr; 216 | 217 | // 验证手机号码 218 | + (BOOL)validatePhoneString:(NSString *)phoneStr; 219 | 220 | /** 221 | * Block Demo 222 | */ 223 | + (void)requestClearMessage:(NSNumber *)notificationId success:(void (^) ())success failure:(void (^) ())failure; 224 | 225 | // 延时block 226 | + (void)delayAfter:(CGFloat)delayTime dealBlock:(void (^)())dealBlock; 227 | 228 | @end 229 | 230 | 231 | 232 | 233 | 234 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Constants/BearConstants.m: -------------------------------------------------------------------------------- 1 | // 2 | // BearConstants.m 3 | // Bear 4 | // 5 | // Created by Bear on 30/12/24. 6 | // Copyright © 2015年 Bear. All rights reserved. 7 | // 8 | 9 | #import "BearConstants.h" 10 | 11 | @implementation BearConstants 12 | 13 | // 获取当前时间,日期 14 | + (NSString *)getCurrentTimeStr 15 | { 16 | NSDate *currentDate = [NSDate date]; 17 | NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 18 | [dateFormatter setDateFormat:@"YYYY/MM/dd hh:mm:ss"]; 19 | NSString *dateString = [dateFormatter stringFromDate:currentDate]; 20 | NSLog(@"dateString:%@",dateString); 21 | 22 | return dateString; 23 | } 24 | 25 | // dict取值并判断是否为空 26 | + (id)setDataWithDict:(NSDictionary *)dict keyStr:(NSString *)keyStr 27 | { 28 | if (nil != [dict objectForKey:keyStr] && ![[dict objectForKey:keyStr] isEqual:[NSNull null]]) { 29 | return [dict objectForKey:keyStr]; 30 | } 31 | 32 | return nil; 33 | } 34 | 35 | // dict取值并判断是否为空,string类型专用 36 | + (NSString *)setStringWithDict:(NSDictionary *)dict keyStr:(NSString *)keyStr 37 | { 38 | if (nil != [dict objectForKey:keyStr] && ![[dict objectForKey:keyStr] isEqual:[NSNull null]]) { 39 | return [NSString stringWithFormat:@"%@", [dict objectForKey:keyStr]]; 40 | } 41 | 42 | return nil; 43 | } 44 | 45 | // 防止字符串为 46 | + (NSString *)avoidStringCrash:(id)string 47 | { 48 | if (string && string != nil) { 49 | NSString *tempStr = [NSString stringWithFormat:@"%@", string]; 50 | if ([tempStr isEqualToString:@""]) { 51 | return @""; 52 | } 53 | return tempStr; 54 | } 55 | 56 | return @""; 57 | } 58 | 59 | // 判断字符串是否为空 60 | + (BOOL)judgeStringExist:(id)string 61 | { 62 | if (string && string != nil) { 63 | if ([string isKindOfClass:[NSString class]]) { 64 | if ([string isEqualToString:@""]) { 65 | return NO; 66 | } 67 | } 68 | 69 | NSString *tempStr = [NSString stringWithFormat:@"%@", string]; 70 | if ([tempStr length] > 0) { 71 | return YES; 72 | } 73 | } 74 | 75 | return NO; 76 | } 77 | 78 | // 判断数组里的字符串是否都存在 79 | + (BOOL)judgeStringExistFromArray:(NSArray *)array 80 | { 81 | if (!array || [array count] == 0) { 82 | return NO; 83 | } 84 | 85 | for (id str in array) { 86 | if (![self judgeStringExist:str]) { 87 | return NO; 88 | } 89 | } 90 | 91 | return YES; 92 | } 93 | 94 | // 判断dict中是否包含某字段 95 | + (BOOL)judgeDictHaveStr:(NSString *)keyStr dict:(NSDictionary *)dict 96 | { 97 | if ([[dict allKeys]containsObject:keyStr]&&![[dict objectForKey:keyStr] isEqual:[NSNull null]]&&[dict objectForKey:keyStr]) 98 | { 99 | return YES; 100 | } 101 | 102 | return NO; 103 | } 104 | 105 | // 从URL获取图片 106 | + (UIImage *)getImageFromURL:(NSString *)imageURL 107 | { 108 | if ([imageURL rangeOfString:@"http://"].location != NSNotFound || [imageURL rangeOfString:@"https://"].location != NSNotFound) { 109 | __block UIImage *image = [[UIImage alloc] init]; 110 | dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 111 | image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]]; 112 | }); 113 | return image; 114 | } 115 | 116 | return nil; 117 | } 118 | 119 | // 修改iamge尺寸 120 | + (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)newsize 121 | { 122 | // 创建一个bitmap的context 123 | // 并把它设置成为当前正在使用的context 124 | UIGraphicsBeginImageContext(newsize); 125 | // 绘制改变大小的图片 126 | [img drawInRect:CGRectMake(0, 0, newsize.width, newsize.height)]; 127 | // 从当前context中创建一个改变大小后的图片 128 | UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 129 | // 使当前的context出堆栈 130 | UIGraphicsEndImageContext(); 131 | // 返回新的改变大小后的图片 132 | return scaledImage; 133 | } 134 | 135 | // 验证姓名 136 | + (BOOL)validateNameString:(NSString *)nameStr 137 | { 138 | if ([nameStr length] > 0 && [nameStr length] < 10) { 139 | //數字條件 140 | NSRegularExpression *tNumRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:NSRegularExpressionCaseInsensitive error:nil]; 141 | 142 | //符合數字條件的有幾個字元 143 | NSUInteger tNumMatchCount = [tNumRegularExpression numberOfMatchesInString:nameStr 144 | options:NSMatchingReportProgress 145 | range:NSMakeRange(0, nameStr.length)]; 146 | 147 | if (tNumMatchCount == 0) { 148 | return YES; 149 | } 150 | } 151 | 152 | return NO; 153 | } 154 | 155 | // 验证手机号码 156 | + (BOOL)validatePhoneString:(NSString *)phoneStr 157 | { 158 | if ([phoneStr length] == 11) { 159 | //數字條件 160 | NSRegularExpression *tNumRegularExpression = [NSRegularExpression regularExpressionWithPattern:@"[0-9]" options:NSRegularExpressionCaseInsensitive error:nil]; 161 | //符合數字條件的有幾個字元 162 | NSUInteger tNumMatchCount = [tNumRegularExpression numberOfMatchesInString:phoneStr 163 | options:NSMatchingReportProgress 164 | range:NSMakeRange(0, phoneStr.length)]; 165 | 166 | if (tNumMatchCount == 11) { 167 | return YES; 168 | } 169 | } 170 | 171 | return NO; 172 | } 173 | 174 | /** 175 | * Block Demo 176 | */ 177 | + (void)requestClearMessage:(NSNumber *)notificationId success:(void (^) ())success failure:(void (^) ())failure 178 | { 179 | 180 | if (success) { 181 | success(); 182 | } 183 | 184 | if (failure) { 185 | failure(); 186 | } 187 | } 188 | 189 | // 延时block 190 | + (void)delayAfter:(CGFloat)delayTime dealBlock:(void (^)())dealBlock 191 | { 192 | dispatch_time_t timer = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime *NSEC_PER_SEC)); 193 | dispatch_after(timer, dispatch_get_main_queue(), ^{ 194 | 195 | if (dealBlock) { 196 | dealBlock(); 197 | } 198 | }); 199 | } 200 | 201 | @end 202 | 203 | 204 | 205 | 206 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Layout/UITableView+BearStoreCellHeight.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+BearStoreCellHeight.h 3 | // Pods 4 | // 5 | // Created by apple on 16/5/16. 6 | // 7 | // 8 | 9 | 10 | // 11 | // 本方法可以方便记录,获取UITableViewCell的高度,尺寸 12 | // 13 | 14 | #import 15 | 16 | @interface UITableView (BearStoreCellHeight) 17 | 18 | @property (copy, nonatomic) NSMutableDictionary *cellFrameDict; 19 | 20 | // 根据indexPath获取对应的高度 21 | // 如果之前没有记录,默认返回10 22 | - (CGFloat)getHeightForRowAtIndexPath:(NSIndexPath *)indexPath; 23 | 24 | // 根据indexPath获取对应的frame 25 | // 如果之前没有记录,默认返回(0, 0, 10, 10) 26 | - (CGRect)getFrameForRowAtIndexPath:(NSIndexPath *)indexPath; 27 | 28 | // 将cell的frame存储到对应的indexPath 29 | - (void)recordingFrame:(CGRect)frame forRowAtIndexPath:(NSIndexPath *)indexPath; 30 | 31 | // 将cell的Height存储到对应的indexPath 32 | - (void)recordingHeight:(CGFloat)height forRowAtIndexPath:(NSIndexPath *)indexPath; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Layout/UITableView+BearStoreCellHeight.m: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+BearStoreCellHeight.m 3 | // Pods 4 | // 5 | // Created by apple on 16/5/16. 6 | // 7 | // 8 | 9 | #import "UITableView+BearStoreCellHeight.h" 10 | #import "objc/runtime.h" 11 | #import "BearConstants.h" 12 | 13 | static const void *cellFrameDictKey = &cellFrameDictKey; 14 | 15 | @implementation UITableView (BearStoreCellHeight) 16 | 17 | - (NSDictionary *)cellFrameDict 18 | { 19 | return objc_getAssociatedObject(self, cellFrameDictKey); 20 | } 21 | 22 | - (void)setCellFrameDict:(NSDictionary *)cellFrameDict 23 | { 24 | objc_setAssociatedObject(self, cellFrameDictKey, cellFrameDict, OBJC_ASSOCIATION_COPY_NONATOMIC); 25 | } 26 | 27 | // 根据indexPath获取对应的高度 28 | // 如果之前没有记录,默认返回10 29 | - (CGFloat)getHeightForRowAtIndexPath:(NSIndexPath *)indexPath 30 | { 31 | if (!self.cellFrameDict) { 32 | self.cellFrameDict = [[NSMutableDictionary alloc] init]; 33 | } 34 | 35 | NSString *indexPathStr = [self indexPathToStr:indexPath]; 36 | if ([self.cellFrameDict objectForKey:indexPathStr]) { 37 | CGRect tempRect = [[self.cellFrameDict objectForKey:indexPathStr] CGRectValue]; 38 | return tempRect.size.height; 39 | } 40 | 41 | return 10; 42 | } 43 | 44 | // 根据indexPath获取对应的frame 45 | // 如果之前没有记录,默认返回(0, 0, 10, 10) 46 | - (CGRect)getFrameForRowAtIndexPath:(NSIndexPath *)indexPath 47 | { 48 | if (!self.cellFrameDict) { 49 | self.cellFrameDict = [[NSMutableDictionary alloc] init]; 50 | } 51 | 52 | NSString *indexPathStr = [self indexPathToStr:indexPath]; 53 | if ([self.cellFrameDict objectForKey:indexPathStr]) { 54 | CGRect tempRect = [[self.cellFrameDict objectForKey:indexPathStr] CGRectValue]; 55 | return tempRect; 56 | } 57 | 58 | return CGRectMake(0, 0, 10, 10); 59 | } 60 | 61 | // 将cell的frame存储到对应的indexPath 62 | - (void)recordingFrame:(CGRect)frame forRowAtIndexPath:(NSIndexPath *)indexPath 63 | { 64 | if (!self.cellFrameDict) { 65 | self.cellFrameDict = [[NSMutableDictionary alloc] init]; 66 | } 67 | 68 | NSString *indexPath_Key = [self indexPathToStr:indexPath]; 69 | NSValue *tempRect_Value = [NSValue valueWithCGRect:frame]; 70 | 71 | NSMutableDictionary *tempDict = [self.cellFrameDict mutableCopy]; 72 | [tempDict setObject:tempRect_Value forKey:indexPath_Key]; 73 | self.cellFrameDict = tempDict; 74 | } 75 | 76 | // 将cell的Height存储到对应的indexPath 77 | - (void)recordingHeight:(CGFloat)height forRowAtIndexPath:(NSIndexPath *)indexPath 78 | { 79 | CGRect frame = CGRectMake(0, 0, WIDTH, height); 80 | [self recordingFrame:frame forRowAtIndexPath:indexPath]; 81 | } 82 | 83 | 84 | 85 | 86 | // 索引转字符串 87 | - (NSString *)indexPathToStr:(NSIndexPath *)indexPath 88 | { 89 | NSString *resultStr = [NSString stringWithFormat:@"%ld-%ld", (long)indexPath.section, (long)indexPath.row]; 90 | return resultStr; 91 | } 92 | 93 | // 字符串转索引 94 | - (NSIndexPath *)strToIndexPath:(NSString *)str 95 | { 96 | NSArray *strArray = [str componentsSeparatedByString:@"-"]; 97 | NSInteger section = [strArray[0] integerValue]; 98 | NSInteger row = [strArray[1] integerValue]; 99 | NSIndexPath *resultIndexPath = [NSIndexPath indexPathForRow:row inSection:section]; 100 | 101 | return resultIndexPath; 102 | } 103 | 104 | @end 105 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/Layout/UIView+BearSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIView+BearSet.h 3 | // 4 | // Created by bear on 15/11/25. 5 | // Copyright (c) 2015年 Bear. All rights reserved. 6 | // 7 | 8 | #import 9 | 10 | typedef NS_ENUM(NSUInteger, kAXIS) { 11 | kAXIS_Y, 12 | kAXIS_X, 13 | kAXIS_X_Y, 14 | }; 15 | 16 | typedef NS_ENUM(NSUInteger, kLAYOUT_AXIS) { 17 | kLAYOUT_AXIS_Y, 18 | kLAYOUT_AXIS_X, 19 | }; 20 | 21 | typedef NS_ENUM(NSUInteger, kDIRECTION) { 22 | kDIR_LEFT, 23 | kDIR_RIGHT, 24 | kDIR_UP, 25 | kDIR_DOWN, 26 | }; 27 | 28 | typedef NS_ENUM(NSUInteger, SetNeedWHSort) { 29 | kSetNeed_Width, 30 | kSetNeed_Height, 31 | }; 32 | 33 | // 设置对齐类型 34 | typedef NS_ENUM(NSUInteger, SetAlignmentType) { 35 | kSetAlignmentType_Idle, // 不处理对齐方式 36 | kSetAlignmentType_Center, // 剧中对齐 37 | kSetAlignmentType_Start, // 上/左对齐 38 | kSetAlignmentType_End, // 下/右对齐 39 | }; 40 | 41 | // offParameter结构体 42 | struct OffPara 43 | { 44 | CGFloat offStart; 45 | CGFloat offEnd; 46 | BOOL autoCalu; 47 | }; 48 | typedef struct OffPara OffPara; 49 | 50 | // offParameter内联 51 | CG_INLINE OffPara 52 | OffParaMake(CGFloat offStart, CGFloat offEnd, BOOL autoCalu) 53 | { 54 | OffPara offPara; 55 | offPara.offStart = offStart; 56 | offPara.offEnd = offEnd; 57 | offPara.autoCalu = autoCalu; 58 | return offPara; 59 | } 60 | 61 | 62 | // gapParameter结构体 63 | struct GapPara 64 | { 65 | CGFloat gapDistance; 66 | BOOL autoCalu; 67 | }; 68 | typedef struct GapPara GapPara; 69 | 70 | // gapParameter内联 71 | CG_INLINE GapPara 72 | GapParaMake(CGFloat gapDistance, BOOL autoCalu) 73 | { 74 | GapPara gapPara; 75 | gapPara.gapDistance = gapDistance; 76 | gapPara.autoCalu = autoCalu; 77 | return gapPara; 78 | } 79 | 80 | 81 | @interface UIView (BearSet) 82 | 83 | /** 84 | * 普通的方法 85 | */ 86 | 87 | // 描边 88 | - (void)setLine:(UIColor *)color cornerRadius:(NSUInteger)cornerRadius borderWidth:(CGFloat)borderWidth; 89 | 90 | // 毛玻璃效果处理 91 | - (void)blurEffectWithStyle:(UIBlurEffectStyle)style Alpha:(CGFloat)alpha; 92 | 93 | // 设置边框 94 | - (void)setMyBorder:(UIColor *)borderColor borderWidth:(CGFloat)borderWidth; 95 | 96 | // 自定义分割线View OffY 97 | - (void)setMySeparatorLineOffY:(int)offStart offEnd:(int)offEnd lineWidth:(CGFloat)lineWidth lineColor:(UIColor *)lineColor offY:(CGFloat)offY; 98 | 99 | // 自定义底部分割线View 100 | - (void)setMySeparatorLine:(CGFloat)offStart offEnd:(CGFloat)offEnd lineWidth:(CGFloat)lineWidth lineColor:(UIColor *)lineColor; 101 | 102 | /** 103 | * 画线--View 104 | * 通过view,画横向/纵向的线 105 | * 106 | * @param startPoint 起点 107 | * @param endPoint 终点 108 | * @param lineWidth 线宽 109 | * @param lineColor 线颜色 110 | * 111 | * @return view上绘制的线view 112 | */ 113 | - (UIView *)drawLine:(CGPoint)startPoint 114 | endPoint:(CGPoint)endPoint 115 | lineWidth:(CGFloat)lineWidth 116 | lineColor:(UIColor *)lineColor; 117 | 118 | // 通过layer,画任意方向的线 119 | - (void)drawLineWithLayer:(CGPoint)startPoint endPoint:(CGPoint)endPoint lineWidth:(CGFloat)lineWidth lineColor:(UIColor *)lineColor; 120 | 121 | /** 122 | * 在View中绘制虚线 123 | * 124 | * @param axis 横向/纵向绘制虚线 125 | * @param dashColor 虚线颜色 126 | * @param dashPattern 虚线间距数组,默认@[@3, @3] 127 | */ 128 | - (void)drawDashLineWithAxis:(kLAYOUT_AXIS)axis 129 | dashColor:(UIColor *)dashColor 130 | dashPattern:(NSArray *)dashPattern; 131 | 132 | 133 | 134 | 135 | /** 136 | * 布局扩展方法 137 | */ 138 | 139 | 140 | // Getter 141 | 142 | - (CGFloat)x; 143 | - (CGFloat)y; 144 | - (CGFloat)maxX; 145 | - (CGFloat)maxY; 146 | - (CGFloat)width; 147 | - (CGFloat)height; 148 | - (CGPoint)origin; 149 | - (CGSize)size; 150 | 151 | - (CGFloat)centerX; 152 | - (CGFloat)centerY; 153 | 154 | 155 | //Setter 156 | 157 | - (void)setX:(CGFloat)x; 158 | - (void)setMaxX:(CGFloat)maxX; 159 | - (void)setMaxX_DontMoveMinX:(CGFloat)maxX; 160 | 161 | - (void)setY:(CGFloat)y; 162 | - (void)setMaxY:(CGFloat)maxY; 163 | - (void)setMaxY_DontMoveMinY:(CGFloat)maxY; 164 | 165 | - (void)setWidth:(CGFloat)width; 166 | - (void)setHeight:(CGFloat)height; 167 | - (void)setOrigin:(CGPoint)point; 168 | - (void)setOrigin:(CGPoint)point sizeToFit:(BOOL)sizeToFit; 169 | - (void)setSize:(CGSize)size; 170 | 171 | - (void)setCenterX:(CGFloat)x; 172 | - (void)setCenterY:(CGFloat)y; 173 | 174 | - (void)setWidth_DonotMoveCenter:(CGFloat)width; 175 | - (void)setHeight_DonotMoveCenter:(CGFloat)height; 176 | - (void)setSize_DonotMoveCenter:(CGSize)size; 177 | - (void)sizeToFit_DonotMoveCenter; 178 | - (void)sizeToFit_DonotMoveSide:(kDIRECTION)dir centerRemain:(BOOL)centerRemain; 179 | 180 | 181 | /** 182 | * 保持宽高比,自动设置Size 183 | * 184 | * @param referWidth 参考宽度 185 | * @param referHeight 参考高度 186 | * @param setWidth 实际宽度,自动计算高度 187 | */ 188 | - (void)BearSetSizeRemainWHRatio_referWidth:(NSNumber *)referWidth referHeight:(NSNumber *)referHeight setSort:(SetNeedWHSort)setSort setValue:(NSNumber *)setValue; 189 | 190 | 191 | /** 192 | * 和父类view剧中 193 | * 194 | * 当前view和父类view的 X轴/Y轴/中心点 对其 195 | */ 196 | - (void)BearSetCenterToParentViewWithAxis:(kAXIS)axis; 197 | 198 | 199 | /** 200 | * 和指定的view剧中 201 | * 202 | * 当前view和指定view的 X轴/Y轴/中心点 对其 203 | */ 204 | - (void)BearSetCenterToView:(UIView *)destinationView withAxis:(kAXIS)axis; 205 | 206 | 207 | /** 208 | * view与view的相对位置 209 | */ 210 | - (void)BearSetRelativeLayoutWithDirection:(kDIRECTION)direction destinationView:(UIView *)destinationView parentRelation:(BOOL)parentRelation distance:(CGFloat)distance center:(BOOL)center; 211 | 212 | 213 | /** 214 | * view的相对布局,带sizeToFit 215 | */ 216 | - (void)BearSetRelativeLayoutWithDirection:(kDIRECTION)direction destinationView:(UIView *)destinationView parentRelation:(BOOL)parentRelation distance:(CGFloat)distance center:(BOOL)center sizeToFit:(BOOL)sizeToFit; 217 | 218 | 219 | #pragma mark - AutoLay V1 220 | 221 | /** 222 | * 根据子view自动布局 -- 自动计算:起始点,结束点,间距(三值相等) 223 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 224 | */ 225 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center; 226 | 227 | 228 | /** 229 | * 根据子view自动布局 -- 需要设置:起始点,结束点; -- 自动计算:间距 230 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 231 | */ 232 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center offStart:(CGFloat)offStart offEnd:(CGFloat)offEnd; 233 | 234 | 235 | /** 236 | * 根据子view自动布局 -- 需要设置:间距; -- 自动计算:起始点,结束点 237 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 238 | */ 239 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center gapDistance:(CGFloat)gapDistance; 240 | 241 | 242 | /** 243 | * 根据子view自动布局 -- 需要设置:起始点,结束点,间距 244 | * 说明: 在父类view尺寸不等于需求尺寸时,会自动变化 245 | */ 246 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center offStart:(CGFloat)offStart offEnd:(CGFloat)offEnd gapDistance:(CGFloat)gapDistance; 247 | 248 | 249 | /** 250 | * 根据子view自动布局 -- 需要设置:gapArray间距比例数组,间距总和 251 | * 说明: 在父类view尺寸不等于需求尺寸时,会自动变化 252 | */ 253 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center gapAray:(NSArray *)gapArray gapDisAll:(CGFloat)gapDisAll; 254 | 255 | /** 256 | * 根据子view自动布局 -- 需要设置:gapArray间距比例数组; -- 自动计算:间距总和 257 | * 说明: 在父类view尺寸不等于需求尺寸时,无法自动布局 258 | */ 259 | + (void)BearAutoLayViewArray:(NSMutableArray *)viewArray layoutAxis:(kLAYOUT_AXIS)layoutAxis center:(BOOL)center gapAray:(NSArray *)gapArray; 260 | 261 | 262 | 263 | #pragma mark - AutoLay V2 264 | 265 | /** 266 | * 根据子view自动布局 -- 自动计算:起始点,结束点,间距(三值相等) 267 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 268 | */ 269 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 270 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 271 | alignmentType:(SetAlignmentType)alignmentType 272 | alignmentOffDis:(CGFloat)alignmentOffDis; 273 | 274 | 275 | /** 276 | * 根据子view自动布局 -- 需要设置:起始点,结束点; -- 自动计算:间距 277 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 278 | */ 279 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 280 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 281 | alignmentType:(SetAlignmentType)alignmentType 282 | alignmentOffDis:(CGFloat)alignmentOffDis 283 | offStart:(CGFloat)offStart 284 | offEnd:(CGFloat)offEnd; 285 | 286 | 287 | /** 288 | * 根据子view自动布局 -- 需要设置:间距; -- 自动计算:起始点,结束点 289 | * 说明: 在父类view尺寸不等于需求尺寸时,会显示日志并且取消布局 290 | */ 291 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 292 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 293 | alignmentType:(SetAlignmentType)alignmentType 294 | alignmentOffDis:(CGFloat)alignmentOffDis 295 | gapDistance:(CGFloat)gapDistance; 296 | 297 | 298 | /** 299 | * 根据子view自动布局 -- 需要设置:起始点,结束点,间距 300 | * 说明: 在父类view尺寸不等于需求尺寸时,会自动变化 301 | */ 302 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 303 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 304 | alignmentType:(SetAlignmentType)alignmentType 305 | alignmentOffDis:(CGFloat)alignmentOffDis 306 | offStart:(CGFloat)offStart 307 | offEnd:(CGFloat)offEnd 308 | gapDistance:(CGFloat)gapDistance; 309 | 310 | 311 | /** 312 | * 根据子view自动布局 -- 需要设置:gapArray间距比例数组,间距总和 313 | * 说明: 在父类view尺寸不等于需求尺寸时,会自动变化 314 | */ 315 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 316 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 317 | alignmentType:(SetAlignmentType)alignmentType 318 | alignmentOffDis:(CGFloat)alignmentOffDis 319 | gapAray:(NSArray *)gapArray 320 | gapDisAll:(CGFloat)gapDisAll; 321 | 322 | 323 | /** 324 | * 根据子view自动布局 -- 需要设置:gapArray间距比例数组; -- 自动计算:间距总和 325 | * 说明: 在父类view尺寸不等于需求尺寸时,无法自动布局 326 | */ 327 | + (void)BearV2AutoLayViewArray:(NSMutableArray *)viewArray 328 | layoutAxis:(kLAYOUT_AXIS)layoutAxis 329 | alignmentType:(SetAlignmentType)alignmentType 330 | alignmentOffDis:(CGFloat)alignmentOffDis 331 | gapAray:(NSArray *)gapArray; 332 | 333 | 334 | @end 335 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertBtnsView.h 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/26. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BearAlertBtnsView : UIView 12 | 13 | @property (strong, nonatomic) UIView *btns_horizontalSepLineV; 14 | @property (strong, nonatomic) UIView *btns_verticalSepLineV; 15 | @property (strong, nonatomic) UIButton *cancelBtn; 16 | @property (strong, nonatomic) UIButton *confirmBtn; 17 | 18 | - (void)setNormal_CancelBtnTitle:(NSString *)cancelBtnTitle ConfirmBtnTitle:(NSString *)confirmBtnTitle; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertBtnsView.m 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/26. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import "BearAlertBtnsView.h" 10 | #import "UIView+BearSet.h" 11 | 12 | @interface BearAlertBtnsView () 13 | { 14 | NSString *_confirmBtnTitle; 15 | NSString *_cancelBtnTitle; 16 | } 17 | 18 | @end 19 | 20 | @implementation BearAlertBtnsView 21 | 22 | - (instancetype)init 23 | { 24 | self = [super init]; 25 | 26 | if (self) { 27 | 28 | // 取消按钮 29 | _cancelBtn = [[UIButton alloc] init]; 30 | [_cancelBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 31 | [self addSubview:_cancelBtn]; 32 | 33 | // 确定按钮 34 | _confirmBtn = [[UIButton alloc] init]; 35 | [_confirmBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 36 | [self addSubview:_confirmBtn]; 37 | 38 | // 分割线 39 | _btns_horizontalSepLineV = [[UIView alloc] init]; 40 | _btns_horizontalSepLineV.backgroundColor = [UIColor blackColor]; 41 | [self addSubview:_btns_horizontalSepLineV]; 42 | 43 | _btns_verticalSepLineV = [[UIView alloc] init]; 44 | _btns_verticalSepLineV.backgroundColor = [UIColor blackColor]; 45 | [self addSubview:_btns_verticalSepLineV]; 46 | } 47 | 48 | return self; 49 | } 50 | 51 | - (void)setNormal_CancelBtnTitle:(NSString *)cancelBtnTitle ConfirmBtnTitle:(NSString *)confirmBtnTitle 52 | { 53 | _cancelBtnTitle = cancelBtnTitle; 54 | _confirmBtnTitle = confirmBtnTitle; 55 | } 56 | 57 | - (void)layoutSubviews 58 | { 59 | [super layoutSubviews]; 60 | 61 | BOOL res_haveConfirmBtn = [_confirmBtnTitle length] > 0; 62 | BOOL res_haveCancelBtn = [_cancelBtnTitle length] > 0; 63 | 64 | CGFloat btn_width = self.width; 65 | CGFloat btn_height = self.height; 66 | 67 | if (res_haveCancelBtn && res_haveConfirmBtn) { 68 | 69 | btn_width = self.width / 2.0; 70 | 71 | _cancelBtn.frame = CGRectMake(0, 0, btn_width, btn_height); 72 | [_cancelBtn setTitle:_cancelBtnTitle forState:UIControlStateNormal]; 73 | 74 | _confirmBtn.frame = CGRectMake(btn_width, 0, btn_width, btn_height); 75 | [_confirmBtn setTitle:_confirmBtnTitle forState:UIControlStateNormal]; 76 | 77 | _btns_verticalSepLineV.frame = CGRectMake(0, 0, 0.5, self.height); 78 | [_btns_verticalSepLineV BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 79 | } 80 | else if (res_haveConfirmBtn || res_haveCancelBtn){ 81 | 82 | btn_width = self.width; 83 | 84 | if (res_haveConfirmBtn) { 85 | 86 | _confirmBtn.frame = CGRectMake(0, 0, btn_width, btn_height); 87 | [_confirmBtn setTitle:_confirmBtnTitle forState:UIControlStateNormal]; 88 | }else if (res_haveCancelBtn){ 89 | 90 | _cancelBtn.frame = CGRectMake(0, 0, btn_width, btn_height); 91 | [_cancelBtn setTitle:_cancelBtnTitle forState:UIControlStateNormal]; 92 | } 93 | } 94 | 95 | _btns_horizontalSepLineV.frame = CGRectMake(0, 0, self.width, 0.5); 96 | 97 | } 98 | 99 | 100 | /* 101 | // Only override drawRect: if you perform custom drawing. 102 | // An empty implementation adversely affects performance during animation. 103 | - (void)drawRect:(CGRect)rect { 104 | // Drawing code 105 | } 106 | */ 107 | 108 | @end 109 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertContentView.h 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/27. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BearAlertContentView : UIView 12 | 13 | @property (strong, nonatomic) UILabel *titleLabel; 14 | @property (strong, nonatomic) UILabel *contentLabel; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertContentView.m 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/27. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import "BearAlertContentView.h" 10 | #import "BearConstants.h" 11 | #import "UIView+BearSet.h" 12 | 13 | @implementation BearAlertContentView 14 | 15 | - (instancetype)initWithFrame:(CGRect)frame 16 | { 17 | self = [super initWithFrame:frame]; 18 | 19 | if (self) { 20 | 21 | _titleLabel = [UILabel new]; 22 | _titleLabel.font = [UIFont systemFontOfSize:16]; 23 | [self addSubview:_titleLabel]; 24 | 25 | _contentLabel = [UILabel new]; 26 | _contentLabel.numberOfLines = 0; 27 | _contentLabel.font =[UIFont systemFontOfSize:14]; 28 | [self addSubview:_contentLabel]; 29 | } 30 | 31 | return self; 32 | } 33 | 34 | - (void)layoutSubviews 35 | { 36 | [super layoutSubviews]; 37 | 38 | CGFloat max_width = WIDTH - 2 * 30; 39 | 40 | [_titleLabel sizeToFit]; 41 | [_contentLabel sizeToFit]; 42 | 43 | if (_titleLabel.width > max_width) { 44 | [_titleLabel setWidth:max_width]; 45 | [_titleLabel sizeToFit]; 46 | } 47 | 48 | if (_contentLabel.width > max_width) { 49 | [_contentLabel setWidth:max_width]; 50 | [_contentLabel sizeToFit]; 51 | } 52 | 53 | [self setWidth:_titleLabel.width > _contentLabel.width ? _titleLabel.width + 30 : _contentLabel.width + 30]; 54 | if (self.width < WIDTH / 2) { 55 | [self setWidth:WIDTH / 2]; 56 | } 57 | 58 | [_titleLabel BearSetRelativeLayoutWithDirection:kDIR_UP destinationView:nil parentRelation:YES distance:15 center:YES]; 59 | [_contentLabel BearSetRelativeLayoutWithDirection:kDIR_DOWN destinationView:_titleLabel parentRelation:NO distance:20 center:YES]; 60 | [self setHeight:_contentLabel.maxY + 20]; 61 | } 62 | 63 | 64 | /* 65 | // Only override drawRect: if you perform custom drawing. 66 | // An empty implementation adversely affects performance during animation. 67 | - (void)drawRect:(CGRect)rect { 68 | // Drawing code 69 | } 70 | */ 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertView.h 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/26. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "BearAlertBtnsView.h" 11 | #import "BearAlertContentView.h" 12 | 13 | // 动效方式 14 | typedef NS_ENUM(NSUInteger, AlertViewAnimation) { 15 | kAlertViewAnimation_VerticalSpring, //直线弹簧动效 16 | kAlertViewAnimation_CenterScale, //中心缩放动效 17 | }; 18 | 19 | // 动画执行状态 20 | typedef NS_ENUM(NSUInteger, AlertViewAnimationState) { 21 | kAlertViewAnimationState_Null, //无状态, 22 | kAlertViewAnimationState_Process, //动画进行中 23 | }; 24 | 25 | // AlertView自定义样式 26 | typedef NS_ENUM(NSUInteger, AlertViewCustomType) { 27 | kAlertViewCustomType_ContentAndBtns, //BearAlertContentView+BearAlertBtnsView自定义 28 | kAlertViewCustomType_AllDiy, //全部自定义 29 | }; 30 | 31 | 32 | typedef void (^kAlertViewBlock)(); 33 | typedef void (^AnimationFinishBlock)(); 34 | typedef void (^AnimationClose_FinishBlock)(); 35 | 36 | 37 | @interface BearAlertView : UIView 38 | 39 | @property (assign, nonatomic) BOOL clickBtnCancel; //点击按钮,消失Alert 40 | @property (assign, nonatomic) BOOL tapBgCancel; //触摸背景,消失Alert 41 | @property (strong, nonatomic) UITapGestureRecognizer *tapGesture; 42 | @property (copy, nonatomic) AnimationClose_FinishBlock animationClose_FinishBlock; //消退动画完成block 43 | @property (strong, nonatomic) BearAlertContentView *normalAlertContentView; 44 | @property (strong, nonatomic) BearAlertBtnsView *normalAlertBtnsView; 45 | @property (assign, nonatomic) AlertViewCustomType alertViewCustomType; 46 | 47 | @property (strong, nonatomic) UIView *bgView; 48 | 49 | - (instancetype)initWithAlertCustomType:(AlertViewCustomType)alertCustomType; 50 | 51 | // 自定义模式下专用 kAlertViewCustomType_AllDiy 52 | - (void)setAllDiyTypeContentView:(UIView *)contentView; 53 | 54 | /** 55 | * 设置contentView 56 | */ 57 | - (void)setContentView:(UIView *)contentView; 58 | 59 | /** 60 | * 设置btnsView 61 | */ 62 | - (void)setBtnsView:(UIView *)btnsView; 63 | 64 | /** 65 | * 点击按钮block 66 | * 67 | * @param confirmBlock 确认按钮block 68 | * @param cancelBlock 取消按钮block 69 | * @notice 只有BearAlertBtnsView类型的btnsView才可使用该方法 70 | */ 71 | - (void)alertView_ConfirmClickBlock:(kAlertViewBlock)confirmBlock CancelClickBlock:(kAlertViewBlock)cancelBlock; 72 | 73 | /** 74 | * 点击按钮block 75 | * 76 | * @param selectBtn 点击的按钮 77 | * @param block 按钮block 78 | * @notice 自定义,非BearAlertBtnsView类型需要单独给按钮调用该方法 79 | */ 80 | - (void)alertView_SelectBtn:(UIButton *)selectBtn block:(kAlertViewBlock)block; 81 | 82 | /** 83 | * 添加按钮点击事件 84 | * @notice 自定义,非BearAlertBtnsView类型需要单独给按钮调用该方法 85 | */ 86 | - (void)btnEvent:(UIButton *)sender; 87 | 88 | /** 89 | * Alertview显现动画 90 | */ 91 | - (void)animationShow_udAlertView; 92 | 93 | /** 94 | * AlertView消退动画 95 | */ 96 | - (void)animationClose_udAlertView; 97 | 98 | @end 99 | 100 | 101 | /** 102 | * How to use? 103 | * 104 | * brief Demo/简单demo 105 | * 106 | 107 | - (void)testNormal 108 | { 109 | __block BearAlertView *bearAlert = [[BearAlertView alloc] init]; 110 | 111 | bearAlert.normalAlertContentView.titleLabel.text = @"温馨提示"; 112 | bearAlert.normalAlertContentView.contentLabel.text = @"My name is Bear. Github ID is BearRan. \nThank you!"; 113 | 114 | [bearAlert alertView_ConfirmClickBlock:^{ 115 | NSLog(@"--confirm"); 116 | } CancelClickBlock:^{ 117 | NSLog(@"--cancel"); 118 | }]; 119 | bearAlert.animationClose_FinishBlock = ^(){ 120 | NSLog(@"--closeAniamtion finish"); 121 | bearAlert = nil; 122 | }; 123 | 124 | AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate]; 125 | [myDelegate.window addSubview:bearAlert]; 126 | } 127 | 128 | */ 129 | 130 | 131 | 132 | /** 133 | * How to use? 134 | * 135 | * UserDefine Demo/自定义demo 136 | * 137 | 138 | - (void)testUserDefine 139 | { 140 | 141 | __block BearAlertView *bearAlert = [[BearAlertView alloc] init]; 142 | 143 | // 自定义ContentView 144 | UIView *tempContentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH - 50, 200)]; 145 | tempContentView.backgroundColor = [UIColor orangeColor]; 146 | [bearAlert setContentView:tempContentView]; 147 | 148 | // 自定义BtnsView 149 | UIView *tempBtnsView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tempContentView.width, 40)]; 150 | CGFloat btn_width = floor(tempBtnsView.width / 3.0); 151 | CGFloat btn_height = tempBtnsView.height; 152 | for (int i = 0; i < 3; i++) { 153 | UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, btn_width, btn_height)]; 154 | btn.backgroundColor = [UIColor blueColor]; 155 | [btn setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal]; 156 | [tempBtnsView addSubview:btn]; 157 | [btn addTarget:bearAlert action:@selector(btnEvent:) forControlEvents:UIControlEventTouchUpInside]; 158 | 159 | // 按钮点击回调 160 | [bearAlert alertView_SelectBtn:btn block:^{ 161 | NSLog(@"--clickBtn:%d", i); 162 | }]; 163 | } 164 | [UIView BearAutoLayViewArray:(NSMutableArray *)tempBtnsView.subviews layoutAxis:kLAYOUT_AXIS_X center:YES]; 165 | [bearAlert setBtnsView:tempBtnsView]; 166 | 167 | bearAlert.animationClose_FinishBlock = ^(){ 168 | NSLog(@"--closeAniamtion finish"); 169 | bearAlert = nil; 170 | }; 171 | 172 | AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate]; 173 | [myDelegate.window addSubview:bearAlert]; 174 | } 175 | 176 | **/ 177 | 178 | 179 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BearAlertView.m 3 | // GOSHOPPING 4 | // 5 | // Created by Bear on 16/6/26. 6 | // Copyright © 2016年 cjl. All rights reserved. 7 | // 8 | 9 | #import "BearAlertView.h" 10 | #import 11 | #import "BearConstants.h" 12 | #import "UIView+BearSet.h" 13 | 14 | static const char *const kAlertViewBlockKey = "UDAlertViewBlockKey"; 15 | 16 | static NSString *kAnimationKey_ShowUDAlertView = @"AnimationKey_ShowUDAlertView"; 17 | static NSString *kAnimationKey_CloseUDAlertView = @"AnimationKey_CloseUDAlertView"; 18 | static NSString *kAnimationKey_HideBgView = @"AnimationKey_HideBgView"; 19 | static NSString *kAnimationKey_ShowBgView = @"AnimationKey_ShowBgView"; 20 | static NSString *kAnimationKey_ShowUDAlertViewScale = @"AnimationKey_ShowUDAlertViewScale"; 21 | 22 | 23 | @interface BearAlertView () 24 | 25 | @property (strong, nonatomic) UIView *alertView; 26 | @property (strong, nonatomic) UIView *alertContentView; 27 | @property (strong, nonatomic) UIView *alertBtnsView; 28 | 29 | @property (assign, nonatomic) AlertViewAnimation alertViewAnimation; 30 | @property (copy, nonatomic) AnimationFinishBlock animationFinishBlock; 31 | @property (assign, nonatomic) AlertViewAnimationState alertViewAnimationState; 32 | 33 | @end 34 | 35 | @implementation BearAlertView 36 | 37 | - (instancetype)init 38 | { 39 | return [self initWithAlertCustomType:kAlertViewCustomType_ContentAndBtns]; 40 | } 41 | 42 | - (instancetype)initWithAlertCustomType:(AlertViewCustomType)alertCustomType 43 | { 44 | self = [super init]; 45 | 46 | if (self) { 47 | 48 | _alertViewAnimation = kAlertViewAnimation_VerticalSpring; 49 | _tapBgCancel = YES; 50 | _clickBtnCancel = YES; 51 | _alertViewCustomType = alertCustomType; 52 | 53 | [self createUI]; 54 | } 55 | 56 | return self; 57 | } 58 | 59 | - (void)createUI 60 | { 61 | self.frame = CGRectMake(0, 0, WIDTH, HEIGHT); 62 | 63 | // 背景蒙板View 64 | _bgView = [[UIView alloc] initWithFrame:self.bounds]; 65 | _bgView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7]; 66 | [self addSubview:_bgView]; 67 | 68 | self.tapBgCancel = NO; 69 | 70 | // AlertView 71 | _alertView = [[UIView alloc] init]; 72 | _alertView.userInteractionEnabled = YES; 73 | _alertView.backgroundColor = [UIColor whiteColor]; 74 | _alertView.layer.cornerRadius = 9.0f; 75 | _alertView.layer.masksToBounds = YES; 76 | [_bgView addSubview:_alertView]; 77 | 78 | switch (_alertViewCustomType) { 79 | case kAlertViewCustomType_ContentAndBtns: 80 | { 81 | // _contentView 82 | _normalAlertContentView = [[BearAlertContentView alloc] init]; 83 | _normalAlertContentView.titleLabel.text = @"请输入一个标题"; 84 | _normalAlertContentView.contentLabel.text = @"请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!请输入正文内容!!!"; 85 | 86 | // _alertBtnsView 87 | _normalAlertBtnsView = [[BearAlertBtnsView alloc] init]; 88 | [_normalAlertBtnsView setHeight:35]; 89 | _normalAlertBtnsView.userInteractionEnabled = YES; 90 | [_normalAlertBtnsView setNormal_CancelBtnTitle:@"取消" ConfirmBtnTitle:@"确认" ]; 91 | 92 | // 设置AlertView组件 93 | [self setContentView:_normalAlertContentView]; 94 | [self setBtnsView:_normalAlertBtnsView]; 95 | } 96 | break; 97 | 98 | case kAlertViewCustomType_AllDiy: 99 | { 100 | nil; 101 | } 102 | break; 103 | 104 | default: 105 | break; 106 | } 107 | 108 | } 109 | 110 | - (void)layoutSubviews 111 | { 112 | [super layoutSubviews]; 113 | 114 | switch (_alertViewCustomType) { 115 | case kAlertViewCustomType_ContentAndBtns: 116 | { 117 | CGFloat tempY = 0; 118 | CGFloat temp_width = 0; 119 | 120 | // 布局_alertContentView 121 | if (_alertContentView) { 122 | [_alertContentView layoutSubviews]; 123 | tempY = _alertContentView.maxY; 124 | temp_width = _alertContentView.width; 125 | } 126 | 127 | // 布局_alertBtnsView 128 | if (_alertBtnsView) { 129 | [_alertBtnsView setY:tempY]; 130 | [_alertBtnsView setWidth:_alertContentView.width]; 131 | [_alertBtnsView layoutSubviews]; 132 | tempY = _alertBtnsView.maxY; 133 | if (temp_width == 0) { 134 | temp_width = _alertBtnsView.width; 135 | } 136 | } 137 | 138 | // 布局_alertView 139 | _alertView.size = CGSizeMake(temp_width, tempY); 140 | } 141 | break; 142 | 143 | case kAlertViewCustomType_AllDiy: 144 | { 145 | nil; 146 | } 147 | break; 148 | 149 | default: 150 | break; 151 | } 152 | 153 | [_alertView BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 154 | 155 | // 显示动画 156 | [self animationShow_udAlertView]; 157 | } 158 | 159 | 160 | #pragma mark - 设置AlertView组件 161 | 162 | /** 163 | * 设置contentView 164 | */ 165 | - (void)setContentView:(UIView *)contentView 166 | { 167 | if (_alertContentView) { 168 | [_alertContentView removeFromSuperview]; 169 | _alertContentView = nil; 170 | } 171 | 172 | if (contentView) { 173 | _alertContentView = contentView; 174 | [_alertView addSubview:_alertContentView]; 175 | } 176 | } 177 | 178 | /** 179 | * 设置btnsView 180 | */ 181 | - (void)setBtnsView:(UIView *)btnsView 182 | { 183 | if (_alertBtnsView) { 184 | [_alertBtnsView removeFromSuperview]; 185 | _alertBtnsView = nil; 186 | } 187 | 188 | if (btnsView) { 189 | _alertBtnsView = btnsView; 190 | [_alertView addSubview:_alertBtnsView]; 191 | 192 | if ([_alertBtnsView isKindOfClass:[BearAlertBtnsView class]]) { 193 | BearAlertBtnsView *tempBtnsView = (BearAlertBtnsView *)_alertBtnsView; 194 | // 设置按钮事件 195 | 196 | [_alertView addSubview:tempBtnsView]; 197 | 198 | [tempBtnsView.cancelBtn removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents]; 199 | [tempBtnsView.cancelBtn addTarget:self action:@selector(btnEvent:) forControlEvents:UIControlEventTouchUpInside]; 200 | [tempBtnsView.confirmBtn removeTarget:nil action:nil forControlEvents:UIControlEventAllEvents]; 201 | [tempBtnsView.confirmBtn addTarget:self action:@selector(btnEvent:) forControlEvents:UIControlEventTouchUpInside]; 202 | } 203 | } 204 | } 205 | 206 | // 自定义模式下专用 kAlertViewCustomType_AllDiy 207 | - (void)setAllDiyTypeContentView:(UIView *)contentView 208 | { 209 | if (_alertViewCustomType != kAlertViewCustomType_AllDiy) { 210 | return; 211 | } 212 | 213 | if (contentView) { 214 | 215 | // clean old view 216 | for (UIView *subView in _alertView.subviews) { 217 | [subView removeFromSuperview]; 218 | } 219 | 220 | [_alertView addSubview:contentView]; 221 | _alertView.frame = contentView.bounds; 222 | } 223 | } 224 | 225 | 226 | 227 | #pragma mark - 按钮处理事件 228 | 229 | /** 230 | * 点击按钮block 231 | * 232 | * @param confirmBlock 确认按钮block 233 | * @param cancelBlock 取消按钮block 234 | * @notice 只有BearAlertBtnsView类型的btnsView才可使用该方法 235 | */ 236 | - (void)alertView_ConfirmClickBlock:(kAlertViewBlock)confirmBlock CancelClickBlock:(kAlertViewBlock)cancelBlock 237 | { 238 | if ([_alertBtnsView isKindOfClass:[BearAlertBtnsView class]]) { 239 | BearAlertBtnsView *tempBtnsView = (BearAlertBtnsView *)_alertBtnsView; 240 | 241 | objc_setAssociatedObject(tempBtnsView.confirmBtn, kAlertViewBlockKey, confirmBlock, OBJC_ASSOCIATION_RETAIN); 242 | objc_setAssociatedObject(tempBtnsView.cancelBtn, kAlertViewBlockKey, cancelBlock, OBJC_ASSOCIATION_RETAIN); 243 | } 244 | } 245 | 246 | /** 247 | * 点击按钮block 248 | * 249 | * @param selectBtn 点击的按钮 250 | * @param block 按钮block 251 | * @notice 自定义,非BearAlertBtnsView类型需要单独给按钮调用该方法 252 | */ 253 | - (void)alertView_SelectBtn:(UIButton *)selectBtn block:(kAlertViewBlock)block 254 | { 255 | objc_setAssociatedObject(selectBtn, kAlertViewBlockKey, block, OBJC_ASSOCIATION_RETAIN); 256 | } 257 | 258 | /** 259 | * 添加按钮点击事件 260 | * @notice 自定义,非BearAlertBtnsView类型需要单独给按钮调用该方法 261 | */ 262 | - (void)btnEvent:(UIButton *)sender 263 | { 264 | if (_clickBtnCancel) { 265 | [self animationClose_udAlertView]; 266 | } 267 | 268 | kAlertViewBlock block = objc_getAssociatedObject(sender, kAlertViewBlockKey); 269 | 270 | self.animationFinishBlock = ^{ 271 | if (block) { 272 | block(); 273 | } 274 | }; 275 | } 276 | 277 | /** 278 | * 触摸消失 279 | */ 280 | - (void)bgTappedDismiss 281 | { 282 | [self animationClose_udAlertView]; 283 | } 284 | 285 | - (void)setTapBgCancel:(BOOL)tapBgCancel 286 | { 287 | _tapBgCancel = tapBgCancel; 288 | 289 | if (_tapGesture) { 290 | [_bgView removeGestureRecognizer:_tapGesture]; 291 | } 292 | 293 | if (!tapBgCancel) { 294 | // 触摸手势 295 | _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bgTappedDismiss)]; 296 | _tapGesture.numberOfTapsRequired = 1; 297 | [_bgView addGestureRecognizer:_tapGesture]; 298 | } 299 | } 300 | 301 | 302 | 303 | #pragma mark - 动画处理 304 | 305 | /** 306 | * Alertview显现动画 307 | */ 308 | - (void)animationShow_udAlertView 309 | { 310 | 311 | if (_alertViewAnimationState == kAlertViewAnimationState_Process) { 312 | return; 313 | } 314 | 315 | _alertViewAnimationState = kAlertViewAnimationState_Process; 316 | 317 | CGFloat animationTime_bgAlpha = 0.3; 318 | CGFloat animationTime_keyShow = 0.5; 319 | 320 | 321 | // 背景透明度 322 | CABasicAnimation *basicAnimation_bgAlpha = [CABasicAnimation animation]; 323 | basicAnimation_bgAlpha.delegate = self; 324 | basicAnimation_bgAlpha.keyPath = @"opacity"; 325 | basicAnimation_bgAlpha.duration = animationTime_bgAlpha; 326 | basicAnimation_bgAlpha.fromValue = [NSNumber numberWithFloat:0.0f]; 327 | basicAnimation_bgAlpha.toValue = [NSNumber numberWithFloat:1.0f]; 328 | basicAnimation_bgAlpha.removedOnCompletion = NO; 329 | [_bgView.layer addAnimation:basicAnimation_bgAlpha forKey:kAnimationKey_ShowBgView]; 330 | 331 | 332 | switch (_alertViewAnimation) { 333 | 334 | case kAlertViewAnimation_VerticalSpring: 335 | { 336 | // 出现路径 337 | [_alertView setCenter:CGPointMake(_bgView.width/2.0, -_alertView.height/2.0)]; 338 | [UIView animateWithDuration:animationTime_keyShow 339 | delay:animationTime_bgAlpha 340 | usingSpringWithDamping:0.5 341 | initialSpringVelocity:0.7 342 | options:UIViewAnimationOptionCurveEaseInOut 343 | animations:^{ 344 | [_alertView BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 345 | } 346 | completion:^(BOOL finished) { 347 | _alertViewAnimationState = kAlertViewAnimationState_Null; 348 | }]; 349 | } 350 | break; 351 | 352 | case kAlertViewAnimation_CenterScale: 353 | { 354 | // 出现路径 355 | _alertView.hidden = YES; 356 | [_alertView BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 357 | 358 | CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; 359 | keyFrameAnimation.delegate = self; 360 | keyFrameAnimation.keyPath = @"transform.scale"; 361 | NSArray *array_my = @[@0.2, @1.1, @0.9, @1.0]; 362 | keyFrameAnimation.values = array_my; 363 | keyFrameAnimation.duration = animationTime_keyShow; 364 | keyFrameAnimation.beginTime = CACurrentMediaTime() + animationTime_bgAlpha; 365 | keyFrameAnimation.removedOnCompletion = NO; 366 | keyFrameAnimation.fillMode = kCAFillModeForwards; 367 | [_alertView.layer addAnimation:keyFrameAnimation forKey:kAnimationKey_ShowUDAlertViewScale]; 368 | } 369 | 370 | default: 371 | break; 372 | } 373 | 374 | } 375 | 376 | /** 377 | * AlertView消退动画 378 | */ 379 | - (void)animationClose_udAlertView 380 | { 381 | if (_alertViewAnimationState == kAlertViewAnimationState_Process) { 382 | return; 383 | } 384 | 385 | _alertViewAnimationState = kAlertViewAnimationState_Process; 386 | 387 | CGFloat animationTime_keyClose = 0.3; 388 | CGFloat animationTime_bgAlpha = 0.3; 389 | 390 | switch (_alertViewAnimation) { 391 | 392 | case kAlertViewAnimation_VerticalSpring: 393 | { 394 | 395 | } 396 | break; 397 | 398 | case kAlertViewAnimation_CenterScale: 399 | { 400 | 401 | } 402 | 403 | default: 404 | break; 405 | } 406 | 407 | // 消失路径 408 | UIBezierPath *bezierPath = [UIBezierPath bezierPath]; 409 | [bezierPath moveToPoint:CGPointMake(_bgView.width/2.0, _bgView.height/2.0)]; 410 | [bezierPath addLineToPoint:CGPointMake(_bgView.width/2.0, _bgView.height + _alertView.height)]; 411 | 412 | CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation]; 413 | keyFrameAnimation.delegate = self; 414 | keyFrameAnimation.keyPath = @"position"; 415 | keyFrameAnimation.duration = animationTime_keyClose; 416 | keyFrameAnimation.path = bezierPath.CGPath; 417 | keyFrameAnimation.removedOnCompletion = NO; 418 | keyFrameAnimation.fillMode = kCAFillModeForwards; 419 | [_alertView.layer addAnimation:keyFrameAnimation forKey:kAnimationKey_CloseUDAlertView]; 420 | 421 | 422 | // 背景透明度 423 | CABasicAnimation *basicAnimation_bgAlpha = [CABasicAnimation animation]; 424 | basicAnimation_bgAlpha.delegate = self; 425 | basicAnimation_bgAlpha.keyPath = @"opacity"; 426 | basicAnimation_bgAlpha.duration = animationTime_bgAlpha; 427 | basicAnimation_bgAlpha.fromValue = [NSNumber numberWithFloat:1.0]; 428 | basicAnimation_bgAlpha.toValue = [NSNumber numberWithFloat:0.0]; 429 | basicAnimation_bgAlpha.beginTime = CACurrentMediaTime() + animationTime_keyClose; 430 | basicAnimation_bgAlpha.removedOnCompletion = NO; 431 | basicAnimation_bgAlpha.fillMode = kCAFillModeForwards; 432 | [_bgView.layer addAnimation:basicAnimation_bgAlpha forKey:kAnimationKey_HideBgView]; 433 | } 434 | 435 | 436 | // Animation Delegate 437 | - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 438 | { 439 | if ([anim isEqual:[_alertView.layer animationForKey:kAnimationKey_ShowUDAlertView]]) { 440 | 441 | _alertViewAnimationState = kAlertViewAnimationState_Null; 442 | 443 | [_alertView BearSetCenterToParentViewWithAxis:kAXIS_X_Y]; 444 | [_alertView.layer removeAnimationForKey:kAnimationKey_ShowUDAlertView]; 445 | } 446 | 447 | 448 | else if ([anim isEqual:[_alertView.layer animationForKey:kAnimationKey_CloseUDAlertView]]){ 449 | 450 | [_alertView.layer removeAnimationForKey:kAnimationKey_CloseUDAlertView]; 451 | [_alertView removeFromSuperview]; 452 | } 453 | 454 | 455 | else if ([anim isEqual:[_bgView.layer animationForKey:kAnimationKey_ShowBgView]]){ 456 | 457 | [_bgView.layer removeAnimationForKey:kAnimationKey_ShowBgView]; 458 | 459 | if (_alertViewAnimation == kAlertViewAnimation_CenterScale) { 460 | _alertView.hidden = NO; 461 | } 462 | 463 | } 464 | 465 | 466 | else if ([anim isEqual:[_bgView.layer animationForKey:kAnimationKey_HideBgView]]){ 467 | 468 | _alertViewAnimationState = kAlertViewAnimationState_Null; 469 | 470 | [_bgView.layer removeAnimationForKey:kAnimationKey_HideBgView]; 471 | [_bgView removeFromSuperview]; 472 | [self removeFromSuperview]; 473 | 474 | if (self.animationFinishBlock) { 475 | self.animationFinishBlock(); 476 | } 477 | 478 | if (self.animationClose_FinishBlock) { 479 | self.animationClose_FinishBlock(); 480 | } 481 | } 482 | 483 | 484 | else if ([anim isEqual:[_alertView.layer animationForKey:kAnimationKey_ShowUDAlertViewScale]]){ 485 | 486 | _alertViewAnimationState = kAlertViewAnimationState_Null; 487 | 488 | [_alertView.layer removeAnimationForKey:kAnimationKey_ShowUDAlertViewScale]; 489 | } 490 | 491 | } 492 | 493 | 494 | 495 | @end 496 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearCutOutView.h: -------------------------------------------------------------------------------- 1 | // 2 | // BearCutOutView.h 3 | // TestCutOut 4 | // 5 | // Created by apple on 16/6/7. 6 | // Copyright © 2016年 qiantu. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface BearCutOutView : UIView 12 | 13 | - (void)setUnCutColor:(UIColor *)unCutColor cutOutFrame:(CGRect)cutOutFrame; 14 | - (void)setUnCutColor:(UIColor *)unCutColor cutOutPath:(UIBezierPath *)cutOutPath; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/BearCutOutView.m: -------------------------------------------------------------------------------- 1 | // 2 | // BearCutOutView.m 3 | // TestCutOut 4 | // 5 | // Created by apple on 16/6/7. 6 | // Copyright © 2016年 qiantu. All rights reserved. 7 | // 8 | 9 | #import "BearCutOutView.h" 10 | 11 | @interface BearCutOutView () 12 | 13 | @property (nonatomic, retain) UIColor *unCutColor; 14 | @property (nonatomic, retain) NSValue *cutOutFrame; 15 | @property (nonatomic, retain) UIBezierPath *cutOutBezierPath; 16 | 17 | @end 18 | 19 | @implementation BearCutOutView 20 | 21 | - (instancetype)initWithFrame:(CGRect)frame 22 | { 23 | self = [super initWithFrame:frame]; 24 | 25 | if (self) { 26 | self.backgroundColor = [UIColor clearColor]; 27 | } 28 | 29 | return self; 30 | } 31 | 32 | - (instancetype)init 33 | { 34 | self = [super init]; 35 | 36 | if (self) { 37 | self.backgroundColor = [UIColor clearColor]; 38 | } 39 | 40 | return self; 41 | } 42 | 43 | - (void)drawRect:(CGRect)rect 44 | { 45 | [super drawRect:rect]; 46 | 47 | if (self.unCutColor) { 48 | 49 | [self.unCutColor setFill]; 50 | UIRectFill(rect); 51 | 52 | CGContextRef context = UIGraphicsGetCurrentContext(); 53 | CGContextSetBlendMode(context, kCGBlendModeDestinationOut); 54 | 55 | UIBezierPath *path; 56 | 57 | if (self.cutOutFrame) { 58 | path = [UIBezierPath bezierPathWithRect:[self.cutOutFrame CGRectValue]]; 59 | } 60 | else if (self.cutOutBezierPath){ 61 | path = self.cutOutBezierPath; 62 | } 63 | 64 | [path fill]; 65 | 66 | CGContextSetBlendMode(context, kCGBlendModeNormal); 67 | } 68 | } 69 | 70 | - (void)setUnCutColor:(UIColor *)unCutColor cutOutFrame:(CGRect)cutOutFrame 71 | { 72 | self.unCutColor = unCutColor; 73 | self.cutOutFrame = [NSValue valueWithCGRect:cutOutFrame]; 74 | 75 | [self setNeedsDisplay]; 76 | } 77 | 78 | - (void)setUnCutColor:(UIColor *)unCutColor cutOutPath:(UIBezierPath *)cutOutPath 79 | { 80 | self.unCutColor = unCutColor; 81 | self.cutOutBezierPath = cutOutPath; 82 | 83 | [self setNeedsDisplay]; 84 | } 85 | 86 | @end 87 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/UILabel+BearSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+BearSet.h 3 | // Bear 4 | // 5 | // Created by Bear on 30/12/24. 6 | // Copyright © 2015年 Bear. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UILabel (BearSet) 12 | 13 | // 获取label的宽度 14 | + (CGFloat )getTitleTextWidth:(NSString *)title font:(UIFont *)font; 15 | 16 | // 根据宽度自适应 17 | - (void)setLabelSizeToFitWidth:(int)width; 18 | 19 | // 中心不变,自适应 20 | - (void)sizeToFit_DonotMoveCenter; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/UILabel+BearSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // UILabel+BearSet.m 3 | // Bear 4 | // 5 | // Created by Bear on 30/12/24. 6 | // Copyright © 2015年 Bear. All rights reserved. 7 | // 8 | 9 | #import "UILabel+BearSet.h" 10 | #import "UIView+BearSet.h" 11 | 12 | @implementation UILabel (BearSet) 13 | 14 | // 获取label文字的宽度 15 | + (CGFloat )getTitleTextWidth:(NSString *)title font:(UIFont *)font 16 | { 17 | CGFloat titleWidth; 18 | 19 | UILabel *tempLabel = [[UILabel alloc] init]; 20 | tempLabel.text = title; 21 | tempLabel.font = font; 22 | [tempLabel sizeToFit]; 23 | titleWidth = CGRectGetWidth(tempLabel.frame); 24 | 25 | return titleWidth; 26 | } 27 | 28 | // 根据宽度自适应 29 | - (void)setLabelSizeToFitWidth:(int)width 30 | { 31 | [self setWidth:0]; 32 | [self setHeight:0]; 33 | self.numberOfLines = 0; 34 | [self sizeToFit]; 35 | CGFloat textHeight = CGRectGetHeight(self.frame); 36 | int label_Width = [UILabel getTitleTextWidth:self.text font:self.font]; 37 | int rows = ((label_Width % width) == 0 ? label_Width/width: label_Width/width+1); 38 | [self setWidth:width]; 39 | [self setHeight:rows * textHeight]; 40 | } 41 | 42 | // 中心不变,自适应 43 | - (void)sizeToFit_DonotMoveCenter 44 | { 45 | CGPoint tempCenter = self.center; 46 | [self sizeToFit]; 47 | self.center = tempCenter; 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/UITextField+BearLimitLength.h: -------------------------------------------------------------------------------- 1 | // 2 | // UITextField+BearLimitLength.h 3 | // Pods 4 | // 5 | // Created by apple on 16/6/8. 6 | // 7 | // 8 | 9 | #import 10 | 11 | typedef void (^LimitDone_Block)(); 12 | 13 | @interface UITextField (BearLimitLength) 14 | 15 | @property (copy, nonatomic) NSNumber *limitLength; 16 | @property (copy, nonatomic) LimitDone_Block limitDone_block; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/BearSkill/Pod/Classes/UI&Extend/UITextField+BearLimitLength.m: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // UITextField+BearLimitLength.m 4 | // Pods 5 | // 6 | // Created by apple on 16/6/8. 7 | // 8 | // 9 | 10 | #import "UITextField+BearLimitLength.h" 11 | #import 12 | #import 13 | 14 | static const void *limitLengthKey = &limitLengthKey; 15 | static const void *limitBlockKey = &limitBlockKey; 16 | 17 | @implementation UITextField (BearLimitLength) 18 | 19 | 20 | // limitLength set&get 21 | - (NSNumber *)limitLength 22 | { 23 | return objc_getAssociatedObject(self, limitLengthKey); 24 | } 25 | 26 | - (void)setLimitLength:(NSNumber *)limitLength 27 | { 28 | objc_setAssociatedObject(self, limitLengthKey, limitLength, OBJC_ASSOCIATION_COPY_NONATOMIC); 29 | 30 | [self addLimitLengthObserver:[limitLength intValue]]; 31 | } 32 | 33 | 34 | // limitBlock set&get 35 | - (LimitDone_Block)limitDone_block 36 | { 37 | return objc_getAssociatedObject(self, limitBlockKey); 38 | } 39 | 40 | - (void)setLimitDone_block:(LimitDone_Block)limitDone_block 41 | { 42 | objc_setAssociatedObject(self, limitBlockKey, limitDone_block, OBJC_ASSOCIATION_COPY_NONATOMIC); 43 | } 44 | 45 | 46 | // 增加限制位数的通知 47 | - (void)addLimitLengthObserver:(int)length 48 | { 49 | [self addTarget:self action:@selector(limitLengthEvent) forControlEvents:UIControlEventEditingChanged]; 50 | } 51 | 52 | // 限制输入的位数 53 | - (void)limitLengthEvent 54 | { 55 | if ([self.text length] >= [self.limitLength intValue]) { 56 | self.text = [self.text substringToIndex:[self.limitLength intValue]]; 57 | 58 | if (self.limitDone_block) { 59 | self.limitDone_block(); 60 | } 61 | } 62 | } 63 | 64 | 65 | // dealloc替换 66 | // 参考:https://github.com/zhigang1992/ZGParallelView/issues/8 67 | + (void)load 68 | { 69 | Method origMethod = class_getInstanceMethod([self class], NSSelectorFromString(@"dealloc")); 70 | Method newMethod = class_getInstanceMethod([self class], @selector(my_dealloc)); 71 | method_exchangeImplementations(origMethod, newMethod); 72 | } 73 | 74 | - (void)my_dealloc 75 | { 76 | // do your logic here 77 | [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:self]; 78 | 79 | //this calls original dealloc method 80 | [self my_dealloc]; 81 | } 82 | 83 | @end 84 | -------------------------------------------------------------------------------- /Pods/BearSkill/README.md: -------------------------------------------------------------------------------- 1 | # BearSkill Origin 2 | 3 | # README 4 | 5 | # BearSkill 6 | 7 | [![CI Status](http://img.shields.io/travis/Bear/BearSkill.svg?style=flat)](https://travis-ci.org/Bear/BearSkill) 8 | [![Version](https://img.shields.io/cocoapods/v/BearSkill.svg?style=flat)](http://cocoapods.org/pods/BearSkill) 9 | [![License](https://img.shields.io/cocoapods/l/BearSkill.svg?style=flat)](http://cocoapods.org/pods/BearSkill) 10 | [![Platform](https://img.shields.io/cocoapods/p/BearSkill.svg?style=flat)](http://cocoapods.org/pods/BearSkill) 11 | 12 | ## Installation 13 | 14 | BearSkill is available through [CocoaPods](http://cocoapods.org). To install 15 | it, simply add the following line to your Podfile: 16 | 17 | ```ruby 18 | pod "BearSkill" 19 | ``` 20 | 21 | ## Author 22 | 23 | Bear, 648070256@qq.com 24 | 25 | ## License 26 | 27 | BearSkill is available under the MIT license. See the LICENSE file for more info. 28 | 29 | Introduction 30 | ------------ 31 | 32 | ### 简介: 33 | 平时的工作总结,从UIView到布局,从富文本处理到图形切割,各种都有。 34 | 争取分好类。每个部分都有一个简短的介绍,有意见,建议欢迎沟通QQ:648070256。 35 | 36 | ## Constants / 常用常量和方法 37 | * BearConstants 38 | * iOS开发中常用的各种方法,常量。屏幕宽高,UserDefault宏等 39 | 40 | 41 | ## Layout / 非约束性布局 42 | * UIView+BearSet 43 | * 非约束性布局和一些常用的布局思路 44 | * 详情见链接:http://blog.csdn.net/xiongbaoxr/article/details/50668260 45 | 46 | * UITableView+BearStoreCellHeight 47 | * UITableView自动记录Cell高度,获取cell高度,告别手动管理 48 | 49 | 50 | 51 | ## UI&Extend / UI和扩展 52 | * BearAlertView 53 | * 自定义弹框,支持自定义contentView,自定义BtnsView,支持简单的动画样式 54 | 55 | * BearCutOutView 56 | * 对UIView挖空特定的形状 57 | 58 | * UITextField+BearLimitLength 59 | * 限制UITextField输入字符数量 60 | * 详情见链接:http://blog.csdn.net/xiongbaoxr/article/details/51525061 61 | 62 | 63 | 64 | ## AttributeString / 富文本处理 65 | * NSMutableAttributedString+BearSet 66 | * 便携式富文本处理,支持正则表达式。也可直接设置行间距。 67 | 68 | 69 | 70 | --- 71 | # 历史版本: 72 | * 0.1.0 73 | 1. 新增BearCutOutView挖空UIView的方法 74 | 2. 将原先UITextField+BearSet方法整理更名为UITextField+BearLimitLength,并保留原来名称兼容此前版本 75 | 3. 整理项目结构并进行分类 76 | * 0.1.1 77 | 1. 增加BearAlertView自定义弹框方法 -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/ApplicationOpenURLManager.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Constants/ApplicationOpenURLManager.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/BearAlertBtnsView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/BearAlertContentView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/BearAlertView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/BearConstants.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Constants/BearConstants.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/BearCutOutView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearCutOutView.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/NSMutableAttributedString+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/UILabel+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/UILabel+BearSet.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/UITableView+BearStoreCellHeight.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Layout/UITableView+BearStoreCellHeight.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/UITextField+BearLimitLength.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/UITextField+BearLimitLength.h -------------------------------------------------------------------------------- /Pods/Headers/Private/BearSkill/UIView+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Layout/UIView+BearSet.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/ApplicationOpenURLManager.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Constants/ApplicationOpenURLManager.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/BearAlertBtnsView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/BearAlertContentView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/BearAlertView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearAlertView/BearAlertView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/BearConstants.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Constants/BearConstants.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/BearCutOutView.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/BearCutOutView.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/NSMutableAttributedString+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/UILabel+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/UILabel+BearSet.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/UITableView+BearStoreCellHeight.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Layout/UITableView+BearStoreCellHeight.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/UITextField+BearLimitLength.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/UI&Extend/UITextField+BearLimitLength.h -------------------------------------------------------------------------------- /Pods/Headers/Public/BearSkill/UIView+BearSet.h: -------------------------------------------------------------------------------- 1 | ../../../BearSkill/Pod/Classes/Layout/UIView+BearSet.h -------------------------------------------------------------------------------- /Pods/Local Podspecs/BearSkill.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BearSkill", 3 | "version": "0.2.0", 4 | "summary": "BearSkill contain some methods used frequently in project.", 5 | "description": "BearSkill contain some methods used frequently in project. And many other methods about layout.", 6 | "homepage": "https://github.com/BearRan/BearSkill", 7 | "license": "MIT", 8 | "authors": { 9 | "Bear": "648070256@qq.com" 10 | }, 11 | "source": { 12 | "git": "https://github.com/BearRan/BearSkill.git", 13 | "tag": "0.2.0" 14 | }, 15 | "platforms": { 16 | "ios": "7.0" 17 | }, 18 | "requires_arc": true, 19 | "source_files": "Pod/Classes/**/*" 20 | } 21 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BearSkill (0.2.0) 3 | 4 | DEPENDENCIES: 5 | - BearSkill (from `https://github.com/BearRan/BearSkill`, commit `81b9c9a`) 6 | 7 | EXTERNAL SOURCES: 8 | BearSkill: 9 | :commit: 81b9c9a 10 | :git: https://github.com/BearRan/BearSkill 11 | 12 | CHECKOUT OPTIONS: 13 | BearSkill: 14 | :commit: 81b9c9a 15 | :git: https://github.com/BearRan/BearSkill 16 | 17 | SPEC CHECKSUMS: 18 | BearSkill: 180b4d49cfae7466f65402eabcdb8d5a28665314 19 | 20 | PODFILE CHECKSUM: cad02e29e4440fa6f7a2d67cc2d06afcb01b8393 21 | 22 | COCOAPODS: 1.2.1 23 | -------------------------------------------------------------------------------- /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 | 0002E3D2D0F65DF9D56DA761A6E9C56E /* BearAlertBtnsView.m in Sources */ = {isa = PBXBuildFile; fileRef = C7B1D94EA0B20D09FB8131557B398948 /* BearAlertBtnsView.m */; }; 11 | 046866A8A2F9F50C7616604B312F55B6 /* NSMutableAttributedString+BearSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 89294D71598653C929500A85D88FCE0C /* NSMutableAttributedString+BearSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 0C3FE981245FDEF00F7B6501504304F3 /* UITableView+BearStoreCellHeight.h in Headers */ = {isa = PBXBuildFile; fileRef = DD312DA893FDE8CD0679D268572F2BD5 /* UITableView+BearStoreCellHeight.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 171C780398C8D8488C743991A04A2DFD /* UILabel+BearSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 74987B31D246387E9D97E5C5B105A836 /* UILabel+BearSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 33278B94CD181173ED5D0E718A07BA87 /* BearAlertContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = 67EE56015521FB1655A1932267304C4E /* BearAlertContentView.m */; }; 15 | 340DFABD1CB5948A2DFB6EC2932F8B49 /* Pods-CRYoYoBallAnimation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F47CAB2B32E50D1B23690A5AFEF1C3A /* Pods-CRYoYoBallAnimation-dummy.m */; }; 16 | 40DE4C2FB7FE31FD12CF6B4681CB3E4A /* UITableView+BearStoreCellHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A6E03E439799845347E1277FD136574 /* UITableView+BearStoreCellHeight.m */; }; 17 | 40EBD8AB598681B56D908D52552884A0 /* BearAlertView.h in Headers */ = {isa = PBXBuildFile; fileRef = 193D743CCEB19422159ACBEE06F55756 /* BearAlertView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | 47D9173FC69582E6B250164EB21FA33D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 19 | 4FE47EF4545560F8E64B3A89BB7121AA /* BearConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 37365F825D0152271AEA66A16A305A02 /* BearConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20 | 5450BA8E5C0616ABF7E2698ADAEAE92B /* BearCutOutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 253AC0523A61CAFB11BFFD8C52A88BE7 /* BearCutOutView.m */; }; 21 | 55DE757D29B332496CD58033C4358BC5 /* UITextField+BearLimitLength.h in Headers */ = {isa = PBXBuildFile; fileRef = 596BF423C5747CC3ADB281C7670BAC5C /* UITextField+BearLimitLength.h */; settings = {ATTRIBUTES = (Public, ); }; }; 22 | 5B8C0BBB5557C8403BFFD99072F4E5B8 /* BearAlertContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = B044D29604D80B208BEAC1039366678F /* BearAlertContentView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | 770FD138B36810C32C37C751333400CF /* UIView+BearSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 171E5C4E6A0A36CF99922698303C3D4A /* UIView+BearSet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 24 | 7D551A8DCD705274AF25534E9FE1E46E /* BearConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B685833E7459D3D0510891C82882C14D /* BearConstants.m */; }; 25 | 7FAF276FF7D823EC8415EECD3C6ED522 /* UILabel+BearSet.m in Sources */ = {isa = PBXBuildFile; fileRef = EA3AF74E6D04BC46E1878C5C9AFB1197 /* UILabel+BearSet.m */; }; 26 | 818FA23D8F720CDD3C6AB72D77342B03 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 27 | 9E43E82A3B5267463C54BABF1C85B494 /* BearAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA5B2884EA540088945C4C9708232E8B /* BearAlertView.m */; }; 28 | A76649E990A88E5DB1D001A0626FAE22 /* UITextField+BearLimitLength.m in Sources */ = {isa = PBXBuildFile; fileRef = C85DD37FD957EC914CA49EC0B74135EB /* UITextField+BearLimitLength.m */; }; 29 | BFD9E76F02F4991CAAE5A422FBCCD6E2 /* ApplicationOpenURLManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5279146ECF206CC05B1F7B18DDF59854 /* ApplicationOpenURLManager.m */; }; 30 | C4443002CF2F887B4E7137AAD26529D6 /* BearCutOutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C65CF7916E63F81ABEBC27118A16FB9 /* BearCutOutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 31 | CD36B10351C044D86DF628346A061CD0 /* ApplicationOpenURLManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B6D978F37D419FC18BC2A87EE0E554C /* ApplicationOpenURLManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 32 | E2E43C61F78D6242ACD4AF76DC1617A0 /* BearAlertBtnsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DA611708532EAA2FF07547137B55D2 /* BearAlertBtnsView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33 | EDF15BE92FEA5B1472DE66BF3F505FE9 /* NSMutableAttributedString+BearSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D6BC50F205B5551DEDF4AC9F960147C /* NSMutableAttributedString+BearSet.m */; }; 34 | F90117F6DEFE8CD81AE14DF6B63CAEA1 /* UIView+BearSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 068310F5BE74B66B9F9A0DD82B58E63C /* UIView+BearSet.m */; }; 35 | F9BF0DB3CF71D8D98EF58F3CBD8418B4 /* BearSkill-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30530335E63B119A734766E4769100B7 /* BearSkill-dummy.m */; }; 36 | /* End PBXBuildFile section */ 37 | 38 | /* Begin PBXContainerItemProxy section */ 39 | AF0C92A67A8DC48897BC901A85BA392E /* PBXContainerItemProxy */ = { 40 | isa = PBXContainerItemProxy; 41 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 42 | proxyType = 1; 43 | remoteGlobalIDString = E6EB61F8EEBE21B4ED5D58F1DD07EF2C; 44 | remoteInfo = BearSkill; 45 | }; 46 | /* End PBXContainerItemProxy section */ 47 | 48 | /* Begin PBXFileReference section */ 49 | 068310F5BE74B66B9F9A0DD82B58E63C /* UIView+BearSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+BearSet.m"; path = "Pod/Classes/Layout/UIView+BearSet.m"; sourceTree = ""; }; 50 | 08A8C3F0888469E81427619153571AB9 /* libBearSkill.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libBearSkill.a; path = libBearSkill.a; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 171E5C4E6A0A36CF99922698303C3D4A /* UIView+BearSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+BearSet.h"; path = "Pod/Classes/Layout/UIView+BearSet.h"; sourceTree = ""; }; 52 | 18DA611708532EAA2FF07547137B55D2 /* BearAlertBtnsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BearAlertBtnsView.h; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.h"; sourceTree = ""; }; 53 | 193D743CCEB19422159ACBEE06F55756 /* BearAlertView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BearAlertView.h; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertView.h"; sourceTree = ""; }; 54 | 1C65CF7916E63F81ABEBC27118A16FB9 /* BearCutOutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BearCutOutView.h; path = "Pod/Classes/UI&Extend/BearCutOutView.h"; sourceTree = ""; }; 55 | 253AC0523A61CAFB11BFFD8C52A88BE7 /* BearCutOutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BearCutOutView.m; path = "Pod/Classes/UI&Extend/BearCutOutView.m"; sourceTree = ""; }; 56 | 296313ABC023FA3CBB77C006904111F7 /* BearSkill.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = BearSkill.xcconfig; sourceTree = ""; }; 57 | 30530335E63B119A734766E4769100B7 /* BearSkill-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BearSkill-dummy.m"; sourceTree = ""; }; 58 | 37365F825D0152271AEA66A16A305A02 /* BearConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BearConstants.h; path = Pod/Classes/Constants/BearConstants.h; sourceTree = ""; }; 59 | 3915196B4743DAA5600F7624F0F80FA0 /* BearSkill-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BearSkill-prefix.pch"; sourceTree = ""; }; 60 | 3B6D978F37D419FC18BC2A87EE0E554C /* ApplicationOpenURLManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ApplicationOpenURLManager.h; path = Pod/Classes/Constants/ApplicationOpenURLManager.h; sourceTree = ""; }; 61 | 4A6E03E439799845347E1277FD136574 /* UITableView+BearStoreCellHeight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+BearStoreCellHeight.m"; path = "Pod/Classes/Layout/UITableView+BearStoreCellHeight.m"; sourceTree = ""; }; 62 | 5279146ECF206CC05B1F7B18DDF59854 /* ApplicationOpenURLManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ApplicationOpenURLManager.m; path = Pod/Classes/Constants/ApplicationOpenURLManager.m; sourceTree = ""; }; 63 | 5354B0A262A22D3D1C766833CC20C20A /* Pods-CRYoYoBallAnimation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CRYoYoBallAnimation.debug.xcconfig"; sourceTree = ""; }; 64 | 596BF423C5747CC3ADB281C7670BAC5C /* UITextField+BearLimitLength.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextField+BearLimitLength.h"; path = "Pod/Classes/UI&Extend/UITextField+BearLimitLength.h"; sourceTree = ""; }; 65 | 5D6BC50F205B5551DEDF4AC9F960147C /* NSMutableAttributedString+BearSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableAttributedString+BearSet.m"; path = "Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.m"; sourceTree = ""; }; 66 | 5F47CAB2B32E50D1B23690A5AFEF1C3A /* Pods-CRYoYoBallAnimation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-CRYoYoBallAnimation-dummy.m"; sourceTree = ""; }; 67 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 68 | 67EE56015521FB1655A1932267304C4E /* BearAlertContentView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BearAlertContentView.m; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.m"; sourceTree = ""; }; 69 | 7079AECFC5B5891C9CCD5289330CA840 /* Pods-CRYoYoBallAnimation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-CRYoYoBallAnimation.release.xcconfig"; sourceTree = ""; }; 70 | 74987B31D246387E9D97E5C5B105A836 /* UILabel+BearSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+BearSet.h"; path = "Pod/Classes/UI&Extend/UILabel+BearSet.h"; sourceTree = ""; }; 71 | 785E6C1EB3DA71E671D14C7BCCF7B75E /* Pods-CRYoYoBallAnimation-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CRYoYoBallAnimation-frameworks.sh"; sourceTree = ""; }; 72 | 7E03D82D6B235B84A544E8056EA2EC26 /* libPods-CRYoYoBallAnimation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-CRYoYoBallAnimation.a"; path = "libPods-CRYoYoBallAnimation.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | 89294D71598653C929500A85D88FCE0C /* NSMutableAttributedString+BearSet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableAttributedString+BearSet.h"; path = "Pod/Classes/AttributeString/NSMutableAttributedString+BearSet.h"; sourceTree = ""; }; 74 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 75 | B044D29604D80B208BEAC1039366678F /* BearAlertContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BearAlertContentView.h; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertContentView.h"; sourceTree = ""; }; 76 | B685833E7459D3D0510891C82882C14D /* BearConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BearConstants.m; path = Pod/Classes/Constants/BearConstants.m; sourceTree = ""; }; 77 | C03737EA01B3838553FFCA6468DE2762 /* Pods-CRYoYoBallAnimation-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-CRYoYoBallAnimation-acknowledgements.plist"; sourceTree = ""; }; 78 | C7B1D94EA0B20D09FB8131557B398948 /* BearAlertBtnsView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BearAlertBtnsView.m; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertBtnsView.m"; sourceTree = ""; }; 79 | C85DD37FD957EC914CA49EC0B74135EB /* UITextField+BearLimitLength.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITextField+BearLimitLength.m"; path = "Pod/Classes/UI&Extend/UITextField+BearLimitLength.m"; sourceTree = ""; }; 80 | D4D8F52629CE0B59F1C949387295D976 /* Pods-CRYoYoBallAnimation-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-CRYoYoBallAnimation-resources.sh"; sourceTree = ""; }; 81 | DD312DA893FDE8CD0679D268572F2BD5 /* UITableView+BearStoreCellHeight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+BearStoreCellHeight.h"; path = "Pod/Classes/Layout/UITableView+BearStoreCellHeight.h"; sourceTree = ""; }; 82 | EA3AF74E6D04BC46E1878C5C9AFB1197 /* UILabel+BearSet.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+BearSet.m"; path = "Pod/Classes/UI&Extend/UILabel+BearSet.m"; sourceTree = ""; }; 83 | ED002DF3E49AC24131EB423B6CB647A3 /* Pods-CRYoYoBallAnimation-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-CRYoYoBallAnimation-acknowledgements.markdown"; sourceTree = ""; }; 84 | FA5B2884EA540088945C4C9708232E8B /* BearAlertView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BearAlertView.m; path = "Pod/Classes/UI&Extend/BearAlertView/BearAlertView.m"; sourceTree = ""; }; 85 | /* End PBXFileReference section */ 86 | 87 | /* Begin PBXFrameworksBuildPhase section */ 88 | A2A04E8BB715D9CAE6AE3327544DD48D /* Frameworks */ = { 89 | isa = PBXFrameworksBuildPhase; 90 | buildActionMask = 2147483647; 91 | files = ( 92 | 47D9173FC69582E6B250164EB21FA33D /* Foundation.framework in Frameworks */, 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | BCACD6A4B7E4193AB36DC2333F2B4328 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | 818FA23D8F720CDD3C6AB72D77342B03 /* Foundation.framework in Frameworks */, 101 | ); 102 | runOnlyForDeploymentPostprocessing = 0; 103 | }; 104 | /* End PBXFrameworksBuildPhase section */ 105 | 106 | /* Begin PBXGroup section */ 107 | 482ADCD6CFC42BFCABC5592CB80FDFE9 /* Pods-CRYoYoBallAnimation */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | ED002DF3E49AC24131EB423B6CB647A3 /* Pods-CRYoYoBallAnimation-acknowledgements.markdown */, 111 | C03737EA01B3838553FFCA6468DE2762 /* Pods-CRYoYoBallAnimation-acknowledgements.plist */, 112 | 5F47CAB2B32E50D1B23690A5AFEF1C3A /* Pods-CRYoYoBallAnimation-dummy.m */, 113 | 785E6C1EB3DA71E671D14C7BCCF7B75E /* Pods-CRYoYoBallAnimation-frameworks.sh */, 114 | D4D8F52629CE0B59F1C949387295D976 /* Pods-CRYoYoBallAnimation-resources.sh */, 115 | 5354B0A262A22D3D1C766833CC20C20A /* Pods-CRYoYoBallAnimation.debug.xcconfig */, 116 | 7079AECFC5B5891C9CCD5289330CA840 /* Pods-CRYoYoBallAnimation.release.xcconfig */, 117 | ); 118 | name = "Pods-CRYoYoBallAnimation"; 119 | path = "Target Support Files/Pods-CRYoYoBallAnimation"; 120 | sourceTree = ""; 121 | }; 122 | 55FA986A2823BE327C386E643119DBB9 /* Support Files */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 296313ABC023FA3CBB77C006904111F7 /* BearSkill.xcconfig */, 126 | 30530335E63B119A734766E4769100B7 /* BearSkill-dummy.m */, 127 | 3915196B4743DAA5600F7624F0F80FA0 /* BearSkill-prefix.pch */, 128 | ); 129 | name = "Support Files"; 130 | path = "../Target Support Files/BearSkill"; 131 | sourceTree = ""; 132 | }; 133 | 5718C87A7E4B92FDD3AA833009A23F2B /* Pods */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 625B70F09E8751C9B4F1518E9FBEA8D0 /* BearSkill */, 137 | ); 138 | name = Pods; 139 | sourceTree = ""; 140 | }; 141 | 625B70F09E8751C9B4F1518E9FBEA8D0 /* BearSkill */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 3B6D978F37D419FC18BC2A87EE0E554C /* ApplicationOpenURLManager.h */, 145 | 5279146ECF206CC05B1F7B18DDF59854 /* ApplicationOpenURLManager.m */, 146 | 18DA611708532EAA2FF07547137B55D2 /* BearAlertBtnsView.h */, 147 | C7B1D94EA0B20D09FB8131557B398948 /* BearAlertBtnsView.m */, 148 | B044D29604D80B208BEAC1039366678F /* BearAlertContentView.h */, 149 | 67EE56015521FB1655A1932267304C4E /* BearAlertContentView.m */, 150 | 193D743CCEB19422159ACBEE06F55756 /* BearAlertView.h */, 151 | FA5B2884EA540088945C4C9708232E8B /* BearAlertView.m */, 152 | 37365F825D0152271AEA66A16A305A02 /* BearConstants.h */, 153 | B685833E7459D3D0510891C82882C14D /* BearConstants.m */, 154 | 1C65CF7916E63F81ABEBC27118A16FB9 /* BearCutOutView.h */, 155 | 253AC0523A61CAFB11BFFD8C52A88BE7 /* BearCutOutView.m */, 156 | 89294D71598653C929500A85D88FCE0C /* NSMutableAttributedString+BearSet.h */, 157 | 5D6BC50F205B5551DEDF4AC9F960147C /* NSMutableAttributedString+BearSet.m */, 158 | 74987B31D246387E9D97E5C5B105A836 /* UILabel+BearSet.h */, 159 | EA3AF74E6D04BC46E1878C5C9AFB1197 /* UILabel+BearSet.m */, 160 | DD312DA893FDE8CD0679D268572F2BD5 /* UITableView+BearStoreCellHeight.h */, 161 | 4A6E03E439799845347E1277FD136574 /* UITableView+BearStoreCellHeight.m */, 162 | 596BF423C5747CC3ADB281C7670BAC5C /* UITextField+BearLimitLength.h */, 163 | C85DD37FD957EC914CA49EC0B74135EB /* UITextField+BearLimitLength.m */, 164 | 171E5C4E6A0A36CF99922698303C3D4A /* UIView+BearSet.h */, 165 | 068310F5BE74B66B9F9A0DD82B58E63C /* UIView+BearSet.m */, 166 | 55FA986A2823BE327C386E643119DBB9 /* Support Files */, 167 | ); 168 | name = BearSkill; 169 | path = BearSkill; 170 | sourceTree = ""; 171 | }; 172 | 7DB346D0F39D3F0E887471402A8071AB = { 173 | isa = PBXGroup; 174 | children = ( 175 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 176 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 177 | 5718C87A7E4B92FDD3AA833009A23F2B /* Pods */, 178 | 8F3B8BDEEF471CA03A209B063E1C5D9D /* Products */, 179 | FB4EF0EA0AF68CA080B3BF0BA38EE5C1 /* Targets Support Files */, 180 | ); 181 | sourceTree = ""; 182 | }; 183 | 8F3B8BDEEF471CA03A209B063E1C5D9D /* Products */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 08A8C3F0888469E81427619153571AB9 /* libBearSkill.a */, 187 | 7E03D82D6B235B84A544E8056EA2EC26 /* libPods-CRYoYoBallAnimation.a */, 188 | ); 189 | name = Products; 190 | sourceTree = ""; 191 | }; 192 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 196 | ); 197 | name = Frameworks; 198 | sourceTree = ""; 199 | }; 200 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 204 | ); 205 | name = iOS; 206 | sourceTree = ""; 207 | }; 208 | FB4EF0EA0AF68CA080B3BF0BA38EE5C1 /* Targets Support Files */ = { 209 | isa = PBXGroup; 210 | children = ( 211 | 482ADCD6CFC42BFCABC5592CB80FDFE9 /* Pods-CRYoYoBallAnimation */, 212 | ); 213 | name = "Targets Support Files"; 214 | sourceTree = ""; 215 | }; 216 | /* End PBXGroup section */ 217 | 218 | /* Begin PBXHeadersBuildPhase section */ 219 | D382018D8CBBD04A6AFE09395BC9AD0B /* Headers */ = { 220 | isa = PBXHeadersBuildPhase; 221 | buildActionMask = 2147483647; 222 | files = ( 223 | CD36B10351C044D86DF628346A061CD0 /* ApplicationOpenURLManager.h in Headers */, 224 | E2E43C61F78D6242ACD4AF76DC1617A0 /* BearAlertBtnsView.h in Headers */, 225 | 5B8C0BBB5557C8403BFFD99072F4E5B8 /* BearAlertContentView.h in Headers */, 226 | 40EBD8AB598681B56D908D52552884A0 /* BearAlertView.h in Headers */, 227 | 4FE47EF4545560F8E64B3A89BB7121AA /* BearConstants.h in Headers */, 228 | C4443002CF2F887B4E7137AAD26529D6 /* BearCutOutView.h in Headers */, 229 | 046866A8A2F9F50C7616604B312F55B6 /* NSMutableAttributedString+BearSet.h in Headers */, 230 | 171C780398C8D8488C743991A04A2DFD /* UILabel+BearSet.h in Headers */, 231 | 0C3FE981245FDEF00F7B6501504304F3 /* UITableView+BearStoreCellHeight.h in Headers */, 232 | 55DE757D29B332496CD58033C4358BC5 /* UITextField+BearLimitLength.h in Headers */, 233 | 770FD138B36810C32C37C751333400CF /* UIView+BearSet.h in Headers */, 234 | ); 235 | runOnlyForDeploymentPostprocessing = 0; 236 | }; 237 | /* End PBXHeadersBuildPhase section */ 238 | 239 | /* Begin PBXNativeTarget section */ 240 | 800793F225D132D191919F559614CE15 /* Pods-CRYoYoBallAnimation */ = { 241 | isa = PBXNativeTarget; 242 | buildConfigurationList = 6BD4BB7AF312D1F0A101DC05FA344C35 /* Build configuration list for PBXNativeTarget "Pods-CRYoYoBallAnimation" */; 243 | buildPhases = ( 244 | B022FE4CACF00B67ABBE6BFB7709896F /* Sources */, 245 | A2A04E8BB715D9CAE6AE3327544DD48D /* Frameworks */, 246 | ); 247 | buildRules = ( 248 | ); 249 | dependencies = ( 250 | 37A6DA078840462A74B4C772776DA110 /* PBXTargetDependency */, 251 | ); 252 | name = "Pods-CRYoYoBallAnimation"; 253 | productName = "Pods-CRYoYoBallAnimation"; 254 | productReference = 7E03D82D6B235B84A544E8056EA2EC26 /* libPods-CRYoYoBallAnimation.a */; 255 | productType = "com.apple.product-type.library.static"; 256 | }; 257 | E6EB61F8EEBE21B4ED5D58F1DD07EF2C /* BearSkill */ = { 258 | isa = PBXNativeTarget; 259 | buildConfigurationList = 30C8D2D62279218CDDAE8DB2C127E666 /* Build configuration list for PBXNativeTarget "BearSkill" */; 260 | buildPhases = ( 261 | 3A23E8862838596D3C9ABE1A1BD5495F /* Sources */, 262 | BCACD6A4B7E4193AB36DC2333F2B4328 /* Frameworks */, 263 | D382018D8CBBD04A6AFE09395BC9AD0B /* Headers */, 264 | ); 265 | buildRules = ( 266 | ); 267 | dependencies = ( 268 | ); 269 | name = BearSkill; 270 | productName = BearSkill; 271 | productReference = 08A8C3F0888469E81427619153571AB9 /* libBearSkill.a */; 272 | productType = "com.apple.product-type.library.static"; 273 | }; 274 | /* End PBXNativeTarget section */ 275 | 276 | /* Begin PBXProject section */ 277 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 278 | isa = PBXProject; 279 | attributes = { 280 | LastSwiftUpdateCheck = 0830; 281 | LastUpgradeCheck = 0700; 282 | }; 283 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 284 | compatibilityVersion = "Xcode 3.2"; 285 | developmentRegion = English; 286 | hasScannedForEncodings = 0; 287 | knownRegions = ( 288 | en, 289 | ); 290 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 291 | productRefGroup = 8F3B8BDEEF471CA03A209B063E1C5D9D /* Products */; 292 | projectDirPath = ""; 293 | projectRoot = ""; 294 | targets = ( 295 | E6EB61F8EEBE21B4ED5D58F1DD07EF2C /* BearSkill */, 296 | 800793F225D132D191919F559614CE15 /* Pods-CRYoYoBallAnimation */, 297 | ); 298 | }; 299 | /* End PBXProject section */ 300 | 301 | /* Begin PBXSourcesBuildPhase section */ 302 | 3A23E8862838596D3C9ABE1A1BD5495F /* Sources */ = { 303 | isa = PBXSourcesBuildPhase; 304 | buildActionMask = 2147483647; 305 | files = ( 306 | BFD9E76F02F4991CAAE5A422FBCCD6E2 /* ApplicationOpenURLManager.m in Sources */, 307 | 0002E3D2D0F65DF9D56DA761A6E9C56E /* BearAlertBtnsView.m in Sources */, 308 | 33278B94CD181173ED5D0E718A07BA87 /* BearAlertContentView.m in Sources */, 309 | 9E43E82A3B5267463C54BABF1C85B494 /* BearAlertView.m in Sources */, 310 | 7D551A8DCD705274AF25534E9FE1E46E /* BearConstants.m in Sources */, 311 | 5450BA8E5C0616ABF7E2698ADAEAE92B /* BearCutOutView.m in Sources */, 312 | F9BF0DB3CF71D8D98EF58F3CBD8418B4 /* BearSkill-dummy.m in Sources */, 313 | EDF15BE92FEA5B1472DE66BF3F505FE9 /* NSMutableAttributedString+BearSet.m in Sources */, 314 | 7FAF276FF7D823EC8415EECD3C6ED522 /* UILabel+BearSet.m in Sources */, 315 | 40DE4C2FB7FE31FD12CF6B4681CB3E4A /* UITableView+BearStoreCellHeight.m in Sources */, 316 | A76649E990A88E5DB1D001A0626FAE22 /* UITextField+BearLimitLength.m in Sources */, 317 | F90117F6DEFE8CD81AE14DF6B63CAEA1 /* UIView+BearSet.m in Sources */, 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | }; 321 | B022FE4CACF00B67ABBE6BFB7709896F /* Sources */ = { 322 | isa = PBXSourcesBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | 340DFABD1CB5948A2DFB6EC2932F8B49 /* Pods-CRYoYoBallAnimation-dummy.m in Sources */, 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | /* End PBXSourcesBuildPhase section */ 330 | 331 | /* Begin PBXTargetDependency section */ 332 | 37A6DA078840462A74B4C772776DA110 /* PBXTargetDependency */ = { 333 | isa = PBXTargetDependency; 334 | name = BearSkill; 335 | target = E6EB61F8EEBE21B4ED5D58F1DD07EF2C /* BearSkill */; 336 | targetProxy = AF0C92A67A8DC48897BC901A85BA392E /* PBXContainerItemProxy */; 337 | }; 338 | /* End PBXTargetDependency section */ 339 | 340 | /* Begin XCBuildConfiguration section */ 341 | 163D87BE96A63549B0EACF1CC31A2E90 /* Debug */ = { 342 | isa = XCBuildConfiguration; 343 | buildSettings = { 344 | ALWAYS_SEARCH_USER_PATHS = NO; 345 | CLANG_ANALYZER_NONNULL = YES; 346 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 347 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 348 | CLANG_CXX_LIBRARY = "libc++"; 349 | CLANG_ENABLE_MODULES = YES; 350 | CLANG_ENABLE_OBJC_ARC = YES; 351 | CLANG_WARN_BOOL_CONVERSION = YES; 352 | CLANG_WARN_CONSTANT_CONVERSION = YES; 353 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 354 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 355 | CLANG_WARN_EMPTY_BODY = YES; 356 | CLANG_WARN_ENUM_CONVERSION = YES; 357 | CLANG_WARN_INFINITE_RECURSION = YES; 358 | CLANG_WARN_INT_CONVERSION = YES; 359 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 360 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 361 | CLANG_WARN_UNREACHABLE_CODE = YES; 362 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 363 | CODE_SIGNING_REQUIRED = NO; 364 | COPY_PHASE_STRIP = NO; 365 | ENABLE_TESTABILITY = YES; 366 | GCC_C_LANGUAGE_STANDARD = gnu99; 367 | GCC_DYNAMIC_NO_PIC = NO; 368 | GCC_OPTIMIZATION_LEVEL = 0; 369 | GCC_PREPROCESSOR_DEFINITIONS = ( 370 | "POD_CONFIGURATION_DEBUG=1", 371 | "DEBUG=1", 372 | "$(inherited)", 373 | ); 374 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 375 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 376 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 377 | GCC_WARN_UNDECLARED_SELECTOR = YES; 378 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 379 | GCC_WARN_UNUSED_FUNCTION = YES; 380 | GCC_WARN_UNUSED_VARIABLE = YES; 381 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 382 | ONLY_ACTIVE_ARCH = YES; 383 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 384 | STRIP_INSTALLED_PRODUCT = NO; 385 | SYMROOT = "${SRCROOT}/../build"; 386 | }; 387 | name = Debug; 388 | }; 389 | 42A3E3696B8BA96238E8E29553914B8E /* Debug */ = { 390 | isa = XCBuildConfiguration; 391 | baseConfigurationReference = 5354B0A262A22D3D1C766833CC20C20A /* Pods-CRYoYoBallAnimation.debug.xcconfig */; 392 | buildSettings = { 393 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 394 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 395 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 396 | DEBUG_INFORMATION_FORMAT = dwarf; 397 | ENABLE_STRICT_OBJC_MSGSEND = YES; 398 | GCC_NO_COMMON_BLOCKS = YES; 399 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 400 | MACH_O_TYPE = staticlib; 401 | MTL_ENABLE_DEBUG_INFO = YES; 402 | OTHER_LDFLAGS = ""; 403 | OTHER_LIBTOOLFLAGS = ""; 404 | PODS_ROOT = "$(SRCROOT)"; 405 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 406 | PRODUCT_NAME = "$(TARGET_NAME)"; 407 | SDKROOT = iphoneos; 408 | SKIP_INSTALL = YES; 409 | }; 410 | name = Debug; 411 | }; 412 | 707B86CFB21B645E37109F39754D4051 /* Release */ = { 413 | isa = XCBuildConfiguration; 414 | buildSettings = { 415 | ALWAYS_SEARCH_USER_PATHS = NO; 416 | CLANG_ANALYZER_NONNULL = YES; 417 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 418 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 419 | CLANG_CXX_LIBRARY = "libc++"; 420 | CLANG_ENABLE_MODULES = YES; 421 | CLANG_ENABLE_OBJC_ARC = YES; 422 | CLANG_WARN_BOOL_CONVERSION = YES; 423 | CLANG_WARN_CONSTANT_CONVERSION = YES; 424 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 425 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 426 | CLANG_WARN_EMPTY_BODY = YES; 427 | CLANG_WARN_ENUM_CONVERSION = YES; 428 | CLANG_WARN_INFINITE_RECURSION = YES; 429 | CLANG_WARN_INT_CONVERSION = YES; 430 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 431 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 432 | CLANG_WARN_UNREACHABLE_CODE = YES; 433 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 434 | CODE_SIGNING_REQUIRED = NO; 435 | COPY_PHASE_STRIP = YES; 436 | ENABLE_NS_ASSERTIONS = NO; 437 | GCC_C_LANGUAGE_STANDARD = gnu99; 438 | GCC_PREPROCESSOR_DEFINITIONS = ( 439 | "POD_CONFIGURATION_RELEASE=1", 440 | "$(inherited)", 441 | ); 442 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 443 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 444 | GCC_WARN_UNDECLARED_SELECTOR = YES; 445 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 446 | GCC_WARN_UNUSED_FUNCTION = YES; 447 | GCC_WARN_UNUSED_VARIABLE = YES; 448 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 449 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 450 | STRIP_INSTALLED_PRODUCT = NO; 451 | SYMROOT = "${SRCROOT}/../build"; 452 | VALIDATE_PRODUCT = YES; 453 | }; 454 | name = Release; 455 | }; 456 | 707E919F8B0461F77836F8278E9E3F22 /* Release */ = { 457 | isa = XCBuildConfiguration; 458 | baseConfigurationReference = 296313ABC023FA3CBB77C006904111F7 /* BearSkill.xcconfig */; 459 | buildSettings = { 460 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 461 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 462 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 463 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 464 | ENABLE_STRICT_OBJC_MSGSEND = YES; 465 | GCC_NO_COMMON_BLOCKS = YES; 466 | GCC_PREFIX_HEADER = "Target Support Files/BearSkill/BearSkill-prefix.pch"; 467 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 468 | MTL_ENABLE_DEBUG_INFO = NO; 469 | OTHER_LDFLAGS = ""; 470 | OTHER_LIBTOOLFLAGS = ""; 471 | PRIVATE_HEADERS_FOLDER_PATH = ""; 472 | PRODUCT_NAME = "$(TARGET_NAME)"; 473 | PUBLIC_HEADERS_FOLDER_PATH = ""; 474 | SDKROOT = iphoneos; 475 | SKIP_INSTALL = YES; 476 | }; 477 | name = Release; 478 | }; 479 | C2896FF110D44F4C9DAB43C2184CEF6F /* Debug */ = { 480 | isa = XCBuildConfiguration; 481 | baseConfigurationReference = 296313ABC023FA3CBB77C006904111F7 /* BearSkill.xcconfig */; 482 | buildSettings = { 483 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 484 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 485 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 486 | DEBUG_INFORMATION_FORMAT = dwarf; 487 | ENABLE_STRICT_OBJC_MSGSEND = YES; 488 | GCC_NO_COMMON_BLOCKS = YES; 489 | GCC_PREFIX_HEADER = "Target Support Files/BearSkill/BearSkill-prefix.pch"; 490 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 491 | MTL_ENABLE_DEBUG_INFO = YES; 492 | OTHER_LDFLAGS = ""; 493 | OTHER_LIBTOOLFLAGS = ""; 494 | PRIVATE_HEADERS_FOLDER_PATH = ""; 495 | PRODUCT_NAME = "$(TARGET_NAME)"; 496 | PUBLIC_HEADERS_FOLDER_PATH = ""; 497 | SDKROOT = iphoneos; 498 | SKIP_INSTALL = YES; 499 | }; 500 | name = Debug; 501 | }; 502 | FC4B419AC43457C1FE10EFEABEB37BDC /* Release */ = { 503 | isa = XCBuildConfiguration; 504 | baseConfigurationReference = 7079AECFC5B5891C9CCD5289330CA840 /* Pods-CRYoYoBallAnimation.release.xcconfig */; 505 | buildSettings = { 506 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 507 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 508 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 509 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 510 | ENABLE_STRICT_OBJC_MSGSEND = YES; 511 | GCC_NO_COMMON_BLOCKS = YES; 512 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 513 | MACH_O_TYPE = staticlib; 514 | MTL_ENABLE_DEBUG_INFO = NO; 515 | OTHER_LDFLAGS = ""; 516 | OTHER_LIBTOOLFLAGS = ""; 517 | PODS_ROOT = "$(SRCROOT)"; 518 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 519 | PRODUCT_NAME = "$(TARGET_NAME)"; 520 | SDKROOT = iphoneos; 521 | SKIP_INSTALL = YES; 522 | }; 523 | name = Release; 524 | }; 525 | /* End XCBuildConfiguration section */ 526 | 527 | /* Begin XCConfigurationList section */ 528 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 529 | isa = XCConfigurationList; 530 | buildConfigurations = ( 531 | 163D87BE96A63549B0EACF1CC31A2E90 /* Debug */, 532 | 707B86CFB21B645E37109F39754D4051 /* Release */, 533 | ); 534 | defaultConfigurationIsVisible = 0; 535 | defaultConfigurationName = Release; 536 | }; 537 | 30C8D2D62279218CDDAE8DB2C127E666 /* Build configuration list for PBXNativeTarget "BearSkill" */ = { 538 | isa = XCConfigurationList; 539 | buildConfigurations = ( 540 | C2896FF110D44F4C9DAB43C2184CEF6F /* Debug */, 541 | 707E919F8B0461F77836F8278E9E3F22 /* Release */, 542 | ); 543 | defaultConfigurationIsVisible = 0; 544 | defaultConfigurationName = Release; 545 | }; 546 | 6BD4BB7AF312D1F0A101DC05FA344C35 /* Build configuration list for PBXNativeTarget "Pods-CRYoYoBallAnimation" */ = { 547 | isa = XCConfigurationList; 548 | buildConfigurations = ( 549 | 42A3E3696B8BA96238E8E29553914B8E /* Debug */, 550 | FC4B419AC43457C1FE10EFEABEB37BDC /* Release */, 551 | ); 552 | defaultConfigurationIsVisible = 0; 553 | defaultConfigurationName = Release; 554 | }; 555 | /* End XCConfigurationList section */ 556 | }; 557 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 558 | } 559 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/bear.xcuserdatad/xcschemes/BearSkill.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/bear.xcuserdatad/xcschemes/Pods-CRYoYoBallAnimation.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/bear.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | BearSkill.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Pods-CRYoYoBallAnimation.xcscheme 13 | 14 | isShown 15 | 16 | 17 | 18 | SuppressBuildableAutocreation 19 | 20 | 800793F225D132D191919F559614CE15 21 | 22 | primary 23 | 24 | 25 | E6EB61F8EEBE21B4ED5D58F1DD07EF2C 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BearSkill/BearSkill-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_BearSkill : NSObject 3 | @end 4 | @implementation PodsDummy_BearSkill 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BearSkill/BearSkill-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/BearSkill/BearSkill.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/BearSkill 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BearSkill" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BearSkill" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/BearSkill 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## BearSkill 5 | 6 | Copyright (c) 2016 Bear <648070256@qq.com> 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2016 Bear <648070256@qq.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | BearSkill 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_CRYoYoBallAnimation : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_CRYoYoBallAnimation 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-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="${TARGET_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 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | 4) 25 | TARGET_DEVICE_ARGS="--target-device watch" 26 | ;; 27 | *) 28 | TARGET_DEVICE_ARGS="--target-device mac" 29 | ;; 30 | esac 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "${PODS_ROOT}*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BearSkill" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BearSkill" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BearSkill" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"BearSkill" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-CRYoYoBallAnimation/Pods-CRYoYoBallAnimation.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BearSkill" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/BearSkill" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/BearSkill" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"BearSkill" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## gitHub:[https://github.com/CRAnimation/CRYoYoBallAnimation](https://github.com/CRAnimation/CRYoYoBallAnimation) 3 | 4 | #### 本来是群里一个小伙伴的原型 5 | 原型地址:https://dribbble.com/shots/3504395-App-icon-football 6 | 7 | ![footBall.gif](Resource/footBall.gif) 8 | 9 | #### 看着觉得还不错,难度也不大,就决定还原一下了。 10 | #### 下面是最终实现效果,背景的网格线就没有加了 11 | 12 | ![CRYoYoBallAnimation.gif](Resource/CRYoYoBallAnimation.gif) 13 | 14 | 这个还是很简单的,在CAShapeLayer上使用CABasicanimation就能实现这个效果。核心代码直有一小段 15 | ``` 16 | - (void)startAnimation 17 | { 18 | CAMediaTimingFunction *timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.79 :0.14 :0.13 :0.83]; 19 | 20 | CABasicAnimation *animation = [CABasicAnimation animation]; 21 | animation.keyPath = @"transform.rotation"; 22 | animation.duration = 2.5 23 | ; 24 | animation.repeatCount = INFINITY; 25 | animation.byValue = @(M_PI * 2); 26 | animation.timingFunction = timingFunction; 27 | [_ballContentLayer addAnimation:animation forKey:animation.keyPath]; 28 | } 29 | ``` 30 | 要点也只有两个, 31 | * `animation.repeatCount = INFINITY;` 32 | 动画循环次数设为`INFINITY `,无穷大 33 | * `CAMediaTimingFunction`速度控制函数,用于控制小球的运动速度。 34 | 关于这个函数,大家可以看下[动画解释](https://objccn.io/issue-12-1/)里“时间函数”的部分。另外,对于这个函数里四个参数,可以参考在线工具[CAMediaTimingFunction playground](http://netcetera.org/camtf-playground.html)来理解 35 | 36 | -------------------------------------------------------------------------------- /Resource/CRYoYoBallAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CRAnimation/CRYoYoBallAnimation/9c7ae9e24efb353c0d4fe7fcf3a01daf148e4f07/Resource/CRYoYoBallAnimation.gif -------------------------------------------------------------------------------- /Resource/footBall.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CRAnimation/CRYoYoBallAnimation/9c7ae9e24efb353c0d4fe7fcf3a01daf148e4f07/Resource/footBall.gif --------------------------------------------------------------------------------