├── Images ├── MTRipple.gif └── custom MTRipple.gif ├── Project ├── MTRipple.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── dilipmanek.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── dilipmanek.xcuserdatad │ │ └── xcschemes │ │ ├── MTRipple.xcscheme │ │ └── xcschememanagement.plist └── MTRipple │ ├── AnimationVC.swift │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-57x57@1x.png │ │ ├── Icon-App-57x57@2x.png │ │ ├── Icon-App-60x60@1x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-72x72@1x.png │ │ ├── Icon-App-72x72@2x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-76x76@3x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ ├── Icon-Small-50x50@1x.png │ │ └── Icon-Small-50x50@2x.png │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ ├── MTRipple.swift │ ├── circle.png │ ├── circle1.png │ ├── circle2.png │ └── circle@2x.png └── README.md /Images/MTRipple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Images/MTRipple.gif -------------------------------------------------------------------------------- /Images/custom MTRipple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Images/custom MTRipple.gif -------------------------------------------------------------------------------- /Project/MTRipple.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | EF8DDF5A1E5FEEF20022E4AF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF581E5FEEF20022E4AF /* Main.storyboard */; }; 11 | EF8DDF5C1E5FEEF20022E4AF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF5B1E5FEEF20022E4AF /* Assets.xcassets */; }; 12 | EF8DDF5F1E5FEEF20022E4AF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF5D1E5FEEF20022E4AF /* LaunchScreen.storyboard */; }; 13 | EF8DDF691E5FEF350022E4AF /* AnimationVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8DDF661E5FEF350022E4AF /* AnimationVC.swift */; }; 14 | EF8DDF6A1E5FEF350022E4AF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8DDF671E5FEF350022E4AF /* AppDelegate.swift */; }; 15 | EF8DDF6B1E5FEF350022E4AF /* MTRipple.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8DDF681E5FEF350022E4AF /* MTRipple.swift */; }; 16 | EF8DDF6E1E5FEFC00022E4AF /* circle.png in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF6C1E5FEFC00022E4AF /* circle.png */; }; 17 | EF8DDF6F1E5FEFC00022E4AF /* circle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF6D1E5FEFC00022E4AF /* circle@2x.png */; }; 18 | EF8DDF711E5FF43D0022E4AF /* circle2.png in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF701E5FF43D0022E4AF /* circle2.png */; }; 19 | EF8DDF731E5FF5230022E4AF /* circle1.png in Resources */ = {isa = PBXBuildFile; fileRef = EF8DDF721E5FF5230022E4AF /* circle1.png */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXFileReference section */ 23 | EF8DDF511E5FEEF20022E4AF /* MTRipple.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MTRipple.app; sourceTree = BUILT_PRODUCTS_DIR; }; 24 | EF8DDF591E5FEEF20022E4AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 25 | EF8DDF5B1E5FEEF20022E4AF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 26 | EF8DDF5E1E5FEEF20022E4AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 27 | EF8DDF601E5FEEF20022E4AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 28 | EF8DDF661E5FEF350022E4AF /* AnimationVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimationVC.swift; sourceTree = ""; }; 29 | EF8DDF671E5FEF350022E4AF /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 30 | EF8DDF681E5FEF350022E4AF /* MTRipple.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MTRipple.swift; sourceTree = ""; }; 31 | EF8DDF6C1E5FEFC00022E4AF /* circle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = circle.png; sourceTree = ""; }; 32 | EF8DDF6D1E5FEFC00022E4AF /* circle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "circle@2x.png"; sourceTree = ""; }; 33 | EF8DDF701E5FF43D0022E4AF /* circle2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = circle2.png; sourceTree = ""; }; 34 | EF8DDF721E5FF5230022E4AF /* circle1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = circle1.png; sourceTree = ""; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | EF8DDF4E1E5FEEF20022E4AF /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | ); 43 | runOnlyForDeploymentPostprocessing = 0; 44 | }; 45 | /* End PBXFrameworksBuildPhase section */ 46 | 47 | /* Begin PBXGroup section */ 48 | EF8DDF481E5FEEF20022E4AF = { 49 | isa = PBXGroup; 50 | children = ( 51 | EF8DDF531E5FEEF20022E4AF /* MTRipple */, 52 | EF8DDF521E5FEEF20022E4AF /* Products */, 53 | ); 54 | sourceTree = ""; 55 | }; 56 | EF8DDF521E5FEEF20022E4AF /* Products */ = { 57 | isa = PBXGroup; 58 | children = ( 59 | EF8DDF511E5FEEF20022E4AF /* MTRipple.app */, 60 | ); 61 | name = Products; 62 | sourceTree = ""; 63 | }; 64 | EF8DDF531E5FEEF20022E4AF /* MTRipple */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | EF8DDF681E5FEF350022E4AF /* MTRipple.swift */, 68 | EF8DDF671E5FEF350022E4AF /* AppDelegate.swift */, 69 | EF8DDF661E5FEF350022E4AF /* AnimationVC.swift */, 70 | EF8DDF581E5FEEF20022E4AF /* Main.storyboard */, 71 | EF8DDF701E5FF43D0022E4AF /* circle2.png */, 72 | EF8DDF721E5FF5230022E4AF /* circle1.png */, 73 | EF8DDF6C1E5FEFC00022E4AF /* circle.png */, 74 | EF8DDF6D1E5FEFC00022E4AF /* circle@2x.png */, 75 | EF8DDF5B1E5FEEF20022E4AF /* Assets.xcassets */, 76 | EF8DDF5D1E5FEEF20022E4AF /* LaunchScreen.storyboard */, 77 | EF8DDF601E5FEEF20022E4AF /* Info.plist */, 78 | ); 79 | path = MTRipple; 80 | sourceTree = ""; 81 | }; 82 | /* End PBXGroup section */ 83 | 84 | /* Begin PBXNativeTarget section */ 85 | EF8DDF501E5FEEF20022E4AF /* MTRipple */ = { 86 | isa = PBXNativeTarget; 87 | buildConfigurationList = EF8DDF631E5FEEF20022E4AF /* Build configuration list for PBXNativeTarget "MTRipple" */; 88 | buildPhases = ( 89 | EF8DDF4D1E5FEEF20022E4AF /* Sources */, 90 | EF8DDF4E1E5FEEF20022E4AF /* Frameworks */, 91 | EF8DDF4F1E5FEEF20022E4AF /* Resources */, 92 | ); 93 | buildRules = ( 94 | ); 95 | dependencies = ( 96 | ); 97 | name = MTRipple; 98 | productName = MTRipple; 99 | productReference = EF8DDF511E5FEEF20022E4AF /* MTRipple.app */; 100 | productType = "com.apple.product-type.application"; 101 | }; 102 | /* End PBXNativeTarget section */ 103 | 104 | /* Begin PBXProject section */ 105 | EF8DDF491E5FEEF20022E4AF /* Project object */ = { 106 | isa = PBXProject; 107 | attributes = { 108 | LastSwiftUpdateCheck = 0820; 109 | LastUpgradeCheck = 0820; 110 | ORGANIZATIONNAME = "Dilip Manek"; 111 | TargetAttributes = { 112 | EF8DDF501E5FEEF20022E4AF = { 113 | CreatedOnToolsVersion = 8.2.1; 114 | DevelopmentTeam = CJESF9R9MD; 115 | LastSwiftMigration = 0820; 116 | ProvisioningStyle = Automatic; 117 | }; 118 | }; 119 | }; 120 | buildConfigurationList = EF8DDF4C1E5FEEF20022E4AF /* Build configuration list for PBXProject "MTRipple" */; 121 | compatibilityVersion = "Xcode 3.2"; 122 | developmentRegion = English; 123 | hasScannedForEncodings = 0; 124 | knownRegions = ( 125 | en, 126 | Base, 127 | ); 128 | mainGroup = EF8DDF481E5FEEF20022E4AF; 129 | productRefGroup = EF8DDF521E5FEEF20022E4AF /* Products */; 130 | projectDirPath = ""; 131 | projectRoot = ""; 132 | targets = ( 133 | EF8DDF501E5FEEF20022E4AF /* MTRipple */, 134 | ); 135 | }; 136 | /* End PBXProject section */ 137 | 138 | /* Begin PBXResourcesBuildPhase section */ 139 | EF8DDF4F1E5FEEF20022E4AF /* Resources */ = { 140 | isa = PBXResourcesBuildPhase; 141 | buildActionMask = 2147483647; 142 | files = ( 143 | EF8DDF711E5FF43D0022E4AF /* circle2.png in Resources */, 144 | EF8DDF5F1E5FEEF20022E4AF /* LaunchScreen.storyboard in Resources */, 145 | EF8DDF6F1E5FEFC00022E4AF /* circle@2x.png in Resources */, 146 | EF8DDF5C1E5FEEF20022E4AF /* Assets.xcassets in Resources */, 147 | EF8DDF731E5FF5230022E4AF /* circle1.png in Resources */, 148 | EF8DDF5A1E5FEEF20022E4AF /* Main.storyboard in Resources */, 149 | EF8DDF6E1E5FEFC00022E4AF /* circle.png in Resources */, 150 | ); 151 | runOnlyForDeploymentPostprocessing = 0; 152 | }; 153 | /* End PBXResourcesBuildPhase section */ 154 | 155 | /* Begin PBXSourcesBuildPhase section */ 156 | EF8DDF4D1E5FEEF20022E4AF /* Sources */ = { 157 | isa = PBXSourcesBuildPhase; 158 | buildActionMask = 2147483647; 159 | files = ( 160 | EF8DDF6A1E5FEF350022E4AF /* AppDelegate.swift in Sources */, 161 | EF8DDF691E5FEF350022E4AF /* AnimationVC.swift in Sources */, 162 | EF8DDF6B1E5FEF350022E4AF /* MTRipple.swift in Sources */, 163 | ); 164 | runOnlyForDeploymentPostprocessing = 0; 165 | }; 166 | /* End PBXSourcesBuildPhase section */ 167 | 168 | /* Begin PBXVariantGroup section */ 169 | EF8DDF581E5FEEF20022E4AF /* Main.storyboard */ = { 170 | isa = PBXVariantGroup; 171 | children = ( 172 | EF8DDF591E5FEEF20022E4AF /* Base */, 173 | ); 174 | name = Main.storyboard; 175 | sourceTree = ""; 176 | }; 177 | EF8DDF5D1E5FEEF20022E4AF /* LaunchScreen.storyboard */ = { 178 | isa = PBXVariantGroup; 179 | children = ( 180 | EF8DDF5E1E5FEEF20022E4AF /* Base */, 181 | ); 182 | name = LaunchScreen.storyboard; 183 | sourceTree = ""; 184 | }; 185 | /* End PBXVariantGroup section */ 186 | 187 | /* Begin XCBuildConfiguration section */ 188 | EF8DDF611E5FEEF20022E4AF /* Debug */ = { 189 | isa = XCBuildConfiguration; 190 | buildSettings = { 191 | ALWAYS_SEARCH_USER_PATHS = NO; 192 | CLANG_ANALYZER_NONNULL = YES; 193 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 194 | CLANG_CXX_LIBRARY = "libc++"; 195 | CLANG_ENABLE_MODULES = YES; 196 | CLANG_ENABLE_OBJC_ARC = YES; 197 | CLANG_WARN_BOOL_CONVERSION = YES; 198 | CLANG_WARN_CONSTANT_CONVERSION = YES; 199 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 200 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 201 | CLANG_WARN_EMPTY_BODY = YES; 202 | CLANG_WARN_ENUM_CONVERSION = YES; 203 | CLANG_WARN_INFINITE_RECURSION = YES; 204 | CLANG_WARN_INT_CONVERSION = YES; 205 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 206 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 207 | CLANG_WARN_UNREACHABLE_CODE = YES; 208 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 209 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 210 | COPY_PHASE_STRIP = NO; 211 | DEBUG_INFORMATION_FORMAT = dwarf; 212 | ENABLE_STRICT_OBJC_MSGSEND = YES; 213 | ENABLE_TESTABILITY = YES; 214 | GCC_C_LANGUAGE_STANDARD = gnu99; 215 | GCC_DYNAMIC_NO_PIC = NO; 216 | GCC_NO_COMMON_BLOCKS = YES; 217 | GCC_OPTIMIZATION_LEVEL = 0; 218 | GCC_PREPROCESSOR_DEFINITIONS = ( 219 | "DEBUG=1", 220 | "$(inherited)", 221 | ); 222 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 223 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 224 | GCC_WARN_UNDECLARED_SELECTOR = YES; 225 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 226 | GCC_WARN_UNUSED_FUNCTION = YES; 227 | GCC_WARN_UNUSED_VARIABLE = YES; 228 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 229 | MTL_ENABLE_DEBUG_INFO = YES; 230 | ONLY_ACTIVE_ARCH = YES; 231 | SDKROOT = iphoneos; 232 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 233 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 234 | }; 235 | name = Debug; 236 | }; 237 | EF8DDF621E5FEEF20022E4AF /* Release */ = { 238 | isa = XCBuildConfiguration; 239 | buildSettings = { 240 | ALWAYS_SEARCH_USER_PATHS = NO; 241 | CLANG_ANALYZER_NONNULL = YES; 242 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 243 | CLANG_CXX_LIBRARY = "libc++"; 244 | CLANG_ENABLE_MODULES = YES; 245 | CLANG_ENABLE_OBJC_ARC = YES; 246 | CLANG_WARN_BOOL_CONVERSION = YES; 247 | CLANG_WARN_CONSTANT_CONVERSION = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 250 | CLANG_WARN_EMPTY_BODY = YES; 251 | CLANG_WARN_ENUM_CONVERSION = YES; 252 | CLANG_WARN_INFINITE_RECURSION = YES; 253 | CLANG_WARN_INT_CONVERSION = YES; 254 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 255 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 256 | CLANG_WARN_UNREACHABLE_CODE = YES; 257 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 258 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 259 | COPY_PHASE_STRIP = NO; 260 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 261 | ENABLE_NS_ASSERTIONS = NO; 262 | ENABLE_STRICT_OBJC_MSGSEND = YES; 263 | GCC_C_LANGUAGE_STANDARD = gnu99; 264 | GCC_NO_COMMON_BLOCKS = YES; 265 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 266 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 267 | GCC_WARN_UNDECLARED_SELECTOR = YES; 268 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 269 | GCC_WARN_UNUSED_FUNCTION = YES; 270 | GCC_WARN_UNUSED_VARIABLE = YES; 271 | IPHONEOS_DEPLOYMENT_TARGET = 10.2; 272 | MTL_ENABLE_DEBUG_INFO = NO; 273 | SDKROOT = iphoneos; 274 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 275 | VALIDATE_PRODUCT = YES; 276 | }; 277 | name = Release; 278 | }; 279 | EF8DDF641E5FEEF20022E4AF /* Debug */ = { 280 | isa = XCBuildConfiguration; 281 | buildSettings = { 282 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 283 | CLANG_ENABLE_MODULES = YES; 284 | DEVELOPMENT_TEAM = CJESF9R9MD; 285 | INFOPLIST_FILE = MTRipple/Info.plist; 286 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 287 | PRODUCT_BUNDLE_IDENTIFIER = com.MTRipple; 288 | PRODUCT_NAME = "$(TARGET_NAME)"; 289 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 290 | SWIFT_VERSION = 3.0; 291 | }; 292 | name = Debug; 293 | }; 294 | EF8DDF651E5FEEF20022E4AF /* Release */ = { 295 | isa = XCBuildConfiguration; 296 | buildSettings = { 297 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 298 | CLANG_ENABLE_MODULES = YES; 299 | DEVELOPMENT_TEAM = CJESF9R9MD; 300 | INFOPLIST_FILE = MTRipple/Info.plist; 301 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 302 | PRODUCT_BUNDLE_IDENTIFIER = com.MTRipple; 303 | PRODUCT_NAME = "$(TARGET_NAME)"; 304 | SWIFT_VERSION = 3.0; 305 | }; 306 | name = Release; 307 | }; 308 | /* End XCBuildConfiguration section */ 309 | 310 | /* Begin XCConfigurationList section */ 311 | EF8DDF4C1E5FEEF20022E4AF /* Build configuration list for PBXProject "MTRipple" */ = { 312 | isa = XCConfigurationList; 313 | buildConfigurations = ( 314 | EF8DDF611E5FEEF20022E4AF /* Debug */, 315 | EF8DDF621E5FEEF20022E4AF /* Release */, 316 | ); 317 | defaultConfigurationIsVisible = 0; 318 | defaultConfigurationName = Release; 319 | }; 320 | EF8DDF631E5FEEF20022E4AF /* Build configuration list for PBXNativeTarget "MTRipple" */ = { 321 | isa = XCConfigurationList; 322 | buildConfigurations = ( 323 | EF8DDF641E5FEEF20022E4AF /* Debug */, 324 | EF8DDF651E5FEEF20022E4AF /* Release */, 325 | ); 326 | defaultConfigurationIsVisible = 0; 327 | }; 328 | /* End XCConfigurationList section */ 329 | }; 330 | rootObject = EF8DDF491E5FEEF20022E4AF /* Project object */; 331 | } 332 | -------------------------------------------------------------------------------- /Project/MTRipple.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Project/MTRipple.xcodeproj/project.xcworkspace/xcuserdata/dilipmanek.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple.xcodeproj/project.xcworkspace/xcuserdata/dilipmanek.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Project/MTRipple.xcodeproj/xcuserdata/dilipmanek.xcuserdatad/xcschemes/MTRipple.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 | -------------------------------------------------------------------------------- /Project/MTRipple.xcodeproj/xcuserdata/dilipmanek.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | MTRipple.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | EF8DDF501E5FEEF20022E4AF 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Project/MTRipple/AnimationVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimationVC.swift 3 | // MTRipple 4 | // 5 | // Created by Sazzad Iproliya on 23/02/17. 6 | // Copyright © 2017 Dilip Manek. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class AnimationVC: UIViewController{ 13 | 14 | @IBOutlet var animateView: UIView! 15 | 16 | var ripple:MTRipple! 17 | 18 | override func viewDidLoad() 19 | { 20 | super.viewDidLoad() 21 | } 22 | 23 | override func didReceiveMemoryWarning() { 24 | super.didReceiveMemoryWarning() 25 | // Dispose of any resources that can be recreated. 26 | } 27 | @IBAction func showTap(_ sender: Any) { 28 | ripple = MTRipple.init(frame:CGRect(x: 0.0, y: 0.0, width: self.animateView.frame.size.width, height: self.animateView.frame.size.height)).startViewAniamtion(animationTime: 6.0, animateView: self.animateView) as! MTRipple 29 | 30 | // ripple.setShadowColor(UIColor.init(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.5)) 31 | // ripple.setImage(UIImage.init(named: "circle2.png")!) 32 | // ripple.setShadowOffset(CGSize(width: 0.5, height: 0.5)) 33 | 34 | } 35 | @IBAction func hideTap(_ sender: Any) { 36 | ripple.hideAnimation() 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Project/MTRipple/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // MTRipple 4 | // 5 | // Created by Sazzad Iproliya on 23/02/17. 6 | // Copyright © 2017 Dilip Manek. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // 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. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // 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. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // 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. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // 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. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "size" : "20x20", 10 | "idiom" : "iphone", 11 | "filename" : "Icon-App-20x20@3x.png", 12 | "scale" : "3x" 13 | }, 14 | { 15 | "idiom" : "iphone", 16 | "size" : "29x29", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "idiom" : "iphone", 21 | "size" : "29x29", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "idiom" : "iphone", 26 | "size" : "29x29", 27 | "scale" : "3x" 28 | }, 29 | { 30 | "size" : "40x40", 31 | "idiom" : "iphone", 32 | "filename" : "Icon-App-40x40@2x.png", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "size" : "40x40", 37 | "idiom" : "iphone", 38 | "filename" : "Icon-App-40x40@3x.png", 39 | "scale" : "3x" 40 | }, 41 | { 42 | "size" : "57x57", 43 | "idiom" : "iphone", 44 | "filename" : "Icon-App-57x57@1x.png", 45 | "scale" : "1x" 46 | }, 47 | { 48 | "size" : "57x57", 49 | "idiom" : "iphone", 50 | "filename" : "Icon-App-57x57@2x.png", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "size" : "60x60", 55 | "idiom" : "iphone", 56 | "filename" : "Icon-App-60x60@2x.png", 57 | "scale" : "2x" 58 | }, 59 | { 60 | "idiom" : "iphone", 61 | "size" : "60x60", 62 | "scale" : "3x" 63 | }, 64 | { 65 | "size" : "20x20", 66 | "idiom" : "ipad", 67 | "filename" : "Icon-App-20x20@1x.png", 68 | "scale" : "1x" 69 | }, 70 | { 71 | "size" : "20x20", 72 | "idiom" : "ipad", 73 | "filename" : "Icon-App-20x20@2x.png", 74 | "scale" : "2x" 75 | }, 76 | { 77 | "size" : "29x29", 78 | "idiom" : "ipad", 79 | "filename" : "Icon-App-29x29@1x.png", 80 | "scale" : "1x" 81 | }, 82 | { 83 | "size" : "29x29", 84 | "idiom" : "ipad", 85 | "filename" : "Icon-App-29x29@2x.png", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "size" : "40x40", 90 | "idiom" : "ipad", 91 | "filename" : "Icon-App-40x40@1x.png", 92 | "scale" : "1x" 93 | }, 94 | { 95 | "idiom" : "ipad", 96 | "size" : "40x40", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "50x50", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-Small-50x50@1x.png", 103 | "scale" : "1x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-Small-50x50@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "72x72", 113 | "idiom" : "ipad", 114 | "filename" : "Icon-App-72x72@1x.png", 115 | "scale" : "1x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "Icon-App-72x72@2x.png", 121 | "scale" : "2x" 122 | }, 123 | { 124 | "size" : "76x76", 125 | "idiom" : "ipad", 126 | "filename" : "Icon-App-76x76@1x.png", 127 | "scale" : "1x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "Icon-App-76x76@2x.png", 133 | "scale" : "2x" 134 | }, 135 | { 136 | "size" : "83.5x83.5", 137 | "idiom" : "ipad", 138 | "filename" : "Icon-App-83.5x83.5@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "idiom" : "car", 143 | "size" : "60x60", 144 | "scale" : "2x" 145 | }, 146 | { 147 | "size" : "60x60", 148 | "idiom" : "car", 149 | "filename" : "Icon-App-60x60@3x.png", 150 | "scale" : "3x" 151 | }, 152 | { 153 | "size" : "24x24", 154 | "idiom" : "watch", 155 | "scale" : "2x", 156 | "role" : "notificationCenter", 157 | "subtype" : "38mm" 158 | }, 159 | { 160 | "size" : "27.5x27.5", 161 | "idiom" : "watch", 162 | "scale" : "2x", 163 | "role" : "notificationCenter", 164 | "subtype" : "42mm" 165 | }, 166 | { 167 | "size" : "29x29", 168 | "idiom" : "watch", 169 | "role" : "companionSettings", 170 | "scale" : "2x" 171 | }, 172 | { 173 | "size" : "29x29", 174 | "idiom" : "watch", 175 | "filename" : "Icon-App-29x29@3x.png", 176 | "role" : "companionSettings", 177 | "scale" : "3x" 178 | }, 179 | { 180 | "size" : "40x40", 181 | "idiom" : "watch", 182 | "scale" : "2x", 183 | "role" : "appLauncher", 184 | "subtype" : "38mm" 185 | }, 186 | { 187 | "size" : "86x86", 188 | "idiom" : "watch", 189 | "scale" : "2x", 190 | "role" : "quickLook", 191 | "subtype" : "38mm" 192 | }, 193 | { 194 | "size" : "98x98", 195 | "idiom" : "watch", 196 | "scale" : "2x", 197 | "role" : "quickLook", 198 | "subtype" : "42mm" 199 | }, 200 | { 201 | "filename" : "Icon-App-60x60@1x.png", 202 | "unassigned" : true 203 | }, 204 | { 205 | "filename" : "Icon-App-76x76@3x.png", 206 | "unassigned" : true 207 | } 208 | ], 209 | "info" : { 210 | "version" : 1, 211 | "author" : "xcode" 212 | } 213 | } -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png -------------------------------------------------------------------------------- /Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/Assets.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png -------------------------------------------------------------------------------- /Project/MTRipple/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 | -------------------------------------------------------------------------------- /Project/MTRipple/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 47 | 61 | 62 | 63 | 64 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /Project/MTRipple/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 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIStatusBarStyle 38 | UIStatusBarStyleLightContent 39 | 40 | 41 | -------------------------------------------------------------------------------- /Project/MTRipple/MTRipple.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MTRipple.swift 3 | // MTRipple 4 | // 5 | // Created by Sazzad Iproliya on 23/02/17. 6 | // Copyright © 2017 Dilip Manek. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MTRipple: UIView { 12 | 13 | var view1: UIView! 14 | var view2: UIView! 15 | var view3: UIView! 16 | var view4: UIView! 17 | var view5: UIView! 18 | var img1: UIImageView! 19 | var img2: UIImageView! 20 | var img3: UIImageView! 21 | var img4: UIImageView! 22 | var img5: UIImageView! 23 | var mainView: UIView! 24 | var isHiddenCall:Bool = false 25 | 26 | var time:Double! 27 | 28 | override init(frame: CGRect) 29 | { 30 | super.init(frame: frame) 31 | 32 | self.view1 = UIView.init(frame: CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)) 33 | self.view2 = UIView.init(frame: CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)) 34 | self.view3 = UIView.init(frame: CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)) 35 | self.view4 = UIView.init(frame: CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)) 36 | self.view5 = UIView.init(frame: CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0)) 37 | 38 | self.img1 = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) 39 | self.img2 = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) 40 | self.img3 = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) 41 | self.img4 = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) 42 | self.img5 = UIImageView.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) 43 | 44 | self.img1.image = UIImage.init(named: "circle.png") 45 | self.img2.image = UIImage.init(named: "circle.png") 46 | self.img3.image = UIImage.init(named: "circle.png") 47 | self.img4.image = UIImage.init(named: "circle.png") 48 | self.img5.image = UIImage.init(named: "circle.png") 49 | 50 | img1.layer.masksToBounds = false 51 | img1.layer.shadowColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor 52 | img1.layer.shadowOffset = CGSize(width: 0.5, height: 0.5) 53 | img1.layer.shadowOpacity = 1.0 54 | 55 | img2.layer.masksToBounds = false 56 | img2.layer.shadowColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor 57 | img2.layer.shadowOffset = CGSize(width: 0.5, height: 0.5) 58 | img2.layer.shadowOpacity = 1.0 59 | 60 | img3.layer.masksToBounds = false 61 | img3.layer.shadowColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor 62 | img3.layer.shadowOffset = CGSize(width: 0.5, height: 0.5) 63 | img3.layer.shadowOpacity = 1.0 64 | 65 | img4.layer.masksToBounds = false 66 | img4.layer.shadowColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor 67 | img4.layer.shadowOffset = CGSize(width: 0.5, height: 0.5) 68 | img4.layer.shadowOpacity = 1.0 69 | 70 | img5.layer.masksToBounds = false 71 | img5.layer.shadowColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.2).cgColor 72 | img5.layer.shadowOffset = CGSize(width: 0.5, height: 0.5) 73 | img5.layer.shadowOpacity = 1.0 74 | 75 | self.view1.addSubview(self.img1) 76 | self.view2.addSubview(self.img2) 77 | self.view3.addSubview(self.img3) 78 | self.view4.addSubview(self.img4) 79 | self.view5.addSubview(self.img5) 80 | 81 | self.addSubview(self.view1) 82 | self.addSubview(self.view2) 83 | self.addSubview(self.view3) 84 | self.addSubview(self.view4) 85 | self.addSubview(self.view5) 86 | } 87 | 88 | required init?(coder aDecoder: NSCoder) { 89 | fatalError("init(coder:) has not been implemented") 90 | } 91 | 92 | func startViewAniamtion(animationTime:Double, animateView:UIView) -> UIView 93 | { 94 | self.time = animationTime 95 | 96 | self.perform(#selector(incrementSize1), with: nil, afterDelay: 0.0) 97 | self.perform(#selector(incrementSize2), with: nil, afterDelay: (self.time/4.0)) 98 | self.perform(#selector(incrementSize3), with: nil, afterDelay: (self.time/4.0)*2) 99 | self.perform(#selector(incrementSize4), with: nil, afterDelay: (self.time/4.0)*3) 100 | 101 | animateView.addSubview(self) 102 | 103 | return self 104 | } 105 | 106 | func incrementSize1() 107 | { 108 | self.view1.alpha = 1 109 | self.bringSubview(toFront: self.view1) 110 | UIView.animate(withDuration: self.time, delay: 0.0, options: .allowUserInteraction , animations: { 111 | self.view1.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 112 | self.img1.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 113 | }, 114 | completion:{_ in 115 | UIView.animate(withDuration: self.time/self.time, delay: 0.0, options: .layoutSubviews , animations: { 116 | self.view1.alpha = 0.5 117 | }, 118 | completion:{_ in 119 | self.view1.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0) 120 | self.img1.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 121 | }) 122 | if !(self.isHiddenCall){ 123 | self.incrementSize5() 124 | } 125 | }) 126 | } 127 | func incrementSize2() 128 | { 129 | self.view2.alpha = 1 130 | self.bringSubview(toFront: self.view2) 131 | UIView.animate(withDuration: self.time, delay: 0.0, options: .allowUserInteraction , animations: { 132 | self.view2.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 133 | self.img2.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 134 | }, 135 | completion:{_ in 136 | UIView.animate(withDuration: self.time/self.time, delay: 0.0, options: .layoutSubviews , animations: { 137 | self.view2.alpha = 0.5 138 | }, 139 | completion:{_ in 140 | self.view2.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0) 141 | self.img2.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 142 | }) 143 | if !(self.isHiddenCall){ 144 | self.incrementSize1() 145 | } 146 | }) 147 | } 148 | func incrementSize3() 149 | { 150 | self.view3.alpha = 1 151 | self.bringSubview(toFront: self.view3) 152 | UIView.animate(withDuration: self.time, delay: 0.0, options: .allowUserInteraction , animations: { 153 | self.view3.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 154 | self.img3.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 155 | }, 156 | completion:{_ in 157 | UIView.animate(withDuration: self.time/self.time, delay: 0.0, options: .layoutSubviews , animations: { 158 | self.view3.alpha = 0.5 159 | }, 160 | completion:{_ in 161 | self.view3.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0) 162 | self.img3.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 163 | }) 164 | if !(self.isHiddenCall){ 165 | self.incrementSize2() 166 | } 167 | }) 168 | } 169 | func incrementSize4() 170 | { 171 | self.view4.alpha = 1 172 | self.bringSubview(toFront: self.view4) 173 | UIView.animate(withDuration: self.time, delay: 0.0, options: .allowUserInteraction , animations: { 174 | self.view4.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 175 | self.img4.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 176 | }, 177 | completion:{_ in 178 | UIView.animate(withDuration: self.time/self.time, delay: 0.0, options: .layoutSubviews , animations: { 179 | self.view4.alpha = 0.5 180 | }, 181 | completion:{_ in 182 | self.view4.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0) 183 | self.img4.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 184 | }) 185 | if !(self.isHiddenCall){ 186 | self.incrementSize3() 187 | } 188 | }) 189 | } 190 | 191 | func incrementSize5() 192 | { 193 | self.view5.alpha = 1 194 | self.bringSubview(toFront: self.view5) 195 | UIView.animate(withDuration: self.time, delay: 0.0, options: .allowUserInteraction , animations: { 196 | self.view5.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 197 | self.img5.frame = CGRect(x: 1, y: 1, width: self.frame.size.width-2, height: self.frame.size.height-2) 198 | }, 199 | completion:{_ in 200 | UIView.animate(withDuration: self.time/self.time, delay: 0.0, options: .layoutSubviews , animations: { 201 | self.view5.alpha = 0.5 202 | }, 203 | completion:{_ in 204 | self.view5.frame = CGRect(x: self.frame.size.width/2, y: self.frame.size.height/2, width: 0, height: 0) 205 | self.img5.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 206 | }) 207 | if !(self.isHiddenCall){ 208 | self.incrementSize4() 209 | } 210 | }) 211 | } 212 | 213 | func setShadowColor(_ color:UIColor) 214 | { 215 | img1.layer.shadowColor = color.cgColor 216 | img2.layer.shadowColor = color.cgColor 217 | img3.layer.shadowColor = color.cgColor 218 | img4.layer.shadowColor = color.cgColor 219 | img5.layer.shadowColor = color.cgColor 220 | } 221 | 222 | func setImage(_ image:UIImage) 223 | { 224 | self.img1.image = image 225 | self.img2.image = image 226 | self.img3.image = image 227 | self.img4.image = image 228 | self.img5.image = image 229 | } 230 | 231 | func setShadowOffset(_ size:CGSize) 232 | { 233 | img1.layer.shadowOffset = size 234 | img2.layer.shadowOffset = size 235 | img3.layer.shadowOffset = size 236 | img4.layer.shadowOffset = size 237 | img5.layer.shadowOffset = size 238 | } 239 | 240 | 241 | func hideAnimation(){ 242 | isHiddenCall = true 243 | self.removeFromSuperview() 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /Project/MTRipple/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/circle.png -------------------------------------------------------------------------------- /Project/MTRipple/circle1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/circle1.png -------------------------------------------------------------------------------- /Project/MTRipple/circle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/circle2.png -------------------------------------------------------------------------------- /Project/MTRipple/circle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manekdilip/MTRipple/e5d6d7ad50c312d5753bee835af0af3835c2328c/Project/MTRipple/circle@2x.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MTRipple 2 | Easily creating Ripple Effect in your project with dynamic size. 3 | MTRipple written in Swift 3.0 and easy to use in project. 4 | 5 | ![BackgroundImage](https://github.com/manekdilip/MTRipple/blob/master/Images/MTRipple.gif) 6 | ![BackgroundImage](https://github.com/manekdilip/MTRipple/blob/master/Images/custom MTRipple.gif) 7 | 8 | #Installation 9 | 10 | ### Manually 11 | 12 | Clone or Download this Repo. Then simply drag the class ```MTRipple.swift``` to your Xcode project. 13 | 14 | 15 | ###Simply way to integrate ```MTRipple``` 16 | 17 | ###Implement ```MTRipple``` 18 | 19 | ``` Create an objcet of class.``` 20 | 21 | var ripple:MTRipple! 22 | 23 | 24 | ###Start Animation 25 | 26 | ``` 27 | ripple = MTRipple.init(frame:CGRect(x: 0.0, y: 0.0, width: self.animateView.frame.size.width, height: self.animateView.frame.size.height)).startViewAniamtion(animationTime: 6.0, animateView: self.animateView) as! MTRipple 28 | ``` 29 | 30 | ###Add Custom Shadow Color 31 | 32 | ``` 33 | ripple.setShadowColor(UIColor.init(red: 1.0, green: 1.0, blue: 1.0, alpha: 0.5)) 34 | 35 | ``` 36 | ###Add Dynamic Image For Ripple Effect 37 | 38 | ``` 39 | ripple.setImage(UIImage.init(named: "circle2.png")!) 40 | ``` 41 | 42 | ###Add Custom ShadowOffset 43 | 44 | ``` 45 | ripple.setShadowOffset(CGSize(width: 0.5, height: 0.5)) 46 | 47 | Note: Add value 0 to 1 Only 48 | ``` 49 | 50 | ###Hide Animation 51 | 52 | ``` 53 | ripple.hideAnimation() 54 | ``` 55 | --------------------------------------------------------------------------------