From da480576e8904320bb4f148156b41f2ad01353b7 Mon Sep 17 00:00:00 2001 From: Shanmukh Phulari Date: Tue, 9 Aug 2022 16:28:34 +0530 Subject: [PATCH] Added AirDrop animation example --- .../project.pbxproj | 604 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 31920 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../xcschemes/xcschememanagement.plist | 14 + .../AirDropAnimation_ExampleApp.swift | 17 + .../AirDropView.swift | 179 ++++++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++ .../Assets.xcassets/Contents.json | 6 + .../AirDropAnimation_Example/Constant.swift | 22 + .../ContentView.swift | 83 +++ .../Preview Assets.xcassets/Contents.json | 6 + .../Resources/person.png | Bin 0 -> 16890 bytes .../AirDropAnimation_ExampleTests.swift | 36 ++ .../AirDropAnimation_ExampleUITests.swift | 42 ++ ...pAnimation_ExampleUITestsLaunchTests.swift | 32 + 18 files changed, 1171 insertions(+) create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.pbxproj create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcuserdata/shanmukh.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/xcuserdata/shanmukh.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/xcuserdata/shanmukh.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/AirDropAnimation_ExampleApp.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/AirDropView.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/Contents.json create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Constant.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/ContentView.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 AirDropAnimation_Example/AirDropAnimation_Example/Resources/person.png create mode 100644 AirDropAnimation_Example/AirDropAnimation_ExampleTests/AirDropAnimation_ExampleTests.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITests.swift create mode 100644 AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITestsLaunchTests.swift diff --git a/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.pbxproj b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2a2e1f0 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.pbxproj @@ -0,0 +1,604 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 266EA27B289CDAFE004D7EBF /* AirDropAnimation_ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA27A289CDAFE004D7EBF /* AirDropAnimation_ExampleApp.swift */; }; + 266EA27D289CDAFE004D7EBF /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA27C289CDAFE004D7EBF /* ContentView.swift */; }; + 266EA27F289CDB00004D7EBF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 266EA27E289CDB00004D7EBF /* Assets.xcassets */; }; + 266EA282289CDB00004D7EBF /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 266EA281289CDB00004D7EBF /* Preview Assets.xcassets */; }; + 266EA28C289CDB00004D7EBF /* AirDropAnimation_ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA28B289CDB00004D7EBF /* AirDropAnimation_ExampleTests.swift */; }; + 266EA296289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA295289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.swift */; }; + 266EA298289CDB00004D7EBF /* AirDropAnimation_ExampleUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA297289CDB00004D7EBF /* AirDropAnimation_ExampleUITestsLaunchTests.swift */; }; + 266EA2A5289CDB46004D7EBF /* AirDropView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 266EA2A4289CDB46004D7EBF /* AirDropView.swift */; }; + 26A01DF928A159A000C178B5 /* person.png in Resources */ = {isa = PBXBuildFile; fileRef = 26A01DF828A159A000C178B5 /* person.png */; }; + 26A01DFB28A26E0E00C178B5 /* Constant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26A01DFA28A26E0E00C178B5 /* Constant.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 266EA288289CDB00004D7EBF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 266EA26F289CDAFE004D7EBF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 266EA276289CDAFE004D7EBF; + remoteInfo = AirDropAnimation_Example; + }; + 266EA292289CDB00004D7EBF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 266EA26F289CDAFE004D7EBF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 266EA276289CDAFE004D7EBF; + remoteInfo = AirDropAnimation_Example; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 266EA277289CDAFE004D7EBF /* AirDropAnimation_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AirDropAnimation_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 266EA27A289CDAFE004D7EBF /* AirDropAnimation_ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirDropAnimation_ExampleApp.swift; sourceTree = ""; }; + 266EA27C289CDAFE004D7EBF /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 266EA27E289CDB00004D7EBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 266EA281289CDB00004D7EBF /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 266EA287289CDB00004D7EBF /* AirDropAnimation_ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AirDropAnimation_ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 266EA28B289CDB00004D7EBF /* AirDropAnimation_ExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirDropAnimation_ExampleTests.swift; sourceTree = ""; }; + 266EA291289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AirDropAnimation_ExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 266EA295289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirDropAnimation_ExampleUITests.swift; sourceTree = ""; }; + 266EA297289CDB00004D7EBF /* AirDropAnimation_ExampleUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirDropAnimation_ExampleUITestsLaunchTests.swift; sourceTree = ""; }; + 266EA2A4289CDB46004D7EBF /* AirDropView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirDropView.swift; sourceTree = ""; }; + 26A01DF828A159A000C178B5 /* person.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = person.png; sourceTree = ""; }; + 26A01DFA28A26E0E00C178B5 /* Constant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constant.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 266EA274289CDAFE004D7EBF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA284289CDB00004D7EBF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA28E289CDB00004D7EBF /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 266EA26E289CDAFE004D7EBF = { + isa = PBXGroup; + children = ( + 266EA279289CDAFE004D7EBF /* AirDropAnimation_Example */, + 266EA28A289CDB00004D7EBF /* AirDropAnimation_ExampleTests */, + 266EA294289CDB00004D7EBF /* AirDropAnimation_ExampleUITests */, + 266EA278289CDAFE004D7EBF /* Products */, + ); + sourceTree = ""; + }; + 266EA278289CDAFE004D7EBF /* Products */ = { + isa = PBXGroup; + children = ( + 266EA277289CDAFE004D7EBF /* AirDropAnimation_Example.app */, + 266EA287289CDB00004D7EBF /* AirDropAnimation_ExampleTests.xctest */, + 266EA291289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 266EA279289CDAFE004D7EBF /* AirDropAnimation_Example */ = { + isa = PBXGroup; + children = ( + 26A01DF728A159A000C178B5 /* Resources */, + 266EA27A289CDAFE004D7EBF /* AirDropAnimation_ExampleApp.swift */, + 266EA27C289CDAFE004D7EBF /* ContentView.swift */, + 266EA27E289CDB00004D7EBF /* Assets.xcassets */, + 266EA280289CDB00004D7EBF /* Preview Content */, + 266EA2A4289CDB46004D7EBF /* AirDropView.swift */, + 26A01DFA28A26E0E00C178B5 /* Constant.swift */, + ); + path = AirDropAnimation_Example; + sourceTree = ""; + }; + 266EA280289CDB00004D7EBF /* Preview Content */ = { + isa = PBXGroup; + children = ( + 266EA281289CDB00004D7EBF /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 266EA28A289CDB00004D7EBF /* AirDropAnimation_ExampleTests */ = { + isa = PBXGroup; + children = ( + 266EA28B289CDB00004D7EBF /* AirDropAnimation_ExampleTests.swift */, + ); + path = AirDropAnimation_ExampleTests; + sourceTree = ""; + }; + 266EA294289CDB00004D7EBF /* AirDropAnimation_ExampleUITests */ = { + isa = PBXGroup; + children = ( + 266EA295289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.swift */, + 266EA297289CDB00004D7EBF /* AirDropAnimation_ExampleUITestsLaunchTests.swift */, + ); + path = AirDropAnimation_ExampleUITests; + sourceTree = ""; + }; + 26A01DF728A159A000C178B5 /* Resources */ = { + isa = PBXGroup; + children = ( + 26A01DF828A159A000C178B5 /* person.png */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 266EA276289CDAFE004D7EBF /* AirDropAnimation_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = 266EA29B289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_Example" */; + buildPhases = ( + 266EA273289CDAFE004D7EBF /* Sources */, + 266EA274289CDAFE004D7EBF /* Frameworks */, + 266EA275289CDAFE004D7EBF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AirDropAnimation_Example; + productName = AirDropAnimation_Example; + productReference = 266EA277289CDAFE004D7EBF /* AirDropAnimation_Example.app */; + productType = "com.apple.product-type.application"; + }; + 266EA286289CDB00004D7EBF /* AirDropAnimation_ExampleTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 266EA29E289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_ExampleTests" */; + buildPhases = ( + 266EA283289CDB00004D7EBF /* Sources */, + 266EA284289CDB00004D7EBF /* Frameworks */, + 266EA285289CDB00004D7EBF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 266EA289289CDB00004D7EBF /* PBXTargetDependency */, + ); + name = AirDropAnimation_ExampleTests; + productName = AirDropAnimation_ExampleTests; + productReference = 266EA287289CDB00004D7EBF /* AirDropAnimation_ExampleTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 266EA290289CDB00004D7EBF /* AirDropAnimation_ExampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 266EA2A1289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_ExampleUITests" */; + buildPhases = ( + 266EA28D289CDB00004D7EBF /* Sources */, + 266EA28E289CDB00004D7EBF /* Frameworks */, + 266EA28F289CDB00004D7EBF /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 266EA293289CDB00004D7EBF /* PBXTargetDependency */, + ); + name = AirDropAnimation_ExampleUITests; + productName = AirDropAnimation_ExampleUITests; + productReference = 266EA291289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 266EA26F289CDAFE004D7EBF /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1320; + LastUpgradeCheck = 1320; + TargetAttributes = { + 266EA276289CDAFE004D7EBF = { + CreatedOnToolsVersion = 13.2.1; + }; + 266EA286289CDB00004D7EBF = { + CreatedOnToolsVersion = 13.2.1; + TestTargetID = 266EA276289CDAFE004D7EBF; + }; + 266EA290289CDB00004D7EBF = { + CreatedOnToolsVersion = 13.2.1; + TestTargetID = 266EA276289CDAFE004D7EBF; + }; + }; + }; + buildConfigurationList = 266EA272289CDAFE004D7EBF /* Build configuration list for PBXProject "AirDropAnimation_Example" */; + compatibilityVersion = "Xcode 13.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 266EA26E289CDAFE004D7EBF; + productRefGroup = 266EA278289CDAFE004D7EBF /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 266EA276289CDAFE004D7EBF /* AirDropAnimation_Example */, + 266EA286289CDB00004D7EBF /* AirDropAnimation_ExampleTests */, + 266EA290289CDB00004D7EBF /* AirDropAnimation_ExampleUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 266EA275289CDAFE004D7EBF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 26A01DF928A159A000C178B5 /* person.png in Resources */, + 266EA282289CDB00004D7EBF /* Preview Assets.xcassets in Resources */, + 266EA27F289CDB00004D7EBF /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA285289CDB00004D7EBF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA28F289CDB00004D7EBF /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 266EA273289CDAFE004D7EBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 266EA27D289CDAFE004D7EBF /* ContentView.swift in Sources */, + 266EA2A5289CDB46004D7EBF /* AirDropView.swift in Sources */, + 266EA27B289CDAFE004D7EBF /* AirDropAnimation_ExampleApp.swift in Sources */, + 26A01DFB28A26E0E00C178B5 /* Constant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA283289CDB00004D7EBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 266EA28C289CDB00004D7EBF /* AirDropAnimation_ExampleTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 266EA28D289CDB00004D7EBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 266EA298289CDB00004D7EBF /* AirDropAnimation_ExampleUITestsLaunchTests.swift in Sources */, + 266EA296289CDB00004D7EBF /* AirDropAnimation_ExampleUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 266EA289289CDB00004D7EBF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 266EA276289CDAFE004D7EBF /* AirDropAnimation_Example */; + targetProxy = 266EA288289CDB00004D7EBF /* PBXContainerItemProxy */; + }; + 266EA293289CDB00004D7EBF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 266EA276289CDAFE004D7EBF /* AirDropAnimation_Example */; + targetProxy = 266EA292289CDB00004D7EBF /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 266EA299289CDB00004D7EBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 266EA29A289CDB00004D7EBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 266EA29C289CDB00004D7EBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"AirDropAnimation_Example/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-Example"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 266EA29D289CDB00004D7EBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"AirDropAnimation_Example/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-Example"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 266EA29F289CDB00004D7EBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AirDropAnimation_Example.app/AirDropAnimation_Example"; + }; + name = Debug; + }; + 266EA2A0289CDB00004D7EBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-ExampleTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AirDropAnimation_Example.app/AirDropAnimation_Example"; + }; + name = Release; + }; + 266EA2A2289CDB00004D7EBF /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = AirDropAnimation_Example; + }; + name = Debug; + }; + 266EA2A3289CDB00004D7EBF /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.AirDropAnimation-ExampleUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = AirDropAnimation_Example; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 266EA272289CDAFE004D7EBF /* Build configuration list for PBXProject "AirDropAnimation_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 266EA299289CDB00004D7EBF /* Debug */, + 266EA29A289CDB00004D7EBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 266EA29B289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 266EA29C289CDB00004D7EBF /* Debug */, + 266EA29D289CDB00004D7EBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 266EA29E289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_ExampleTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 266EA29F289CDB00004D7EBF /* Debug */, + 266EA2A0289CDB00004D7EBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 266EA2A1289CDB00004D7EBF /* Build configuration list for PBXNativeTarget "AirDropAnimation_ExampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 266EA2A2289CDB00004D7EBF /* Debug */, + 266EA2A3289CDB00004D7EBF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 266EA26F289CDAFE004D7EBF /* Project object */; +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcuserdata/shanmukh.xcuserdatad/UserInterfaceState.xcuserstate b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/project.xcworkspace/xcuserdata/shanmukh.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..010d3bbf8fe17cf5933342037e1eafe7ec06ff1c GIT binary patch literal 31920 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 + + diff --git a/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/xcuserdata/shanmukh.xcuserdatad/xcschemes/xcschememanagement.plist b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/xcuserdata/shanmukh.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..fde0442 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example.xcodeproj/xcuserdata/shanmukh.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + AirDropAnimation_Example.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/AirDropAnimation_ExampleApp.swift b/AirDropAnimation_Example/AirDropAnimation_Example/AirDropAnimation_ExampleApp.swift new file mode 100644 index 0000000..4a537d8 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/AirDropAnimation_ExampleApp.swift @@ -0,0 +1,17 @@ +// +// AirDropAnimation_ExampleApp.swift +// AirDropAnimation_Example +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import SwiftUI + +@main +struct AirDropAnimation_ExampleApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/AirDropView.swift b/AirDropAnimation_Example/AirDropAnimation_Example/AirDropView.swift new file mode 100644 index 0000000..59bf910 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/AirDropView.swift @@ -0,0 +1,179 @@ +// +// AirDropView.swift +// AirDropAnimation_Example +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import SwiftUI + +//Progress status Enum +enum ProgressStatus { + case none, notconnected, connecting, connected, started, completed +} + +struct AirDropView: View { + let size : CGSize + let personName : String + let personImage : UIImage + let deviceName : String + let progress : Double + let progressStatus : ProgressStatus; + + //State variable + @State var blinking = false; + @State private var progressStatusText : String = getProgressStatusText(progress: .notconnected) + @State private var progressStatusTextColor : Color = defaultProgressStatusTextColor + @State private var backgroundProgressStrokeColor = progressGrayColor + @State private var foregroundProgressStrokeColor = progressBlueColor + @State private var imageBorderStrokeColor = progressBlackColor + + //Timer to do animation + @State private var blinkTimer = Timer.publish(every: .infinity, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + + var body: some View { + VStack { + ZStack{ + //default progress circle + Circle() + .stroke(backgroundProgressStrokeColor, lineWidth: size.width*stokeWidthRatio) + .background(Circle().fill(backgroundProgressColor)) + + //progress circle + Circle() + .trim(from: 0.0, to:progress) + .stroke(foregroundProgressStrokeColor, lineWidth: size.width*stokeWidthRatio) + .rotationEffect(.degrees(-90)) + .animation(.easeOut(duration:progress), value: progress) + + //person image border + Circle() + .inset(by: (size.width*stokeWidthRatio)/3) + .stroke(imageBorderStrokeColor, lineWidth: (size.width*stokeWidthRatio)/3) + + //persone image + Image(uiImage: personImage) + .resizable() + .scaledToFit() + + }.padding() + + //Device name + Text(deviceName) + .font(.headline) + .foregroundColor(defaultProgressStatusTextColor) + + //Progress status + Text(progressStatusText) + .font(.headline) + .foregroundColor(progressStatusTextColor) + .opacity(blinking ? 0 : 1) + .animation(blinking ? .easeIn(duration: blinkTimerValue ) : .easeOut(duration: blinkTimerValue), value: blinking) + .onReceive(blinkTimer, perform: { _ in + blinking = !blinking; + }) + } + .onChange(of: progressStatus, perform: { newValue in + + switch newValue { + case .notconnected: + onNotConnected(status: newValue) + case .connecting: + onConnecting(status: newValue) + case .connected: + break + case .started: + onStarted(status: newValue) + case .completed: + //Adding delay to complete animation + DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) { + onFinish(status: newValue) + } + case .none: + break + } + }) + .frame(width: size.width, height: size.height, alignment: .center) + } + + private func onNotConnected(status:ProgressStatus) { + + //iphone connected + progressStatusText = AirDropView.getProgressStatusText(progress: status) + personName; + + progressStatusTextColor = defaultProgressStatusTextColor + + //reset stroke color + backgroundProgressStrokeColor = progressGrayColor + foregroundProgressStrokeColor = progressBlueColor + imageBorderStrokeColor = progressBlackColor + + //reset blinking + blinkTimer.upstream.connect().cancel() + blinkTimer = Timer.publish(every: .infinity, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + + } + + private func onConnecting(status:ProgressStatus) { + + progressStatusText = AirDropView.getProgressStatusText(progress: status); + + progressStatusTextColor = defaultProgressStatusTextColor + + //reset blinking + blinkTimer.upstream.connect().cancel() + blinkTimer = Timer.publish(every: blinkTimerValue, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + } + + private func onStarted(status:ProgressStatus) { + + //Stop blinking + blinking = false; + blinkTimer.upstream.connect().cancel() + + //iphone started sending + progressStatusText = AirDropView.getProgressStatusText(progress: status); + + progressStatusTextColor = defaultProgressStatusTextColor + } + + private func onFinish(status:ProgressStatus) { + + //iphone completes sending + progressStatusText = AirDropView.getProgressStatusText(progress: status); + + progressStatusTextColor = completedProgressStatusTextColor + + withAnimation(Animation.easeOut(duration: 0.3).delay(1)) { + backgroundProgressStrokeColor = Color.clear + foregroundProgressStrokeColor = Color.clear + imageBorderStrokeColor = Color.clear + } + } + + static func getProgressStatusText(progress:ProgressStatus) -> String { + var returnValue = ""; + switch progress { + case .notconnected: + returnValue = "from "; + case .connecting: + returnValue = "Waiting..."; + case .connected: + returnValue = "Connected"; + case .started: + returnValue = "Sending..." + case .completed: + returnValue = "Sent" + case .none: + returnValue = "" + } + return returnValue; + } + +} + +struct AirDropView_Previews: PreviewProvider { + static var previews: some View { + AirDropView(size: CGSize.zero, personName: "Amos", personImage: UIImage(named: "person")!, deviceName: "iPhone", progress: 0, progressStatus: .notconnected) + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AccentColor.colorset/Contents.json b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/Contents.json b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Constant.swift b/AirDropAnimation_Example/AirDropAnimation_Example/Constant.swift new file mode 100644 index 0000000..ff5e328 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/Constant.swift @@ -0,0 +1,22 @@ +// +// Constant.swift +// AirDropAnimation_Example +// +// Created by Shanmukh Phulari on 09/08/22. +// + +import Foundation +import SwiftUI + + +let stokeWidthRatio = 0.05; +let blinkTimerValue : Double = 0.6 +let waitingTimerValue : Double = 4.0 +let progressTimerValue : Double = 0.1 + +let backgroundProgressColor = Color.init(red: 153.0/255.0, green: 154.0/255.0, blue: 154.0/255.0) +let defaultProgressStatusTextColor : Color = Color.init(red: 222.0/255.0, green: 222.0/255.0, blue: 222.0/255.0) +let completedProgressStatusTextColor : Color = Color.init(red: 53.0/255.0, green: 134.0/255.0, blue: 247.0/255.0) +let progressGrayColor : Color = Color.init(red: 104.0/255.0, green: 104.0/255.0, blue: 108.0/255.0) +let progressBlueColor : Color = Color.init(red: 53.0/255.0, green: 134.0/255.0, blue: 247.0/255.0) +let progressBlackColor : Color = Color.init(red: 32.0/255.0, green: 32.0/255.0, blue: 32.0/255.0) diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/ContentView.swift b/AirDropAnimation_Example/AirDropAnimation_Example/ContentView.swift new file mode 100644 index 0000000..17e27a2 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/ContentView.swift @@ -0,0 +1,83 @@ +// +// ContentView.swift +// AirDropAnimation_Example +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import SwiftUI + +struct ContentView: View { + + //State variable + @State var startAirDropAnimation : Bool = false + @State var progress : Double = 0.0 + @State private var progressStatus : ProgressStatus = .none; //Default: iphone not connected + + //Timer to do animation + @State private var progressTimer = Timer.publish(every: 1, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + + var body: some View { + ZStack { + progressBlackColor.ignoresSafeArea() + VStack { + Text("Tap on icon to start animation").padding().foregroundColor(defaultProgressStatusTextColor) + + //AirDrop View + AirDropView(size: CGSize.init(width: 200, height: 200), + personName: "Amos", + personImage: UIImage(named: "person")!, + deviceName: "iPhone", + progress: progress, + progressStatus: progressStatus) + .onReceive(progressTimer) { _ in + if(startAirDropAnimation) { + if(progressStatus == .started) { + if (progress <= 1) { + progress += 0.05; + }else { + //completes sending + progressStatus = .completed; + + //Cancel progress timer + progressTimer.upstream.connect().cancel(); + + startAirDropAnimation = false + } + }else if(progressStatus == .notconnected) { + //connecting + progressStatus = .connecting; + + //start waiting timer + progressTimer.upstream.connect().cancel() + progressTimer = Timer.publish(every: waitingTimerValue, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + + }else if(progressStatus == .connecting) { + //started sending data + progressStatus = .started; + + //start progress timer + progressTimer = Timer.publish(every: progressTimerValue, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + } + } + } + .padding() + .onTapGesture { + + startAirDropAnimation = !startAirDropAnimation + + //reset values + progress = 0.0 + progressStatus = .notconnected + progressTimer = Timer.publish(every: 1, tolerance: 0, on: .main, in: RunLoop.Mode.common, options: nil).autoconnect() + } + } + } + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Preview Content/Preview Assets.xcassets/Contents.json b/AirDropAnimation_Example/AirDropAnimation_Example/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_Example/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_Example/Resources/person.png b/AirDropAnimation_Example/AirDropAnimation_Example/Resources/person.png new file mode 100644 index 0000000000000000000000000000000000000000..edee1da8cce92ea883b9b6a6000156c01e4c6cb0 GIT binary patch literal 16890 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

;t60%hv9jB|S@$g3gTXT;oJzM<$f88N zf-f;)0I-$CQ?^RTu?Q*2RSpI0gp-(?`XPOIBsKnbaY$|)k}-ddjsuSFptE5(8sOTCR)I6yZNWxT>msIqM&*d;bS8^vOy9 literal 0 HcmV?d00001 diff --git a/AirDropAnimation_Example/AirDropAnimation_ExampleTests/AirDropAnimation_ExampleTests.swift b/AirDropAnimation_Example/AirDropAnimation_ExampleTests/AirDropAnimation_ExampleTests.swift new file mode 100644 index 0000000..afa9347 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_ExampleTests/AirDropAnimation_ExampleTests.swift @@ -0,0 +1,36 @@ +// +// AirDropAnimation_ExampleTests.swift +// AirDropAnimation_ExampleTests +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import XCTest +@testable import AirDropAnimation_Example + +class AirDropAnimation_ExampleTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITests.swift b/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITests.swift new file mode 100644 index 0000000..32d1c0e --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITests.swift @@ -0,0 +1,42 @@ +// +// AirDropAnimation_ExampleUITests.swift +// AirDropAnimation_ExampleUITests +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import XCTest + +class AirDropAnimation_ExampleUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // 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. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use recording to get started writing UI tests. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITestsLaunchTests.swift b/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITestsLaunchTests.swift new file mode 100644 index 0000000..5ed68f3 --- /dev/null +++ b/AirDropAnimation_Example/AirDropAnimation_ExampleUITests/AirDropAnimation_ExampleUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// AirDropAnimation_ExampleUITestsLaunchTests.swift +// AirDropAnimation_ExampleUITests +// +// Created by Shanmukh Phulari on 05/08/22. +// + +import XCTest + +class AirDropAnimation_ExampleUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +}