├── Neomorphic button.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── maurocanhao.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── Neomorphic button ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── ContentView.swift ├── Info.plist ├── Neomorphic_buttonApp.swift └── Preview Content │ └── Preview Assets.xcassets │ └── Contents.json ├── Neomorphic buttonTests ├── Info.plist └── Neomorphic_buttonTests.swift ├── Neomorphic buttonUITests ├── Info.plist └── Neomorphic_buttonUITests.swift ├── README.md └── ezgif.com-video-to-gif-2.gif /Neomorphic button.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 67557F9F251A27CB00C7B36A /* Neomorphic_buttonApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67557F9E251A27CB00C7B36A /* Neomorphic_buttonApp.swift */; }; 11 | 67557FA1251A27CB00C7B36A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67557FA0251A27CB00C7B36A /* ContentView.swift */; }; 12 | 67557FA3251A27CC00C7B36A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67557FA2251A27CC00C7B36A /* Assets.xcassets */; }; 13 | 67557FA6251A27CC00C7B36A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67557FA5251A27CC00C7B36A /* Preview Assets.xcassets */; }; 14 | 67557FB1251A27CD00C7B36A /* Neomorphic_buttonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67557FB0251A27CD00C7B36A /* Neomorphic_buttonTests.swift */; }; 15 | 67557FBC251A27CD00C7B36A /* Neomorphic_buttonUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67557FBB251A27CD00C7B36A /* Neomorphic_buttonUITests.swift */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXContainerItemProxy section */ 19 | 67557FAD251A27CD00C7B36A /* PBXContainerItemProxy */ = { 20 | isa = PBXContainerItemProxy; 21 | containerPortal = 67557F93251A27CB00C7B36A /* Project object */; 22 | proxyType = 1; 23 | remoteGlobalIDString = 67557F9A251A27CB00C7B36A; 24 | remoteInfo = "Neomorphic button"; 25 | }; 26 | 67557FB8251A27CD00C7B36A /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = 67557F93251A27CB00C7B36A /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = 67557F9A251A27CB00C7B36A; 31 | remoteInfo = "Neomorphic button"; 32 | }; 33 | /* End PBXContainerItemProxy section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 67557F9B251A27CB00C7B36A /* Neomorphic button.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Neomorphic button.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 67557F9E251A27CB00C7B36A /* Neomorphic_buttonApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Neomorphic_buttonApp.swift; sourceTree = ""; }; 38 | 67557FA0251A27CB00C7B36A /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 39 | 67557FA2251A27CC00C7B36A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 40 | 67557FA5251A27CC00C7B36A /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 41 | 67557FA7251A27CC00C7B36A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 67557FAC251A27CD00C7B36A /* Neomorphic buttonTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Neomorphic buttonTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 67557FB0251A27CD00C7B36A /* Neomorphic_buttonTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Neomorphic_buttonTests.swift; sourceTree = ""; }; 44 | 67557FB2251A27CD00C7B36A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | 67557FB7251A27CD00C7B36A /* Neomorphic buttonUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Neomorphic buttonUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 67557FBB251A27CD00C7B36A /* Neomorphic_buttonUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Neomorphic_buttonUITests.swift; sourceTree = ""; }; 47 | 67557FBD251A27CD00C7B36A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | /* End PBXFileReference section */ 49 | 50 | /* Begin PBXFrameworksBuildPhase section */ 51 | 67557F98251A27CB00C7B36A /* Frameworks */ = { 52 | isa = PBXFrameworksBuildPhase; 53 | buildActionMask = 2147483647; 54 | files = ( 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | 67557FA9251A27CD00C7B36A /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | ); 63 | runOnlyForDeploymentPostprocessing = 0; 64 | }; 65 | 67557FB4251A27CD00C7B36A /* Frameworks */ = { 66 | isa = PBXFrameworksBuildPhase; 67 | buildActionMask = 2147483647; 68 | files = ( 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | /* End PBXFrameworksBuildPhase section */ 73 | 74 | /* Begin PBXGroup section */ 75 | 67557F92251A27CB00C7B36A = { 76 | isa = PBXGroup; 77 | children = ( 78 | 67557F9D251A27CB00C7B36A /* Neomorphic button */, 79 | 67557FAF251A27CD00C7B36A /* Neomorphic buttonTests */, 80 | 67557FBA251A27CD00C7B36A /* Neomorphic buttonUITests */, 81 | 67557F9C251A27CB00C7B36A /* Products */, 82 | ); 83 | sourceTree = ""; 84 | }; 85 | 67557F9C251A27CB00C7B36A /* Products */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 67557F9B251A27CB00C7B36A /* Neomorphic button.app */, 89 | 67557FAC251A27CD00C7B36A /* Neomorphic buttonTests.xctest */, 90 | 67557FB7251A27CD00C7B36A /* Neomorphic buttonUITests.xctest */, 91 | ); 92 | name = Products; 93 | sourceTree = ""; 94 | }; 95 | 67557F9D251A27CB00C7B36A /* Neomorphic button */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 67557F9E251A27CB00C7B36A /* Neomorphic_buttonApp.swift */, 99 | 67557FA0251A27CB00C7B36A /* ContentView.swift */, 100 | 67557FA2251A27CC00C7B36A /* Assets.xcassets */, 101 | 67557FA7251A27CC00C7B36A /* Info.plist */, 102 | 67557FA4251A27CC00C7B36A /* Preview Content */, 103 | ); 104 | path = "Neomorphic button"; 105 | sourceTree = ""; 106 | }; 107 | 67557FA4251A27CC00C7B36A /* Preview Content */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 67557FA5251A27CC00C7B36A /* Preview Assets.xcassets */, 111 | ); 112 | path = "Preview Content"; 113 | sourceTree = ""; 114 | }; 115 | 67557FAF251A27CD00C7B36A /* Neomorphic buttonTests */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 67557FB0251A27CD00C7B36A /* Neomorphic_buttonTests.swift */, 119 | 67557FB2251A27CD00C7B36A /* Info.plist */, 120 | ); 121 | path = "Neomorphic buttonTests"; 122 | sourceTree = ""; 123 | }; 124 | 67557FBA251A27CD00C7B36A /* Neomorphic buttonUITests */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | 67557FBB251A27CD00C7B36A /* Neomorphic_buttonUITests.swift */, 128 | 67557FBD251A27CD00C7B36A /* Info.plist */, 129 | ); 130 | path = "Neomorphic buttonUITests"; 131 | sourceTree = ""; 132 | }; 133 | /* End PBXGroup section */ 134 | 135 | /* Begin PBXNativeTarget section */ 136 | 67557F9A251A27CB00C7B36A /* Neomorphic button */ = { 137 | isa = PBXNativeTarget; 138 | buildConfigurationList = 67557FC0251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic button" */; 139 | buildPhases = ( 140 | 67557F97251A27CB00C7B36A /* Sources */, 141 | 67557F98251A27CB00C7B36A /* Frameworks */, 142 | 67557F99251A27CB00C7B36A /* Resources */, 143 | ); 144 | buildRules = ( 145 | ); 146 | dependencies = ( 147 | ); 148 | name = "Neomorphic button"; 149 | productName = "Neomorphic button"; 150 | productReference = 67557F9B251A27CB00C7B36A /* Neomorphic button.app */; 151 | productType = "com.apple.product-type.application"; 152 | }; 153 | 67557FAB251A27CD00C7B36A /* Neomorphic buttonTests */ = { 154 | isa = PBXNativeTarget; 155 | buildConfigurationList = 67557FC3251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic buttonTests" */; 156 | buildPhases = ( 157 | 67557FA8251A27CD00C7B36A /* Sources */, 158 | 67557FA9251A27CD00C7B36A /* Frameworks */, 159 | 67557FAA251A27CD00C7B36A /* Resources */, 160 | ); 161 | buildRules = ( 162 | ); 163 | dependencies = ( 164 | 67557FAE251A27CD00C7B36A /* PBXTargetDependency */, 165 | ); 166 | name = "Neomorphic buttonTests"; 167 | productName = "Neomorphic buttonTests"; 168 | productReference = 67557FAC251A27CD00C7B36A /* Neomorphic buttonTests.xctest */; 169 | productType = "com.apple.product-type.bundle.unit-test"; 170 | }; 171 | 67557FB6251A27CD00C7B36A /* Neomorphic buttonUITests */ = { 172 | isa = PBXNativeTarget; 173 | buildConfigurationList = 67557FC6251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic buttonUITests" */; 174 | buildPhases = ( 175 | 67557FB3251A27CD00C7B36A /* Sources */, 176 | 67557FB4251A27CD00C7B36A /* Frameworks */, 177 | 67557FB5251A27CD00C7B36A /* Resources */, 178 | ); 179 | buildRules = ( 180 | ); 181 | dependencies = ( 182 | 67557FB9251A27CD00C7B36A /* PBXTargetDependency */, 183 | ); 184 | name = "Neomorphic buttonUITests"; 185 | productName = "Neomorphic buttonUITests"; 186 | productReference = 67557FB7251A27CD00C7B36A /* Neomorphic buttonUITests.xctest */; 187 | productType = "com.apple.product-type.bundle.ui-testing"; 188 | }; 189 | /* End PBXNativeTarget section */ 190 | 191 | /* Begin PBXProject section */ 192 | 67557F93251A27CB00C7B36A /* Project object */ = { 193 | isa = PBXProject; 194 | attributes = { 195 | LastSwiftUpdateCheck = 1200; 196 | LastUpgradeCheck = 1200; 197 | TargetAttributes = { 198 | 67557F9A251A27CB00C7B36A = { 199 | CreatedOnToolsVersion = 12.0; 200 | }; 201 | 67557FAB251A27CD00C7B36A = { 202 | CreatedOnToolsVersion = 12.0; 203 | TestTargetID = 67557F9A251A27CB00C7B36A; 204 | }; 205 | 67557FB6251A27CD00C7B36A = { 206 | CreatedOnToolsVersion = 12.0; 207 | TestTargetID = 67557F9A251A27CB00C7B36A; 208 | }; 209 | }; 210 | }; 211 | buildConfigurationList = 67557F96251A27CB00C7B36A /* Build configuration list for PBXProject "Neomorphic button" */; 212 | compatibilityVersion = "Xcode 9.3"; 213 | developmentRegion = en; 214 | hasScannedForEncodings = 0; 215 | knownRegions = ( 216 | en, 217 | Base, 218 | ); 219 | mainGroup = 67557F92251A27CB00C7B36A; 220 | productRefGroup = 67557F9C251A27CB00C7B36A /* Products */; 221 | projectDirPath = ""; 222 | projectRoot = ""; 223 | targets = ( 224 | 67557F9A251A27CB00C7B36A /* Neomorphic button */, 225 | 67557FAB251A27CD00C7B36A /* Neomorphic buttonTests */, 226 | 67557FB6251A27CD00C7B36A /* Neomorphic buttonUITests */, 227 | ); 228 | }; 229 | /* End PBXProject section */ 230 | 231 | /* Begin PBXResourcesBuildPhase section */ 232 | 67557F99251A27CB00C7B36A /* Resources */ = { 233 | isa = PBXResourcesBuildPhase; 234 | buildActionMask = 2147483647; 235 | files = ( 236 | 67557FA6251A27CC00C7B36A /* Preview Assets.xcassets in Resources */, 237 | 67557FA3251A27CC00C7B36A /* Assets.xcassets in Resources */, 238 | ); 239 | runOnlyForDeploymentPostprocessing = 0; 240 | }; 241 | 67557FAA251A27CD00C7B36A /* Resources */ = { 242 | isa = PBXResourcesBuildPhase; 243 | buildActionMask = 2147483647; 244 | files = ( 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | 67557FB5251A27CD00C7B36A /* Resources */ = { 249 | isa = PBXResourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | /* End PBXResourcesBuildPhase section */ 256 | 257 | /* Begin PBXSourcesBuildPhase section */ 258 | 67557F97251A27CB00C7B36A /* Sources */ = { 259 | isa = PBXSourcesBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | 67557FA1251A27CB00C7B36A /* ContentView.swift in Sources */, 263 | 67557F9F251A27CB00C7B36A /* Neomorphic_buttonApp.swift in Sources */, 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | }; 267 | 67557FA8251A27CD00C7B36A /* Sources */ = { 268 | isa = PBXSourcesBuildPhase; 269 | buildActionMask = 2147483647; 270 | files = ( 271 | 67557FB1251A27CD00C7B36A /* Neomorphic_buttonTests.swift in Sources */, 272 | ); 273 | runOnlyForDeploymentPostprocessing = 0; 274 | }; 275 | 67557FB3251A27CD00C7B36A /* Sources */ = { 276 | isa = PBXSourcesBuildPhase; 277 | buildActionMask = 2147483647; 278 | files = ( 279 | 67557FBC251A27CD00C7B36A /* Neomorphic_buttonUITests.swift in Sources */, 280 | ); 281 | runOnlyForDeploymentPostprocessing = 0; 282 | }; 283 | /* End PBXSourcesBuildPhase section */ 284 | 285 | /* Begin PBXTargetDependency section */ 286 | 67557FAE251A27CD00C7B36A /* PBXTargetDependency */ = { 287 | isa = PBXTargetDependency; 288 | target = 67557F9A251A27CB00C7B36A /* Neomorphic button */; 289 | targetProxy = 67557FAD251A27CD00C7B36A /* PBXContainerItemProxy */; 290 | }; 291 | 67557FB9251A27CD00C7B36A /* PBXTargetDependency */ = { 292 | isa = PBXTargetDependency; 293 | target = 67557F9A251A27CB00C7B36A /* Neomorphic button */; 294 | targetProxy = 67557FB8251A27CD00C7B36A /* PBXContainerItemProxy */; 295 | }; 296 | /* End PBXTargetDependency section */ 297 | 298 | /* Begin XCBuildConfiguration section */ 299 | 67557FBE251A27CD00C7B36A /* Debug */ = { 300 | isa = XCBuildConfiguration; 301 | buildSettings = { 302 | ALWAYS_SEARCH_USER_PATHS = NO; 303 | CLANG_ANALYZER_NONNULL = YES; 304 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 305 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 306 | CLANG_CXX_LIBRARY = "libc++"; 307 | CLANG_ENABLE_MODULES = YES; 308 | CLANG_ENABLE_OBJC_ARC = YES; 309 | CLANG_ENABLE_OBJC_WEAK = YES; 310 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 311 | CLANG_WARN_BOOL_CONVERSION = YES; 312 | CLANG_WARN_COMMA = YES; 313 | CLANG_WARN_CONSTANT_CONVERSION = YES; 314 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 315 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 316 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 317 | CLANG_WARN_EMPTY_BODY = YES; 318 | CLANG_WARN_ENUM_CONVERSION = YES; 319 | CLANG_WARN_INFINITE_RECURSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 325 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 326 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 327 | CLANG_WARN_STRICT_PROTOTYPES = YES; 328 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 329 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 330 | CLANG_WARN_UNREACHABLE_CODE = YES; 331 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 332 | COPY_PHASE_STRIP = NO; 333 | DEBUG_INFORMATION_FORMAT = dwarf; 334 | ENABLE_STRICT_OBJC_MSGSEND = YES; 335 | ENABLE_TESTABILITY = YES; 336 | GCC_C_LANGUAGE_STANDARD = gnu11; 337 | GCC_DYNAMIC_NO_PIC = NO; 338 | GCC_NO_COMMON_BLOCKS = YES; 339 | GCC_OPTIMIZATION_LEVEL = 0; 340 | GCC_PREPROCESSOR_DEFINITIONS = ( 341 | "DEBUG=1", 342 | "$(inherited)", 343 | ); 344 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 345 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 346 | GCC_WARN_UNDECLARED_SELECTOR = YES; 347 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 348 | GCC_WARN_UNUSED_FUNCTION = YES; 349 | GCC_WARN_UNUSED_VARIABLE = YES; 350 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 351 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 352 | MTL_FAST_MATH = YES; 353 | ONLY_ACTIVE_ARCH = YES; 354 | SDKROOT = iphoneos; 355 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 356 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 357 | }; 358 | name = Debug; 359 | }; 360 | 67557FBF251A27CD00C7B36A /* Release */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | ALWAYS_SEARCH_USER_PATHS = NO; 364 | CLANG_ANALYZER_NONNULL = YES; 365 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 366 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 367 | CLANG_CXX_LIBRARY = "libc++"; 368 | CLANG_ENABLE_MODULES = YES; 369 | CLANG_ENABLE_OBJC_ARC = YES; 370 | CLANG_ENABLE_OBJC_WEAK = YES; 371 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 372 | CLANG_WARN_BOOL_CONVERSION = YES; 373 | CLANG_WARN_COMMA = YES; 374 | CLANG_WARN_CONSTANT_CONVERSION = YES; 375 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 376 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 377 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 378 | CLANG_WARN_EMPTY_BODY = YES; 379 | CLANG_WARN_ENUM_CONVERSION = YES; 380 | CLANG_WARN_INFINITE_RECURSION = YES; 381 | CLANG_WARN_INT_CONVERSION = YES; 382 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 383 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 384 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 385 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 386 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 387 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 388 | CLANG_WARN_STRICT_PROTOTYPES = YES; 389 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 390 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 391 | CLANG_WARN_UNREACHABLE_CODE = YES; 392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 393 | COPY_PHASE_STRIP = NO; 394 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 395 | ENABLE_NS_ASSERTIONS = NO; 396 | ENABLE_STRICT_OBJC_MSGSEND = YES; 397 | GCC_C_LANGUAGE_STANDARD = gnu11; 398 | GCC_NO_COMMON_BLOCKS = YES; 399 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 400 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 401 | GCC_WARN_UNDECLARED_SELECTOR = YES; 402 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 403 | GCC_WARN_UNUSED_FUNCTION = YES; 404 | GCC_WARN_UNUSED_VARIABLE = YES; 405 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 406 | MTL_ENABLE_DEBUG_INFO = NO; 407 | MTL_FAST_MATH = YES; 408 | SDKROOT = iphoneos; 409 | SWIFT_COMPILATION_MODE = wholemodule; 410 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 411 | VALIDATE_PRODUCT = YES; 412 | }; 413 | name = Release; 414 | }; 415 | 67557FC1251A27CD00C7B36A /* Debug */ = { 416 | isa = XCBuildConfiguration; 417 | buildSettings = { 418 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 419 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 420 | CODE_SIGN_STYLE = Automatic; 421 | DEVELOPMENT_ASSET_PATHS = "\"Neomorphic button/Preview Content\""; 422 | DEVELOPMENT_TEAM = CPYT3A73TA; 423 | ENABLE_PREVIEWS = YES; 424 | INFOPLIST_FILE = "Neomorphic button/Info.plist"; 425 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 426 | LD_RUNPATH_SEARCH_PATHS = ( 427 | "$(inherited)", 428 | "@executable_path/Frameworks", 429 | ); 430 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-button"; 431 | PRODUCT_NAME = "$(TARGET_NAME)"; 432 | SWIFT_VERSION = 5.0; 433 | TARGETED_DEVICE_FAMILY = "1,2"; 434 | }; 435 | name = Debug; 436 | }; 437 | 67557FC2251A27CD00C7B36A /* Release */ = { 438 | isa = XCBuildConfiguration; 439 | buildSettings = { 440 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 441 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 442 | CODE_SIGN_STYLE = Automatic; 443 | DEVELOPMENT_ASSET_PATHS = "\"Neomorphic button/Preview Content\""; 444 | DEVELOPMENT_TEAM = CPYT3A73TA; 445 | ENABLE_PREVIEWS = YES; 446 | INFOPLIST_FILE = "Neomorphic button/Info.plist"; 447 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 448 | LD_RUNPATH_SEARCH_PATHS = ( 449 | "$(inherited)", 450 | "@executable_path/Frameworks", 451 | ); 452 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-button"; 453 | PRODUCT_NAME = "$(TARGET_NAME)"; 454 | SWIFT_VERSION = 5.0; 455 | TARGETED_DEVICE_FAMILY = "1,2"; 456 | }; 457 | name = Release; 458 | }; 459 | 67557FC4251A27CD00C7B36A /* Debug */ = { 460 | isa = XCBuildConfiguration; 461 | buildSettings = { 462 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 463 | BUNDLE_LOADER = "$(TEST_HOST)"; 464 | CODE_SIGN_STYLE = Automatic; 465 | DEVELOPMENT_TEAM = CPYT3A73TA; 466 | INFOPLIST_FILE = "Neomorphic buttonTests/Info.plist"; 467 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 468 | LD_RUNPATH_SEARCH_PATHS = ( 469 | "$(inherited)", 470 | "@executable_path/Frameworks", 471 | "@loader_path/Frameworks", 472 | ); 473 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-buttonTests"; 474 | PRODUCT_NAME = "$(TARGET_NAME)"; 475 | SWIFT_VERSION = 5.0; 476 | TARGETED_DEVICE_FAMILY = "1,2"; 477 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Neomorphic button.app/Neomorphic button"; 478 | }; 479 | name = Debug; 480 | }; 481 | 67557FC5251A27CD00C7B36A /* Release */ = { 482 | isa = XCBuildConfiguration; 483 | buildSettings = { 484 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 485 | BUNDLE_LOADER = "$(TEST_HOST)"; 486 | CODE_SIGN_STYLE = Automatic; 487 | DEVELOPMENT_TEAM = CPYT3A73TA; 488 | INFOPLIST_FILE = "Neomorphic buttonTests/Info.plist"; 489 | IPHONEOS_DEPLOYMENT_TARGET = 14.0; 490 | LD_RUNPATH_SEARCH_PATHS = ( 491 | "$(inherited)", 492 | "@executable_path/Frameworks", 493 | "@loader_path/Frameworks", 494 | ); 495 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-buttonTests"; 496 | PRODUCT_NAME = "$(TARGET_NAME)"; 497 | SWIFT_VERSION = 5.0; 498 | TARGETED_DEVICE_FAMILY = "1,2"; 499 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Neomorphic button.app/Neomorphic button"; 500 | }; 501 | name = Release; 502 | }; 503 | 67557FC7251A27CD00C7B36A /* Debug */ = { 504 | isa = XCBuildConfiguration; 505 | buildSettings = { 506 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 507 | CODE_SIGN_STYLE = Automatic; 508 | DEVELOPMENT_TEAM = CPYT3A73TA; 509 | INFOPLIST_FILE = "Neomorphic buttonUITests/Info.plist"; 510 | LD_RUNPATH_SEARCH_PATHS = ( 511 | "$(inherited)", 512 | "@executable_path/Frameworks", 513 | "@loader_path/Frameworks", 514 | ); 515 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-buttonUITests"; 516 | PRODUCT_NAME = "$(TARGET_NAME)"; 517 | SWIFT_VERSION = 5.0; 518 | TARGETED_DEVICE_FAMILY = "1,2"; 519 | TEST_TARGET_NAME = "Neomorphic button"; 520 | }; 521 | name = Debug; 522 | }; 523 | 67557FC8251A27CD00C7B36A /* Release */ = { 524 | isa = XCBuildConfiguration; 525 | buildSettings = { 526 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 527 | CODE_SIGN_STYLE = Automatic; 528 | DEVELOPMENT_TEAM = CPYT3A73TA; 529 | INFOPLIST_FILE = "Neomorphic buttonUITests/Info.plist"; 530 | LD_RUNPATH_SEARCH_PATHS = ( 531 | "$(inherited)", 532 | "@executable_path/Frameworks", 533 | "@loader_path/Frameworks", 534 | ); 535 | PRODUCT_BUNDLE_IDENTIFIER = "mauro.Neomorphic-buttonUITests"; 536 | PRODUCT_NAME = "$(TARGET_NAME)"; 537 | SWIFT_VERSION = 5.0; 538 | TARGETED_DEVICE_FAMILY = "1,2"; 539 | TEST_TARGET_NAME = "Neomorphic button"; 540 | }; 541 | name = Release; 542 | }; 543 | /* End XCBuildConfiguration section */ 544 | 545 | /* Begin XCConfigurationList section */ 546 | 67557F96251A27CB00C7B36A /* Build configuration list for PBXProject "Neomorphic button" */ = { 547 | isa = XCConfigurationList; 548 | buildConfigurations = ( 549 | 67557FBE251A27CD00C7B36A /* Debug */, 550 | 67557FBF251A27CD00C7B36A /* Release */, 551 | ); 552 | defaultConfigurationIsVisible = 0; 553 | defaultConfigurationName = Release; 554 | }; 555 | 67557FC0251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic button" */ = { 556 | isa = XCConfigurationList; 557 | buildConfigurations = ( 558 | 67557FC1251A27CD00C7B36A /* Debug */, 559 | 67557FC2251A27CD00C7B36A /* Release */, 560 | ); 561 | defaultConfigurationIsVisible = 0; 562 | defaultConfigurationName = Release; 563 | }; 564 | 67557FC3251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic buttonTests" */ = { 565 | isa = XCConfigurationList; 566 | buildConfigurations = ( 567 | 67557FC4251A27CD00C7B36A /* Debug */, 568 | 67557FC5251A27CD00C7B36A /* Release */, 569 | ); 570 | defaultConfigurationIsVisible = 0; 571 | defaultConfigurationName = Release; 572 | }; 573 | 67557FC6251A27CD00C7B36A /* Build configuration list for PBXNativeTarget "Neomorphic buttonUITests" */ = { 574 | isa = XCConfigurationList; 575 | buildConfigurations = ( 576 | 67557FC7251A27CD00C7B36A /* Debug */, 577 | 67557FC8251A27CD00C7B36A /* Release */, 578 | ); 579 | defaultConfigurationIsVisible = 0; 580 | defaultConfigurationName = Release; 581 | }; 582 | /* End XCConfigurationList section */ 583 | }; 584 | rootObject = 67557F93251A27CB00C7B36A /* Project object */; 585 | } 586 | -------------------------------------------------------------------------------- /Neomorphic button.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Neomorphic button.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Neomorphic button.xcodeproj/xcuserdata/maurocanhao.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Neomorphic button.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Neomorphic button/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Neomorphic button/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "scale" : "1x", 46 | "size" : "20x20" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "scale" : "2x", 51 | "size" : "20x20" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "scale" : "1x", 56 | "size" : "29x29" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "29x29" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "scale" : "1x", 66 | "size" : "40x40" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "scale" : "2x", 71 | "size" : "40x40" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "scale" : "1x", 76 | "size" : "76x76" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "scale" : "2x", 81 | "size" : "76x76" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "scale" : "2x", 86 | "size" : "83.5x83.5" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "scale" : "1x", 91 | "size" : "1024x1024" 92 | } 93 | ], 94 | "info" : { 95 | "author" : "xcode", 96 | "version" : 1 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /Neomorphic button/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Neomorphic button/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // Neomorphic button 4 | // 5 | // Created by Mauro Canhao on 22/09/2020. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | VStack(spacing: 50) { 13 | LineButton() 14 | CircleButton() 15 | } 16 | .frame(maxWidth: /*@START_MENU_TOKEN@*/.infinity/*@END_MENU_TOKEN@*/, maxHeight: /*@START_MENU_TOKEN@*/.infinity/*@END_MENU_TOKEN@*/) 17 | .background(Color(#colorLiteral(red: 0.8486280441, green: 0.9037795663, blue: 0.9840080142, alpha: 1))) 18 | .edgesIgnoringSafeArea(.all) 19 | .animation(.spring(response: 0.6, dampingFraction: 0.7, blendDuration: 0)) 20 | } 21 | } 22 | 23 | struct ContentView_Previews: PreviewProvider { 24 | static var previews: some View { 25 | Group { 26 | ContentView() 27 | } 28 | } 29 | } 30 | 31 | 32 | struct CircleButton: View { 33 | 34 | @State var tap = false 35 | @State var press = false 36 | 37 | var body: some View { 38 | ZStack{ 39 | Image(systemName: "sun.max") 40 | .font(.system(size: 44, weight: .light)) 41 | .offset(x: press ? -90 : 0, y: press ? -90 : 0) 42 | .rotation3DEffect(Angle(degrees: press ? 20 : 0), axis: (x: 10, y: -10, z: 0)) 43 | 44 | Image(systemName: "moon") 45 | .font(.system(size: 44, weight: .light)) 46 | .offset(x: press ? 0 : 90, y: press ? 0 : 90) 47 | .rotation3DEffect(Angle(degrees: press ? 0 : 20), axis: (x: -10, y: 10, z: 0)) 48 | } 49 | .frame(width: 100, height: 100) 50 | .background( 51 | ZStack{ 52 | LinearGradient(gradient: Gradient(colors: press ? [Color.white, Color(#colorLiteral(red: 0.8486280441, green: 0.9037795663, blue: 0.9840080142, alpha: 1))] : [Color(#colorLiteral(red: 0.8486280441, green: 0.9037795663, blue: 0.9840080142, alpha: 1)), Color.white]), startPoint: .topLeading, endPoint: .bottomTrailing) 53 | 54 | Circle() 55 | .stroke(Color.clear, lineWidth: 10) 56 | .shadow(color: Color(press ? .white : #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1)), radius: 5, x: -5, y: -5) 57 | 58 | Circle() 59 | .stroke(Color.clear, lineWidth: 10) 60 | .shadow(color: Color(press ? #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1) : .white), radius: 5, x: 5, y: 5) 61 | } 62 | ) 63 | .clipShape(Circle()) 64 | .shadow(color: Color(press ? #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1) : .white ), radius: 20, x: -20, y: -20) 65 | .shadow(color: Color(press ? .white : #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1) ), radius: 20, x: 20, y: 20) 66 | .scaleEffect(tap ? 1.2 : 1) 67 | .onTapGesture(count: 1, perform: { 68 | self.tap = true 69 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 70 | self.tap = false 71 | } 72 | self.press.toggle() 73 | }) 74 | } 75 | } 76 | 77 | struct LineButton: View { 78 | 79 | @State var tap = false 80 | @State var press = false 81 | 82 | var body: some View { 83 | VStack { 84 | Text("Button") 85 | .font(.system(size: 20, weight: .semibold, design: .rounded)) 86 | .frame(width: 200, height: 60) 87 | 88 | .background( 89 | ZStack{ 90 | press ? Color.white : Color(#colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1)) 91 | RoundedRectangle(cornerRadius: 16, style: /*@START_MENU_TOKEN@*/.continuous/*@END_MENU_TOKEN@*/) 92 | .foregroundColor( press ? Color(#colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1)) : .white) 93 | .blur(radius: 4) 94 | .offset(x: -8, y: -8) 95 | 96 | RoundedRectangle(cornerRadius: 16, style: /*@START_MENU_TOKEN@*/.continuous/*@END_MENU_TOKEN@*/) 97 | .fill( 98 | LinearGradient(gradient: Gradient(colors: press ? [Color(#colorLiteral(red: 0.8486280441, green: 0.9037795663, blue: 0.9840080142, alpha: 1)), Color.white] : [Color.white, Color(#colorLiteral(red: 0.8486280441, green: 0.9037795663, blue: 0.9840080142, alpha: 1))]), startPoint: .topLeading, endPoint: .bottomTrailing) 99 | ).animation(.default) 100 | .padding(2) 101 | .blur(radius: 2) 102 | } 103 | ) 104 | 105 | .clipShape(RoundedRectangle(cornerRadius: 16, style: /*@START_MENU_TOKEN@*/.continuous/*@END_MENU_TOKEN@*/)) 106 | .overlay( 107 | HStack{ 108 | Image(systemName: "person.crop.circle") 109 | .font(.system(size: 24, weight: .light, design: .rounded)) 110 | .foregroundColor(Color.white.opacity(press ? 0 : 1)) 111 | .frame(width: press ? 64 : 54, height: press ? 4 : 50, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/) 112 | .background(Color.purple) 113 | .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) 114 | .shadow(color: Color.purple.opacity(0.3), radius: 10, x: 10, y: 10) 115 | .offset(x: press ? 70 : -10, y: press ? 16 : 0) 116 | 117 | Spacer() 118 | } 119 | ) 120 | .shadow(color: Color(press ? #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0) : #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1) ), radius: 20, x: 20, y: 20) 121 | .shadow(color: Color(press ? #colorLiteral(red: 0.7152195573, green: 0.7906422615, blue: 0.908705771, alpha: 1) : #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)), radius: 20, x: -20, y: -20) 122 | .scaleEffect(tap ? 1.2 : 1) 123 | .onTapGesture(count: /*@START_MENU_TOKEN@*/1/*@END_MENU_TOKEN@*/, perform: { 124 | print("tap") 125 | self.tap = true 126 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 127 | self.tap = false 128 | } 129 | self.press.toggle() 130 | }) 131 | 132 | 133 | }.scaleEffect(1) 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /Neomorphic button/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | 28 | UIApplicationSupportsIndirectInputEvents 29 | 30 | UILaunchScreen 31 | 32 | UIRequiredDeviceCapabilities 33 | 34 | armv7 35 | 36 | UISupportedInterfaceOrientations 37 | 38 | UIInterfaceOrientationPortrait 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UISupportedInterfaceOrientations~ipad 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Neomorphic button/Neomorphic_buttonApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Neomorphic_buttonApp.swift 3 | // Neomorphic button 4 | // 5 | // Created by Mauro Canhao on 22/09/2020. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct Neomorphic_buttonApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Neomorphic button/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Neomorphic buttonTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Neomorphic buttonTests/Neomorphic_buttonTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Neomorphic_buttonTests.swift 3 | // Neomorphic buttonTests 4 | // 5 | // Created by Mauro Canhao on 22/09/2020. 6 | // 7 | 8 | import XCTest 9 | @testable import Neomorphic_button 10 | 11 | class Neomorphic_buttonTests: XCTestCase { 12 | 13 | override func setUpWithError() throws { 14 | // Put setup code here. This method is called before the invocation of each test method in the class. 15 | } 16 | 17 | override func tearDownWithError() throws { 18 | // Put teardown code here. This method is called after the invocation of each test method in the class. 19 | } 20 | 21 | func testExample() throws { 22 | // This is an example of a functional test case. 23 | // Use XCTAssert and related functions to verify your tests produce the correct results. 24 | } 25 | 26 | func testPerformanceExample() throws { 27 | // This is an example of a performance test case. 28 | self.measure { 29 | // Put the code you want to measure the time of here. 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Neomorphic buttonUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Neomorphic buttonUITests/Neomorphic_buttonUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Neomorphic_buttonUITests.swift 3 | // Neomorphic buttonUITests 4 | // 5 | // Created by Mauro Canhao on 22/09/2020. 6 | // 7 | 8 | import XCTest 9 | 10 | class Neomorphic_buttonUITests: XCTestCase { 11 | 12 | override func setUpWithError() throws { 13 | // Put setup code here. This method is called before the invocation of each test method in the class. 14 | 15 | // In UI tests it is usually best to stop immediately when a failure occurs. 16 | continueAfterFailure = false 17 | 18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 19 | } 20 | 21 | override func tearDownWithError() throws { 22 | // Put teardown code here. This method is called after the invocation of each test method in the class. 23 | } 24 | 25 | func testExample() throws { 26 | // UI tests must launch the application that they test. 27 | let app = XCUIApplication() 28 | app.launch() 29 | 30 | // Use recording to get started writing UI tests. 31 | // Use XCTAssert and related functions to verify your tests produce the correct results. 32 | } 33 | 34 | func testLaunchPerformance() throws { 35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) { 36 | // This measures how long it takes to launch your application. 37 | measure(metrics: [XCTApplicationLaunchMetric()]) { 38 | XCUIApplication().launch() 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Neomorphic-buttons 2 | Neomorphic buttons swiftUI 3 | # Demo 4 | ![](ezgif.com-video-to-gif-2.gif) 5 | 6 | 7 | -------------------------------------------------------------------------------- /ezgif.com-video-to-gif-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauromarques/Neomorphic-buttons/9bbac7754895c263633ed6e2d2f01c38c89a1147/ezgif.com-video-to-gif-2.gif --------------------------------------------------------------------------------