├── .DS_Store ├── Image sample ├── waterWaveProgress.png └── waterWaveProgressbar.gif ├── README.md └── Water Wave Progress ├── Clean_App_Design ├── Controller │ ├── Base.lproj │ │ └── Main.storyboard │ └── ViewController.swift ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── c6.imageset │ │ ├── Contents.json │ │ └── c6.png │ ├── clean 2.imageset │ │ ├── Contents.json │ │ └── clean 2.png │ ├── m.imageset │ │ ├── Contents.json │ │ └── m.png │ ├── m4.imageset │ │ ├── Contents.json │ │ └── m4.png │ └── s2.imageset │ │ ├── Contents.json │ │ └── s2.png ├── Clean_App_Design.xcdatamodeld │ └── Clean_App_Design.xcdatamodel │ │ └── contents ├── Info.plist ├── System │ ├── AppDelegate.swift │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ └── SceneDelegate.swift └── View │ └── WaterWaveView.swift └── waterWave_progess.xcodeproj ├── project.pbxproj ├── project.xcworkspace ├── contents.xcworkspacedata ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── mdmuradhossain.xcuserdatad │ └── UserInterfaceState.xcuserstate └── xcuserdata └── mdmuradhossain.xcuserdatad ├── xcdebugger └── Breakpoints_v2.xcbkptlist └── xcschemes └── xcschememanagement.plist /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/.DS_Store -------------------------------------------------------------------------------- /Image sample/waterWaveProgress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Image sample/waterWaveProgress.png -------------------------------------------------------------------------------- /Image sample/waterWaveProgressbar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Image sample/waterWaveProgressbar.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Water_wave_progress 2 | 3 | 4 | ![](https://img.shields.io/badge/Build-passing-success.svg?style=flat)      5 | ![](https://img.shields.io/badge/Platform-iOS-ff69b4.svg?style=flat)      6 | ![](https://img.shields.io/badge/Supported-iOS16.1%20%7C%20OSX%2016.1-4BC51D.svg?style=flat)      7 | ![](https://img.shields.io/badge/Swift-5.7.1-orange.svg?style=flat) 8 | 9 |
10 | 11 | 12 | |Photo|Gif| 13 | |---|---| 14 | ||| 15 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/ Controller/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 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 140 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/ Controller/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Clean_App_Design 4 | // 5 | // Created by Md Murad Hossain on 31/10/22. 6 | // 7 | 8 | import UIKit 9 | 10 | let screenWidth = UIScreen.main.bounds.size.width 11 | 12 | class ViewController: UIViewController { 13 | 14 | @IBOutlet weak var view1: UIView! 15 | 16 | @IBOutlet weak var view2: UIView! 17 | 18 | @IBOutlet weak var view3: UIView! 19 | 20 | 21 | let waterWaveView = WaterWaveView() 22 | 23 | let dr: TimeInterval = 10.0 24 | var timer: Timer? 25 | 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | view.addSubview(waterWaveView) 30 | 31 | waterWaveView.setupProgress(waterWaveView.progress) 32 | 33 | view1.layer.cornerRadius = 15 34 | view2.layer.cornerRadius = 15 35 | view3.layer.cornerRadius = 15 36 | 37 | 38 | NSLayoutConstraint.activate([ 39 | waterWaveView.widthAnchor.constraint(equalToConstant: screenWidth*0.5), 40 | waterWaveView.heightAnchor.constraint(equalToConstant: screenWidth*0.5), 41 | //waterWaveView.topAnchor.constraint(equalTo: view.centerYAnchor) 42 | waterWaveView.topAnchor.constraint(greaterThanOrEqualTo: view.topAnchor, constant: 170), 43 | waterWaveView.centerXAnchor.constraint(greaterThanOrEqualTo: view.centerXAnchor, constant: -10) 44 | //waterWaveView.centerXAnchor.constraint(equalTo: view.centerXAnchor), 45 | //waterWaveView.centerYAnchor.constraint(equalTo: view.centerYAnchor) 46 | ]) 47 | 48 | } 49 | 50 | 51 | override func viewDidAppear(_ animated: Bool) { 52 | super.viewDidAppear(animated) 53 | timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { _ in 54 | 55 | let dr = CGFloat(1.0 / (self.dr/0.01)) 56 | 57 | self.waterWaveView.progress += dr 58 | self.waterWaveView.setupProgress(self.waterWaveView.progress) 59 | 60 | print(self.waterWaveView.progress) 61 | 62 | if self.waterWaveView.progress >= 0.88 { 63 | self.timer?.invalidate() 64 | self.timer = nil 65 | 66 | DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { 67 | self.waterWaveView.percentAnim() 68 | } 69 | 70 | 71 | } 72 | }) 73 | } 74 | 75 | 76 | } 77 | 78 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "platform" : "ios", 6 | "size" : "1024x1024" 7 | } 8 | ], 9 | "info" : { 10 | "author" : "xcode", 11 | "version" : 1 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/c6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "c6.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/c6.imageset/c6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/Clean_App_Design/Assets.xcassets/c6.imageset/c6.png -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/clean 2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "clean 2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/clean 2.imageset/clean 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/Clean_App_Design/Assets.xcassets/clean 2.imageset/clean 2.png -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/m.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "m.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/m.imageset/m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/Clean_App_Design/Assets.xcassets/m.imageset/m.png -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/m4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "m4.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/m4.imageset/m4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/Clean_App_Design/Assets.xcassets/m4.imageset/m4.png -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/s2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "s2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Assets.xcassets/s2.imageset/s2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/Clean_App_Design/Assets.xcassets/s2.imageset/s2.png -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Clean_App_Design.xcdatamodeld/Clean_App_Design.xcdatamodel/contents: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | UIApplicationSceneManifest 6 | 7 | UIApplicationSupportsMultipleScenes 8 | 9 | UISceneConfigurations 10 | 11 | UIWindowSceneSessionRoleApplication 12 | 13 | 14 | UISceneConfigurationName 15 | Default Configuration 16 | UISceneDelegateClassName 17 | $(PRODUCT_MODULE_NAME).SceneDelegate 18 | UISceneStoryboardFile 19 | Main 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/System/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Clean_App_Design 4 | // 5 | // Created by Md Murad Hossain on 31/10/22. 6 | // 7 | 8 | import UIKit 9 | import CoreData 10 | 11 | @main 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | // Override point for customization after application launch. 18 | return true 19 | } 20 | 21 | // MARK: UISceneSession Lifecycle 22 | 23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 24 | // Called when a new scene session is being created. 25 | // Use this method to select a configuration to create the new scene with. 26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 27 | } 28 | 29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 30 | // Called when the user discards a scene session. 31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 33 | } 34 | 35 | // MARK: - Core Data stack 36 | 37 | lazy var persistentContainer: NSPersistentContainer = { 38 | /* 39 | The persistent container for the application. This implementation 40 | creates and returns a container, having loaded the store for the 41 | application to it. This property is optional since there are legitimate 42 | error conditions that could cause the creation of the store to fail. 43 | */ 44 | let container = NSPersistentContainer(name: "Clean_App_Design") 45 | container.loadPersistentStores(completionHandler: { (storeDescription, error) in 46 | if let error = error as NSError? { 47 | // Replace this implementation with code to handle the error appropriately. 48 | // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 49 | 50 | /* 51 | Typical reasons for an error here include: 52 | * The parent directory does not exist, cannot be created, or disallows writing. 53 | * The persistent store is not accessible, due to permissions or data protection when the device is locked. 54 | * The device is out of space. 55 | * The store could not be migrated to the current model version. 56 | Check the error message to determine what the actual problem was. 57 | */ 58 | fatalError("Unresolved error \(error), \(error.userInfo)") 59 | } 60 | }) 61 | return container 62 | }() 63 | 64 | // MARK: - Core Data Saving support 65 | 66 | func saveContext () { 67 | let context = persistentContainer.viewContext 68 | if context.hasChanges { 69 | do { 70 | try context.save() 71 | } catch { 72 | // Replace this implementation with code to handle the error appropriately. 73 | // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 74 | let nserror = error as NSError 75 | fatalError("Unresolved error \(nserror), \(nserror.userInfo)") 76 | } 77 | } 78 | } 79 | 80 | } 81 | 82 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/System/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 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/System/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // Clean_App_Design 4 | // 5 | // Created by Md Murad Hossain on 31/10/22. 6 | // 7 | 8 | import UIKit 9 | 10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 11 | 12 | var window: UIWindow? 13 | 14 | 15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 19 | guard let _ = (scene as? UIWindowScene) else { return } 20 | } 21 | 22 | func sceneDidDisconnect(_ scene: UIScene) { 23 | // Called as the scene is being released by the system. 24 | // This occurs shortly after the scene enters the background, or when its session is discarded. 25 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). 27 | } 28 | 29 | func sceneDidBecomeActive(_ scene: UIScene) { 30 | // Called when the scene has moved from an inactive state to an active state. 31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 32 | } 33 | 34 | func sceneWillResignActive(_ scene: UIScene) { 35 | // Called when the scene will move from an active state to an inactive state. 36 | // This may occur due to temporary interruptions (ex. an incoming phone call). 37 | } 38 | 39 | func sceneWillEnterForeground(_ scene: UIScene) { 40 | // Called as the scene transitions from the background to the foreground. 41 | // Use this method to undo the changes made on entering the background. 42 | } 43 | 44 | func sceneDidEnterBackground(_ scene: UIScene) { 45 | // Called as the scene transitions from the foreground to the background. 46 | // Use this method to save data, release shared resources, and store enough scene-specific state information 47 | // to restore the scene back to its current state. 48 | 49 | // Save changes in the application's managed object context when the application transitions to the background. 50 | (UIApplication.shared.delegate as? AppDelegate)?.saveContext() 51 | } 52 | 53 | 54 | } 55 | 56 | -------------------------------------------------------------------------------- /Water Wave Progress/Clean_App_Design/View/WaterWaveView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // waterWaveView.swift 3 | // Clean_App_Design 4 | // 5 | // Created by Md Murad Hossain on 1/11/22. 6 | // 7 | 8 | 9 | 10 | 11 | import UIKit 12 | 13 | 14 | class WaterWaveView: UIView{ 15 | 16 | 17 | // MARK: Properties 18 | // MARK: Initialize 19 | 20 | private let firstlayer = CAShapeLayer() 21 | private let secondLayer = CAShapeLayer() 22 | 23 | private var percentLbl = UILabel() 24 | 25 | private var firstColor: UIColor = .clear 26 | private var secondColor: UIColor = .clear 27 | 28 | private let twon: CGFloat = .pi*2 29 | private var offset: CGFloat = 0.0 30 | 31 | private let width = screenWidth*0.5 32 | 33 | 34 | var showSingleWave = false 35 | private var start = false 36 | 37 | var progress: CGFloat = 0.0 38 | var waveHeight: CGFloat = 0.0 39 | 40 | 41 | 42 | 43 | override init(frame: CGRect) { 44 | super.init(frame: frame) 45 | setupViews() 46 | } 47 | 48 | 49 | required init?(coder: NSCoder) { 50 | super.init(coder: coder) 51 | } 52 | 53 | } 54 | 55 | 56 | // MARK: Setup Views 57 | 58 | extension WaterWaveView{ 59 | private func setupViews() { 60 | 61 | bounds = CGRect(x: 0.0, y: 0.0, width: min(width,width), height: min(width,width)) 62 | 63 | clipsToBounds = true 64 | backgroundColor = .clear 65 | translatesAutoresizingMaskIntoConstraints = false 66 | layer.cornerRadius = width/2 67 | layer.masksToBounds = true 68 | layer.borderWidth = 1.0 69 | layer.borderColor = UIColor.lightGray.cgColor 70 | 71 | 72 | waveHeight = 8.0 73 | 74 | firstColor = .systemOrange 75 | secondColor = .systemPink 76 | 77 | createFirstLayer() 78 | 79 | if !showSingleWave { 80 | createSecondLayer() 81 | } 82 | 83 | createPercentLbl() 84 | 85 | 86 | } 87 | 88 | // MARK: Create First Layer 89 | 90 | private func createFirstLayer() { 91 | 92 | firstlayer.frame = bounds 93 | firstlayer.anchorPoint = .zero 94 | firstlayer.fillColor = firstColor.cgColor 95 | layer.addSublayer(firstlayer) 96 | } 97 | 98 | private func createSecondLayer() { 99 | 100 | secondLayer.frame = bounds 101 | secondLayer.anchorPoint = .zero 102 | secondLayer.fillColor = secondColor.cgColor 103 | layer.addSublayer(secondLayer) 104 | 105 | } 106 | 107 | private func createPercentLbl(){ 108 | percentLbl.font = UIFont.boldSystemFont(ofSize: 35.0) 109 | percentLbl.textAlignment = .center 110 | percentLbl.text = "" 111 | //percentLbl.text = "Used" 112 | percentLbl.textColor = .white 113 | addSubview(percentLbl) 114 | percentLbl.translatesAutoresizingMaskIntoConstraints = false 115 | percentLbl.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true 116 | percentLbl.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true 117 | } 118 | 119 | func percentAnim(){ 120 | let anim = CABasicAnimation(keyPath: "opacity") 121 | anim.duration = 1.5 122 | anim.fromValue = 0.0 123 | anim.toValue = 1.5 124 | anim.repeatCount = .infinity 125 | anim.isRemovedOnCompletion = false 126 | 127 | percentLbl.layer.add(anim, forKey: nil) 128 | 129 | } 130 | 131 | func setupProgress(_ pr: CGFloat){ 132 | progress = pr 133 | percentLbl.text = String(format: "%ld%%", NSNumber(value: Float(pr*100)).intValue) 134 | 135 | let top: CGFloat = pr * bounds.size.height 136 | firstlayer.setValue(width-top, forKeyPath: "position.y") 137 | secondLayer.setValue(width-top, forKeyPath: "position.y") 138 | 139 | if !start { 140 | DispatchQueue.main.async { 141 | self.startAnim() 142 | } 143 | } 144 | } 145 | 146 | private func startAnim() { 147 | start = true 148 | waterWaveAnim() 149 | } 150 | 151 | private func waterWaveAnim(){ 152 | let w = bounds.size.width 153 | let h = bounds.size.height 154 | 155 | let bezier = UIBezierPath() 156 | let path = CGMutablePath() 157 | 158 | let startoffsetY = waveHeight * CGFloat(sinf(Float(offset*twon/w))) 159 | var origiOffsetY: CGFloat = 0.0 160 | 161 | path.move(to: CGPoint(x: 0.0, y: startoffsetY),transform: .identity) 162 | bezier.move(to: CGPoint(x: 0.0, y: startoffsetY)) 163 | 164 | for i in stride(from: 0.0, to: w*1000, by: 1){ 165 | 166 | origiOffsetY = waveHeight * CGFloat(sinf(Float(twon / w*i + offset * twon/w))) 167 | bezier.addLine(to: CGPoint(x: i, y: origiOffsetY)) 168 | 169 | } 170 | 171 | bezier.addLine(to: CGPoint(x: w*1000, y: origiOffsetY)) 172 | bezier.addLine(to: CGPoint(x: w*1000, y: h)) 173 | bezier.addLine(to: CGPoint(x: 0.0, y: h)) 174 | bezier.addLine(to: CGPoint(x: 0.0, y: startoffsetY)) 175 | bezier.close() 176 | 177 | let anim = CABasicAnimation(keyPath: "transform.translation.x") 178 | anim.duration = 2.0 179 | anim.fromValue = -w * 0.5 180 | anim.toValue = -w - w*0.5 181 | anim.repeatCount = .infinity 182 | anim.isRemovedOnCompletion = false 183 | 184 | 185 | firstlayer.fillColor = firstColor.cgColor 186 | firstlayer.path = bezier.cgPath 187 | firstlayer.add(anim, forKey: nil) 188 | 189 | 190 | if !showSingleWave{ 191 | 192 | let bezier = UIBezierPath() 193 | 194 | let startoffsetY = waveHeight * CGFloat(sinf(Float(offset*twon/w))) 195 | var origiOffsetY: CGFloat = 0.0 196 | 197 | bezier.move(to: CGPoint(x: 0.0, y: startoffsetY)) 198 | 199 | for i in stride(from: 0.0, to: w*1000, by: 1){ 200 | origiOffsetY = waveHeight*CGFloat(cosf(Float(twon/w*i + offset*twon/w))) 201 | bezier.addLine(to: CGPoint(x: i, y: origiOffsetY)) 202 | 203 | } 204 | bezier.addLine(to: CGPoint(x: w*1000, y: origiOffsetY)) 205 | bezier.addLine(to: CGPoint(x: w*1000, y: h)) 206 | bezier.addLine(to: CGPoint(x: 0.0, y: h)) 207 | bezier.addLine(to: CGPoint(x: 0.0, y: startoffsetY)) 208 | bezier.close() 209 | 210 | 211 | secondLayer.fillColor = secondColor.cgColor 212 | secondLayer.path = bezier.cgPath 213 | secondLayer.add(anim, forKey: nil) 214 | } 215 | } 216 | 217 | 218 | } 219 | -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 56; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 21B51D4D29104685002046A6 /* WaterWaveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21B51D4C29104685002046A6 /* WaterWaveView.swift */; }; 11 | 21F9CDD2290FFFD30024A274 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9CDD1290FFFD30024A274 /* AppDelegate.swift */; }; 12 | 21F9CDD4290FFFD30024A274 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9CDD3290FFFD30024A274 /* SceneDelegate.swift */; }; 13 | 21F9CDD6290FFFD30024A274 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21F9CDD5290FFFD30024A274 /* ViewController.swift */; }; 14 | 21F9CDD9290FFFD30024A274 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21F9CDD7290FFFD30024A274 /* Main.storyboard */; }; 15 | 21F9CDDC290FFFD30024A274 /* Clean_App_Design.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 21F9CDDA290FFFD30024A274 /* Clean_App_Design.xcdatamodeld */; }; 16 | 21F9CDDE290FFFD30024A274 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 21F9CDDD290FFFD30024A274 /* Assets.xcassets */; }; 17 | 21F9CDE1290FFFD30024A274 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21F9CDDF290FFFD30024A274 /* LaunchScreen.storyboard */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 21B51D4C29104685002046A6 /* WaterWaveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaterWaveView.swift; sourceTree = ""; }; 22 | 21F9CDCE290FFFD30024A274 /* waterWave_progess.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = waterWave_progess.app; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 21F9CDD1290FFFD30024A274 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 24 | 21F9CDD3290FFFD30024A274 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 25 | 21F9CDD5290FFFD30024A274 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 26 | 21F9CDD8290FFFD30024A274 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 21F9CDDB290FFFD30024A274 /* Clean_App_Design.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Clean_App_Design.xcdatamodel; sourceTree = ""; }; 28 | 21F9CDDD290FFFD30024A274 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 29 | 21F9CDE0290FFFD30024A274 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 30 | 21F9CDE2290FFFD30024A274 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 31 | /* End PBXFileReference section */ 32 | 33 | /* Begin PBXFrameworksBuildPhase section */ 34 | 21F9CDCB290FFFD30024A274 /* Frameworks */ = { 35 | isa = PBXFrameworksBuildPhase; 36 | buildActionMask = 2147483647; 37 | files = ( 38 | ); 39 | runOnlyForDeploymentPostprocessing = 0; 40 | }; 41 | /* End PBXFrameworksBuildPhase section */ 42 | 43 | /* Begin PBXGroup section */ 44 | 21B51D4829101793002046A6 /* Controller */ = { 45 | isa = PBXGroup; 46 | children = ( 47 | 21F9CDD5290FFFD30024A274 /* ViewController.swift */, 48 | 21F9CDD7290FFFD30024A274 /* Main.storyboard */, 49 | ); 50 | path = " Controller"; 51 | sourceTree = ""; 52 | }; 53 | 21B51D49291017AD002046A6 /* View */ = { 54 | isa = PBXGroup; 55 | children = ( 56 | 21B51D4C29104685002046A6 /* WaterWaveView.swift */, 57 | ); 58 | path = View; 59 | sourceTree = ""; 60 | }; 61 | 21B51D4A291017F3002046A6 /* Model */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | ); 65 | path = Model; 66 | sourceTree = ""; 67 | }; 68 | 21B51D4B291017FE002046A6 /* System */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 21F9CDD1290FFFD30024A274 /* AppDelegate.swift */, 72 | 21F9CDD3290FFFD30024A274 /* SceneDelegate.swift */, 73 | 21F9CDDF290FFFD30024A274 /* LaunchScreen.storyboard */, 74 | ); 75 | path = System; 76 | sourceTree = ""; 77 | }; 78 | 21F9CDC5290FFFD30024A274 = { 79 | isa = PBXGroup; 80 | children = ( 81 | 21F9CDD0290FFFD30024A274 /* Clean_App_Design */, 82 | 21F9CDCF290FFFD30024A274 /* Products */, 83 | ); 84 | sourceTree = ""; 85 | }; 86 | 21F9CDCF290FFFD30024A274 /* Products */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 21F9CDCE290FFFD30024A274 /* waterWave_progess.app */, 90 | ); 91 | name = Products; 92 | sourceTree = ""; 93 | }; 94 | 21F9CDD0290FFFD30024A274 /* Clean_App_Design */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 21B51D4B291017FE002046A6 /* System */, 98 | 21B51D4A291017F3002046A6 /* Model */, 99 | 21B51D49291017AD002046A6 /* View */, 100 | 21B51D4829101793002046A6 /* Controller */, 101 | 21F9CDDD290FFFD30024A274 /* Assets.xcassets */, 102 | 21F9CDE2290FFFD30024A274 /* Info.plist */, 103 | 21F9CDDA290FFFD30024A274 /* Clean_App_Design.xcdatamodeld */, 104 | ); 105 | path = Clean_App_Design; 106 | sourceTree = ""; 107 | }; 108 | /* End PBXGroup section */ 109 | 110 | /* Begin PBXNativeTarget section */ 111 | 21F9CDCD290FFFD30024A274 /* waterWave_progess */ = { 112 | isa = PBXNativeTarget; 113 | buildConfigurationList = 21F9CDE5290FFFD30024A274 /* Build configuration list for PBXNativeTarget "waterWave_progess" */; 114 | buildPhases = ( 115 | 21F9CDCA290FFFD30024A274 /* Sources */, 116 | 21F9CDCB290FFFD30024A274 /* Frameworks */, 117 | 21F9CDCC290FFFD30024A274 /* Resources */, 118 | ); 119 | buildRules = ( 120 | ); 121 | dependencies = ( 122 | ); 123 | name = waterWave_progess; 124 | productName = Clean_App_Design; 125 | productReference = 21F9CDCE290FFFD30024A274 /* waterWave_progess.app */; 126 | productType = "com.apple.product-type.application"; 127 | }; 128 | /* End PBXNativeTarget section */ 129 | 130 | /* Begin PBXProject section */ 131 | 21F9CDC6290FFFD30024A274 /* Project object */ = { 132 | isa = PBXProject; 133 | attributes = { 134 | BuildIndependentTargetsInParallel = 1; 135 | LastSwiftUpdateCheck = 1400; 136 | LastUpgradeCheck = 1400; 137 | TargetAttributes = { 138 | 21F9CDCD290FFFD30024A274 = { 139 | CreatedOnToolsVersion = 14.0.1; 140 | }; 141 | }; 142 | }; 143 | buildConfigurationList = 21F9CDC9290FFFD30024A274 /* Build configuration list for PBXProject "waterWave_progess" */; 144 | compatibilityVersion = "Xcode 14.0"; 145 | developmentRegion = en; 146 | hasScannedForEncodings = 0; 147 | knownRegions = ( 148 | en, 149 | Base, 150 | ); 151 | mainGroup = 21F9CDC5290FFFD30024A274; 152 | productRefGroup = 21F9CDCF290FFFD30024A274 /* Products */; 153 | projectDirPath = ""; 154 | projectRoot = ""; 155 | targets = ( 156 | 21F9CDCD290FFFD30024A274 /* waterWave_progess */, 157 | ); 158 | }; 159 | /* End PBXProject section */ 160 | 161 | /* Begin PBXResourcesBuildPhase section */ 162 | 21F9CDCC290FFFD30024A274 /* Resources */ = { 163 | isa = PBXResourcesBuildPhase; 164 | buildActionMask = 2147483647; 165 | files = ( 166 | 21F9CDE1290FFFD30024A274 /* LaunchScreen.storyboard in Resources */, 167 | 21F9CDDE290FFFD30024A274 /* Assets.xcassets in Resources */, 168 | 21F9CDD9290FFFD30024A274 /* Main.storyboard in Resources */, 169 | ); 170 | runOnlyForDeploymentPostprocessing = 0; 171 | }; 172 | /* End PBXResourcesBuildPhase section */ 173 | 174 | /* Begin PBXSourcesBuildPhase section */ 175 | 21F9CDCA290FFFD30024A274 /* Sources */ = { 176 | isa = PBXSourcesBuildPhase; 177 | buildActionMask = 2147483647; 178 | files = ( 179 | 21B51D4D29104685002046A6 /* WaterWaveView.swift in Sources */, 180 | 21F9CDD6290FFFD30024A274 /* ViewController.swift in Sources */, 181 | 21F9CDDC290FFFD30024A274 /* Clean_App_Design.xcdatamodeld in Sources */, 182 | 21F9CDD2290FFFD30024A274 /* AppDelegate.swift in Sources */, 183 | 21F9CDD4290FFFD30024A274 /* SceneDelegate.swift in Sources */, 184 | ); 185 | runOnlyForDeploymentPostprocessing = 0; 186 | }; 187 | /* End PBXSourcesBuildPhase section */ 188 | 189 | /* Begin PBXVariantGroup section */ 190 | 21F9CDD7290FFFD30024A274 /* Main.storyboard */ = { 191 | isa = PBXVariantGroup; 192 | children = ( 193 | 21F9CDD8290FFFD30024A274 /* Base */, 194 | ); 195 | name = Main.storyboard; 196 | sourceTree = ""; 197 | }; 198 | 21F9CDDF290FFFD30024A274 /* LaunchScreen.storyboard */ = { 199 | isa = PBXVariantGroup; 200 | children = ( 201 | 21F9CDE0290FFFD30024A274 /* Base */, 202 | ); 203 | name = LaunchScreen.storyboard; 204 | sourceTree = ""; 205 | }; 206 | /* End PBXVariantGroup section */ 207 | 208 | /* Begin XCBuildConfiguration section */ 209 | 21F9CDE3290FFFD30024A274 /* Debug */ = { 210 | isa = XCBuildConfiguration; 211 | buildSettings = { 212 | ALWAYS_SEARCH_USER_PATHS = NO; 213 | CLANG_ANALYZER_NONNULL = YES; 214 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 215 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 216 | CLANG_ENABLE_MODULES = YES; 217 | CLANG_ENABLE_OBJC_ARC = YES; 218 | CLANG_ENABLE_OBJC_WEAK = YES; 219 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 220 | CLANG_WARN_BOOL_CONVERSION = YES; 221 | CLANG_WARN_COMMA = YES; 222 | CLANG_WARN_CONSTANT_CONVERSION = YES; 223 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 224 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 225 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 226 | CLANG_WARN_EMPTY_BODY = YES; 227 | CLANG_WARN_ENUM_CONVERSION = YES; 228 | CLANG_WARN_INFINITE_RECURSION = YES; 229 | CLANG_WARN_INT_CONVERSION = YES; 230 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 231 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 232 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 233 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 234 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 235 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 236 | CLANG_WARN_STRICT_PROTOTYPES = YES; 237 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 238 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 239 | CLANG_WARN_UNREACHABLE_CODE = YES; 240 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 241 | COPY_PHASE_STRIP = NO; 242 | DEBUG_INFORMATION_FORMAT = dwarf; 243 | ENABLE_STRICT_OBJC_MSGSEND = YES; 244 | ENABLE_TESTABILITY = YES; 245 | GCC_C_LANGUAGE_STANDARD = gnu11; 246 | GCC_DYNAMIC_NO_PIC = NO; 247 | GCC_NO_COMMON_BLOCKS = YES; 248 | GCC_OPTIMIZATION_LEVEL = 0; 249 | GCC_PREPROCESSOR_DEFINITIONS = ( 250 | "DEBUG=1", 251 | "$(inherited)", 252 | ); 253 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 254 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 255 | GCC_WARN_UNDECLARED_SELECTOR = YES; 256 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 257 | GCC_WARN_UNUSED_FUNCTION = YES; 258 | GCC_WARN_UNUSED_VARIABLE = YES; 259 | IPHONEOS_DEPLOYMENT_TARGET = 16.0; 260 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 261 | MTL_FAST_MATH = YES; 262 | ONLY_ACTIVE_ARCH = YES; 263 | SDKROOT = iphoneos; 264 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 265 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 266 | }; 267 | name = Debug; 268 | }; 269 | 21F9CDE4290FFFD30024A274 /* Release */ = { 270 | isa = XCBuildConfiguration; 271 | buildSettings = { 272 | ALWAYS_SEARCH_USER_PATHS = NO; 273 | CLANG_ANALYZER_NONNULL = YES; 274 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 275 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 276 | CLANG_ENABLE_MODULES = YES; 277 | CLANG_ENABLE_OBJC_ARC = YES; 278 | CLANG_ENABLE_OBJC_WEAK = YES; 279 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 280 | CLANG_WARN_BOOL_CONVERSION = YES; 281 | CLANG_WARN_COMMA = YES; 282 | CLANG_WARN_CONSTANT_CONVERSION = YES; 283 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 284 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 285 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 286 | CLANG_WARN_EMPTY_BODY = YES; 287 | CLANG_WARN_ENUM_CONVERSION = YES; 288 | CLANG_WARN_INFINITE_RECURSION = YES; 289 | CLANG_WARN_INT_CONVERSION = YES; 290 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 291 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 292 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 293 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 294 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 295 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 296 | CLANG_WARN_STRICT_PROTOTYPES = YES; 297 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 298 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 299 | CLANG_WARN_UNREACHABLE_CODE = YES; 300 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 301 | COPY_PHASE_STRIP = NO; 302 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 303 | ENABLE_NS_ASSERTIONS = NO; 304 | ENABLE_STRICT_OBJC_MSGSEND = YES; 305 | GCC_C_LANGUAGE_STANDARD = gnu11; 306 | GCC_NO_COMMON_BLOCKS = YES; 307 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 308 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 309 | GCC_WARN_UNDECLARED_SELECTOR = YES; 310 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 311 | GCC_WARN_UNUSED_FUNCTION = YES; 312 | GCC_WARN_UNUSED_VARIABLE = YES; 313 | IPHONEOS_DEPLOYMENT_TARGET = 16.0; 314 | MTL_ENABLE_DEBUG_INFO = NO; 315 | MTL_FAST_MATH = YES; 316 | SDKROOT = iphoneos; 317 | SWIFT_COMPILATION_MODE = wholemodule; 318 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 319 | VALIDATE_PRODUCT = YES; 320 | }; 321 | name = Release; 322 | }; 323 | 21F9CDE6290FFFD30024A274 /* Debug */ = { 324 | isa = XCBuildConfiguration; 325 | buildSettings = { 326 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 327 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 328 | CODE_SIGN_STYLE = Automatic; 329 | CURRENT_PROJECT_VERSION = 1; 330 | GENERATE_INFOPLIST_FILE = YES; 331 | INFOPLIST_FILE = Clean_App_Design/Info.plist; 332 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 333 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; 334 | INFOPLIST_KEY_UIMainStoryboardFile = Main; 335 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 336 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 337 | LD_RUNPATH_SEARCH_PATHS = ( 338 | "$(inherited)", 339 | "@executable_path/Frameworks", 340 | ); 341 | MARKETING_VERSION = 1.0; 342 | PRODUCT_BUNDLE_IDENTIFIER = "com.murad.www.Clean-App-Design"; 343 | PRODUCT_NAME = "$(TARGET_NAME)"; 344 | SWIFT_EMIT_LOC_STRINGS = YES; 345 | SWIFT_VERSION = 5.0; 346 | TARGETED_DEVICE_FAMILY = "1,2"; 347 | }; 348 | name = Debug; 349 | }; 350 | 21F9CDE7290FFFD30024A274 /* Release */ = { 351 | isa = XCBuildConfiguration; 352 | buildSettings = { 353 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 354 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 355 | CODE_SIGN_STYLE = Automatic; 356 | CURRENT_PROJECT_VERSION = 1; 357 | GENERATE_INFOPLIST_FILE = YES; 358 | INFOPLIST_FILE = Clean_App_Design/Info.plist; 359 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 360 | INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; 361 | INFOPLIST_KEY_UIMainStoryboardFile = Main; 362 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 363 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 364 | LD_RUNPATH_SEARCH_PATHS = ( 365 | "$(inherited)", 366 | "@executable_path/Frameworks", 367 | ); 368 | MARKETING_VERSION = 1.0; 369 | PRODUCT_BUNDLE_IDENTIFIER = "com.murad.www.Clean-App-Design"; 370 | PRODUCT_NAME = "$(TARGET_NAME)"; 371 | SWIFT_EMIT_LOC_STRINGS = YES; 372 | SWIFT_VERSION = 5.0; 373 | TARGETED_DEVICE_FAMILY = "1,2"; 374 | }; 375 | name = Release; 376 | }; 377 | /* End XCBuildConfiguration section */ 378 | 379 | /* Begin XCConfigurationList section */ 380 | 21F9CDC9290FFFD30024A274 /* Build configuration list for PBXProject "waterWave_progess" */ = { 381 | isa = XCConfigurationList; 382 | buildConfigurations = ( 383 | 21F9CDE3290FFFD30024A274 /* Debug */, 384 | 21F9CDE4290FFFD30024A274 /* Release */, 385 | ); 386 | defaultConfigurationIsVisible = 0; 387 | defaultConfigurationName = Release; 388 | }; 389 | 21F9CDE5290FFFD30024A274 /* Build configuration list for PBXNativeTarget "waterWave_progess" */ = { 390 | isa = XCConfigurationList; 391 | buildConfigurations = ( 392 | 21F9CDE6290FFFD30024A274 /* Debug */, 393 | 21F9CDE7290FFFD30024A274 /* Release */, 394 | ); 395 | defaultConfigurationIsVisible = 0; 396 | defaultConfigurationName = Release; 397 | }; 398 | /* End XCConfigurationList section */ 399 | 400 | /* Begin XCVersionGroup section */ 401 | 21F9CDDA290FFFD30024A274 /* Clean_App_Design.xcdatamodeld */ = { 402 | isa = XCVersionGroup; 403 | children = ( 404 | 21F9CDDB290FFFD30024A274 /* Clean_App_Design.xcdatamodel */, 405 | ); 406 | currentVersion = 21F9CDDB290FFFD30024A274 /* Clean_App_Design.xcdatamodel */; 407 | path = Clean_App_Design.xcdatamodeld; 408 | sourceTree = ""; 409 | versionGroupType = wrapper.xcdatamodel; 410 | }; 411 | /* End XCVersionGroup section */ 412 | }; 413 | rootObject = 21F9CDC6290FFFD30024A274 /* Project object */; 414 | } 415 | -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/project.xcworkspace/xcuserdata/mdmuradhossain.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Murad9288/WaterWaveProgress_iOS/8ebc861c862ee106eb454e602d82800ec343e1ad/Water Wave Progress/waterWave_progess.xcodeproj/project.xcworkspace/xcuserdata/mdmuradhossain.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/xcuserdata/mdmuradhossain.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Water Wave Progress/waterWave_progess.xcodeproj/xcuserdata/mdmuradhossain.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Clean_App_Design.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | waterWave_progess.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | 18 | 19 | 20 | --------------------------------------------------------------------------------