From 6b7811d24b6d48cbe1b7279adb8dd6b729e299ee Mon Sep 17 00:00:00 2001 From: iamank1t Date: Thu, 29 Mar 2018 07:59:16 +0530 Subject: [PATCH] @ruel.cedeno logo used for app, imporved UI of app --- Podfile | 1 + Podfile.lock | 7 +- Pods/Manifest.lock | 7 +- Pods/NVActivityIndicatorView/LICENSE | 21 + ...vityIndicatorAnimationAudioEqualizer.swift | 70 + ...NVActivityIndicatorAnimationBallBeat.swift | 78 + ...vityIndicatorAnimationBallClipRotate.swift | 67 + ...catorAnimationBallClipRotateMultiple.swift | 96 ++ ...ndicatorAnimationBallClipRotatePulse.swift | 99 ++ ...tivityIndicatorAnimationBallGridBeat.swift | 68 + ...ivityIndicatorAnimationBallGridPulse.swift | 80 + ...VActivityIndicatorAnimationBallPulse.swift | 64 + ...ivityIndicatorAnimationBallPulseRise.swift | 114 ++ ...ivityIndicatorAnimationBallPulseSync.swift | 67 + ...ActivityIndicatorAnimationBallRotate.swift | 82 ++ ...ityIndicatorAnimationBallRotateChase.swift | 76 + ...VActivityIndicatorAnimationBallScale.swift | 68 + ...yIndicatorAnimationBallScaleMultiple.swift | 75 + ...ityIndicatorAnimationBallScaleRipple.swift | 71 + ...atorAnimationBallScaleRippleMultiple.swift | 76 + ...IndicatorAnimationBallSpinFadeLoader.swift | 91 ++ ...tyIndicatorAnimationBallTrianglePath.swift | 102 ++ ...ActivityIndicatorAnimationBallZigZag.swift | 78 + ...yIndicatorAnimationBallZigZagDeflect.swift | 78 + .../NVActivityIndicatorAnimationBlank.swift | 35 + ...tyIndicatorAnimationCircleStrokeSpin.swift | 73 + ...vityIndicatorAnimationCubeTransition.swift | 92 ++ ...VActivityIndicatorAnimationLineScale.swift | 62 + ...vityIndicatorAnimationLineScaleParty.swift | 61 + ...yIndicatorAnimationLineScalePulseOut.swift | 65 + ...catorAnimationLineScalePulseOutRapid.swift | 66 + ...IndicatorAnimationLineSpinFadeLoader.swift | 89 ++ .../NVActivityIndicatorAnimationOrbit.swift | 172 +++ .../NVActivityIndicatorAnimationPacman.swift | 120 ++ ...vityIndicatorAnimationSemiCircleSpin.swift | 57 + ...ActivityIndicatorAnimationSquareSpin.swift | 79 + ...tyIndicatorAnimationTriangleSkewSpin.swift | 77 + ...NVActivityIndicatorAnimationDelegate.swift | 32 + .../NVActivityIndicatorShape.swift | 162 +++ .../NVActivityIndicatorView.swift | 510 +++++++ .../NVActivityIndicatorPresenter.swift | 266 ++++ .../NVActivityIndicatorViewable.swift | 84 ++ Pods/NVActivityIndicatorView/README.md | 222 +++ Pods/Pods.xcodeproj/project.pbxproj | 1296 +++++++++++------ .../NVActivityIndicatorView.xcscheme | 60 + .../xcschemes/Pods-Travel-IT.xcscheme | 4 +- .../xcschemes/SDWebImage.xcscheme | 2 +- .../xcschemes/SwiftyJSON.xcscheme | 2 +- .../xcschemes/xcschememanagement.plist | 17 +- .../NVActivityIndicatorView/Info.plist | 26 + .../NVActivityIndicatorView-dummy.m | 5 + .../NVActivityIndicatorView-prefix.pch | 12 + .../NVActivityIndicatorView-umbrella.h | 16 + .../NVActivityIndicatorView.modulemap | 6 + .../NVActivityIndicatorView.xcconfig | 11 + .../Pods-Travel-IT-acknowledgements.markdown | 25 + .../Pods-Travel-IT-acknowledgements.plist | 31 + .../Pods-Travel-IT-frameworks.sh | 2 + .../Pods-Travel-IT.debug.xcconfig | 6 +- .../Pods-Travel-IT.release.xcconfig | 6 +- .../Pods-Travel-ITTests.debug.xcconfig | 4 +- .../Pods-Travel-ITTests.release.xcconfig | 4 +- .../Pods-Travel-ITUITests.debug.xcconfig | 4 +- .../Pods-Travel-ITUITests.release.xcconfig | 4 +- Travel-IT.xcodeproj/project.pbxproj | 60 +- .../xcschemes/xcschememanagement.plist | 2 +- .../Contents.json | 2 +- .../Assets.xcassets/Group.imageset/Group.pdf | Bin 0 -> 4420 bytes .../ec6a6b0d-6136-4ca2-9af6-5f634a8d9798.png | Bin 10438 -> 0 bytes .../appLogo.imageset/Contents.json | 12 + .../appLogo.imageset/color.png | Bin 0 -> 16692 bytes .../icon_1.imageset/Contents.json | 12 + .../icon_1.imageset/sketchy_ride.pdf | Bin 0 -> 11968 bytes .../icon_2.imageset/Contents.json | 12 + .../icon_2.imageset/sketchy_go.pdf | Bin 0 -> 12875 bytes Travel-IT/Base.lproj/LaunchScreen.storyboard | 7 +- Travel-IT/Extensions/BaseColours.swift | 16 + Travel-IT/Extensions/CustomNavigationVC.swift | 3 +- Travel-IT/Extensions/CustomTabbarVC.swift | 51 + Travel-IT/Extensions/UIView+Properties.swift | 116 ++ Travel-IT/Hot Posts/HotPostShowVC.swift | 48 + Travel-IT/Hot Posts/HotPosts.storyboard | 228 ++- Travel-IT/Hot Posts/HotPostsListVC.swift | 105 ++ Travel-IT/Hot Posts/HotPostsTableCell.swift | 57 + Travel-IT/Tools/Tools.storyboard | 73 + Travel-IT/Tools/UsefulSteemitToolsVC.swift | 35 + .../Base.lproj/HotPosts~.storyboard | 241 +++ .../Trending Posts/Base.lproj/Main.storyboard | 150 +- Travel-IT/Trending Posts/PostsTableCell.swift | 7 + Travel-IT/Trending Posts/ViewController.swift | 27 +- Travel-IT/User/UserProfile.storyboard | 73 + Travel-IT/User/UserProfileVC.swift | 35 + 92 files changed, 6288 insertions(+), 587 deletions(-) create mode 100644 Pods/NVActivityIndicatorView/LICENSE create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallBeat.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridBeat.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridPulse.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulse.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotateChase.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBlank.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScaleParty.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSquareSpin.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorShape.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorPresenter.swift create mode 100644 Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorViewable.swift create mode 100644 Pods/NVActivityIndicatorView/README.md create mode 100644 Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/NVActivityIndicatorView.xcscheme create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/Info.plist create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-dummy.m create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-umbrella.h create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap create mode 100644 Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.xcconfig rename Travel-IT/Assets.xcassets/{Launch_Screen.imageset => Group.imageset}/Contents.json (66%) create mode 100644 Travel-IT/Assets.xcassets/Group.imageset/Group.pdf delete mode 100644 Travel-IT/Assets.xcassets/Launch_Screen.imageset/ec6a6b0d-6136-4ca2-9af6-5f634a8d9798.png create mode 100644 Travel-IT/Assets.xcassets/appLogo.imageset/Contents.json create mode 100644 Travel-IT/Assets.xcassets/appLogo.imageset/color.png create mode 100644 Travel-IT/Assets.xcassets/icon_1.imageset/Contents.json create mode 100644 Travel-IT/Assets.xcassets/icon_1.imageset/sketchy_ride.pdf create mode 100644 Travel-IT/Assets.xcassets/icon_2.imageset/Contents.json create mode 100644 Travel-IT/Assets.xcassets/icon_2.imageset/sketchy_go.pdf create mode 100644 Travel-IT/Extensions/BaseColours.swift create mode 100644 Travel-IT/Extensions/CustomTabbarVC.swift create mode 100644 Travel-IT/Extensions/UIView+Properties.swift create mode 100644 Travel-IT/Hot Posts/HotPostShowVC.swift create mode 100644 Travel-IT/Hot Posts/HotPostsListVC.swift create mode 100644 Travel-IT/Hot Posts/HotPostsTableCell.swift create mode 100644 Travel-IT/Tools/Tools.storyboard create mode 100644 Travel-IT/Tools/UsefulSteemitToolsVC.swift create mode 100644 Travel-IT/Trending Posts/Base.lproj/HotPosts~.storyboard create mode 100644 Travel-IT/User/UserProfile.storyboard create mode 100644 Travel-IT/User/UserProfileVC.swift diff --git a/Podfile b/Podfile index c4f52cc..f40692f 100644 --- a/Podfile +++ b/Podfile @@ -8,6 +8,7 @@ target 'Travel-IT' do # Pods for Travel-IT pod ‘SwiftyJSON’ pod 'SDWebImage', '~> 4.0' + pod 'NVActivityIndicatorView' target 'Travel-ITTests' do inherit! :search_paths # Pods for testing diff --git a/Podfile.lock b/Podfile.lock index baa11d0..2caeb72 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,17 +1,22 @@ PODS: + - NVActivityIndicatorView (4.1.1): + - NVActivityIndicatorView/Presenter (= 4.1.1) + - NVActivityIndicatorView/Presenter (4.1.1) - SDWebImage (4.2.3): - SDWebImage/Core (= 4.2.3) - SDWebImage/Core (4.2.3) - SwiftyJSON (4.0.0) DEPENDENCIES: + - NVActivityIndicatorView - SDWebImage (~> 4.0) - SwiftyJSON SPEC CHECKSUMS: + NVActivityIndicatorView: 60109b9bf46efc2e71ab81453196ccdfdfeea870 SDWebImage: 791bb72962b3492327ddcac4b1880bd1b5458431 SwiftyJSON: 070dabdcb1beb81b247c65ffa3a79dbbfb3b48aa -PODFILE CHECKSUM: e4117cb75a95239a5793b701c24fc93e713bab5d +PODFILE CHECKSUM: c6ca8f72c3223fb96655eccfab8b35e0adc0b1c8 COCOAPODS: 1.3.1 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index baa11d0..2caeb72 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,17 +1,22 @@ PODS: + - NVActivityIndicatorView (4.1.1): + - NVActivityIndicatorView/Presenter (= 4.1.1) + - NVActivityIndicatorView/Presenter (4.1.1) - SDWebImage (4.2.3): - SDWebImage/Core (= 4.2.3) - SDWebImage/Core (4.2.3) - SwiftyJSON (4.0.0) DEPENDENCIES: + - NVActivityIndicatorView - SDWebImage (~> 4.0) - SwiftyJSON SPEC CHECKSUMS: + NVActivityIndicatorView: 60109b9bf46efc2e71ab81453196ccdfdfeea870 SDWebImage: 791bb72962b3492327ddcac4b1880bd1b5458431 SwiftyJSON: 070dabdcb1beb81b247c65ffa3a79dbbfb3b48aa -PODFILE CHECKSUM: e4117cb75a95239a5793b701c24fc93e713bab5d +PODFILE CHECKSUM: c6ca8f72c3223fb96655eccfab8b35e0adc0b1c8 COCOAPODS: 1.3.1 diff --git a/Pods/NVActivityIndicatorView/LICENSE b/Pods/NVActivityIndicatorView/LICENSE new file mode 100644 index 0000000..752962a --- /dev/null +++ b/Pods/NVActivityIndicatorView/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Vinh Nguyen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift new file mode 100644 index 0000000..fb539f6 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift @@ -0,0 +1,70 @@ +// +// NVActivityIndicatorAnimationAudioEqualizer.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationAudioEqualizer: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSize = size.width / 9 + let x = (layer.bounds.size.width - lineSize * 7) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: [CFTimeInterval] = [4.3, 2.5, 1.7, 3.1] + let values = [0, 0.7, 0.4, 0.05, 0.95, 0.3, 0.9, 0.4, 0.15, 0.18, 0.75, 0.01] + + // Draw lines + for i in 0 ..< 4 { + let animation = CAKeyframeAnimation() + + animation.keyPath = "path" + animation.isAdditive = true + animation.values = [] + + for j in 0 ..< values.count { + let heightFactor = values[j] + let height = size.height * CGFloat(heightFactor) + let point = CGPoint(x: 0, y: size.height - height) + let path = UIBezierPath(rect: CGRect(origin: point, size: CGSize(width: lineSize, height: height))) + + animation.values?.append(path.cgPath) + } + animation.duration = duration[i] + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + let line = NVActivityIndicatorShape.line.layerWith(size: CGSize(width: lineSize, height: size.height), color: color) + let frame = CGRect(x: x + lineSize * 2 * CGFloat(i), + y: y, + width: lineSize, + height: size.height) + + line.frame = frame + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallBeat.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallBeat.swift new file mode 100644 index 0000000..595ada3 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallBeat.swift @@ -0,0 +1,78 @@ +// +// NVActivityIndicatorAnimationBallBeat.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallBeat: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - circleSpacing * 2) / 3 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - circleSize) / 2 + let duration: CFTimeInterval = 0.7 + let beginTime = CACurrentMediaTime() + let beginTimes = [0.35, 0, 0.35] + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.values = [1, 0.75, 1] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimation.keyTimes = [0, 0.5, 1] + opacityAnimation.values = [1, 0.2, 1] + opacityAnimation.duration = duration + + // Aniamtion + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + y: y, + width: circleSize, + height: circleSize) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift new file mode 100644 index 0000000..f6b9979 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift @@ -0,0 +1,67 @@ +// +// NVActivityIndicatorBallClipRotate.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallClipRotate: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 0.75 + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.values = [1, 0.6, 1] + + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = scaleAnimation.keyTimes + rotateAnimation.values = [0, Double.pi, 2 * Double.pi] + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, rotateAnimation] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.ringThirdFour.layerWith(size: CGSize(width: size.width, height: size.height), color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift new file mode 100644 index 0000000..592691b --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift @@ -0,0 +1,96 @@ +// +// NVActivityIndicatorAnimationBallClipRotateMultiple.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallClipRotateMultiple: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let bigCircleSize: CGFloat = size.width + let smallCircleSize: CGFloat = size.width / 2 + let longDuration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + circleOf(shape: .ringTwoHalfHorizontal, + duration: longDuration, + timingFunction: timingFunction, + layer: layer, + size: bigCircleSize, + color: color, reverse: false) + circleOf(shape: .ringTwoHalfVertical, + duration: longDuration, + timingFunction: timingFunction, + layer: layer, + size: smallCircleSize, + color: color, reverse: true) + } + + func createAnimationIn(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, reverse: Bool) -> CAAnimation { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1, 0.6, 1] + scaleAnimation.duration = duration + + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = scaleAnimation.keyTimes + rotateAnimation.timingFunctions = [timingFunction, timingFunction] + if !reverse { + rotateAnimation.values = [0, Double.pi, 2 * Double.pi] + } else { + rotateAnimation.values = [0, -Double.pi, -2 * Double.pi] + } + rotateAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, rotateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + return animation + } + + func circleOf(shape: NVActivityIndicatorShape, duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGFloat, color: UIColor, reverse: Bool) { + let circle = shape.layerWith(size: CGSize(width: size, height: size), color: color) + let frame = CGRect(x: (layer.bounds.size.width - size) / 2, + y: (layer.bounds.size.height - size) / 2, + width: size, + height: size) + let animation = createAnimationIn(duration: duration, timingFunction: timingFunction, reverse: reverse) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift new file mode 100644 index 0000000..06b3ed7 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift @@ -0,0 +1,99 @@ +// +// NVActivityIndicatorAnimationBallClipRotatePulse.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallClipRotatePulse: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.09, 0.57, 0.49, 0.9) + + smallCircleWith(duration: duration, timingFunction: timingFunction, layer: layer, size: size, color: color) + bigCircleWith(duration: duration, timingFunction: timingFunction, layer: layer, size: size, color: color) + } + + func smallCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: UIColor) { + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.scale") + + animation.keyTimes = [0, 0.3, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.3, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circleSize = size.width / 2 + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: (layer.bounds.size.width - circleSize) / 2, + y: (layer.bounds.size.height - circleSize) / 2, + width: circleSize, + height: circleSize) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + + func bigCircleWith(duration: CFTimeInterval, timingFunction: CAMediaTimingFunction, layer: CALayer, size: CGSize, color: UIColor) { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1, 0.6, 1] + scaleAnimation.duration = duration + + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = scaleAnimation.keyTimes + rotateAnimation.timingFunctions = [timingFunction, timingFunction] + rotateAnimation.values = [0, Double.pi, 2 * Double.pi] + rotateAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, rotateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.ringTwoHalfVertical.layerWith(size: size, color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridBeat.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridBeat.swift new file mode 100644 index 0000000..66ece23 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridBeat.swift @@ -0,0 +1,68 @@ +// +// NVActivityIndicatorAnimationBallGridBeat.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallGridBeat: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - circleSpacing * 2) / 3 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let durations = [0.96, 0.93, 1.19, 1.13, 1.34, 0.94, 1.2, 0.82, 1.19] + let beginTime = CACurrentMediaTime() + let beginTimes = [0.36, 0.4, 0.68, 0.41, 0.71, -0.15, -0.12, 0.01, 0.32] + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "opacity") + + animation.keyTimes = [0, 0.5, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.7, 1] + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + for j in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(j) + circleSpacing * CGFloat(j), + y: y + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + width: circleSize, + height: circleSize) + + animation.duration = durations[3 * i + j] + animation.beginTime = beginTime + beginTimes[3 * i + j] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridPulse.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridPulse.swift new file mode 100644 index 0000000..67e99a3 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridPulse.swift @@ -0,0 +1,80 @@ +// +// NVActivityIndicatorAnimationBallGridPulse.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallGridPulse: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - circleSpacing * 2) / 3 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let durations: [CFTimeInterval] = [0.72, 1.02, 1.28, 1.42, 1.45, 1.18, 0.87, 1.45, 1.06] + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [ -0.06, 0.25, -0.17, 0.48, 0.31, 0.03, 0.46, 0.78, 0.45] + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1, 0.5, 1] + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimation.keyTimes = [0, 0.5, 1] + opacityAnimation.timingFunctions = [timingFunction, timingFunction] + opacityAnimation.values = [1, 0.7, 1] + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + for j in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(j) + circleSpacing * CGFloat(j), + y: y + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + width: circleSize, + height: circleSize) + + animation.duration = durations[3 * i + j] + animation.beginTime = beginTime + beginTimes[3 * i + j] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulse.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulse.swift new file mode 100644 index 0000000..706b122 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulse.swift @@ -0,0 +1,64 @@ +// +// NVActivityIndicatorAnimationBallPulse.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallPulse: NVActivityIndicatorAnimationDelegate { + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize: CGFloat = (size.width - 2 * circleSpacing) / 3 + let x: CGFloat = (layer.bounds.size.width - size.width) / 2 + let y: CGFloat = (layer.bounds.size.height - circleSize) / 2 + let duration: CFTimeInterval = 0.75 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0.12, 0.24, 0.36] + let timingFunction = CAMediaTimingFunction(controlPoints: 0.2, 0.68, 0.18, 1.08) + let animation = CAKeyframeAnimation(keyPath: "transform.scale") + + // Animation + animation.keyTimes = [0, 0.3, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.3, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + y: y, + width: circleSize, + height: circleSize) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift new file mode 100644 index 0000000..76edaf9 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift @@ -0,0 +1,114 @@ +// +// NVActivityIndicatorAnimationBallPulseRise.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallPulseRise: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - 4 * circleSpacing) / 5 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - circleSize) / 2 + let deltaY = size.height / 2 + let duration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.15, 0.46, 0.9, 0.6) + let oddAnimation = self.oddAnimation(duration: duration, deltaY: deltaY, timingFunction: timingFunction) + let evenAnimation = self.evenAnimation(duration: duration, deltaY: deltaY, timingFunction: timingFunction) + + // Draw circles + for i in 0 ..< 5 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + y: y, + width: circleSize, + height: circleSize) + + circle.frame = frame + if i % 2 == 0 { + circle.add(evenAnimation, forKey: "animation") + } else { + circle.add(oddAnimation, forKey: "animation") + } + layer.addSublayer(circle) + } + } + + func oddAnimation(duration: CFTimeInterval, deltaY: CGFloat, timingFunction: CAMediaTimingFunction) -> CAAnimation { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [0.4, 1.1, 0.75] + scaleAnimation.duration = duration + + // Translate animation + let translateAnimation = CAKeyframeAnimation(keyPath: "transform.translation.y") + + translateAnimation.keyTimes = [0, 0.25, 0.75, 1] + translateAnimation.timingFunctions = [timingFunction, timingFunction, timingFunction] + translateAnimation.values = [0, deltaY, -deltaY, 0] + translateAnimation.duration = duration + + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, translateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + return animation + } + + func evenAnimation(duration: CFTimeInterval, deltaY: CGFloat, timingFunction: CAMediaTimingFunction) -> CAAnimation { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1.1, 0.4, 1] + scaleAnimation.duration = duration + + // Translate animation + let translateAnimation = CAKeyframeAnimation(keyPath: "transform.translation.y") + + translateAnimation.keyTimes = [0, 0.25, 0.75, 1] + translateAnimation.timingFunctions = [timingFunction, timingFunction, timingFunction] + translateAnimation.values = [0, -deltaY, deltaY, 0] + translateAnimation.duration = duration + + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, translateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + return animation + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift new file mode 100644 index 0000000..b2b49a4 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift @@ -0,0 +1,67 @@ +// +// NVActivityIndicatorAnimationBallPulseSync.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallPulseSync: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = 2 + let circleSize = (size.width - circleSpacing * 2) / 3 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - circleSize) / 2 + let deltaY = (size.height / 2 - circleSize / 2) / 2 + let duration: CFTimeInterval = 0.6 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0.07, 0.14, 0.21] + let timingFunciton = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.translation.y") + + animation.keyTimes = [0, 0.33, 0.66, 1] + animation.timingFunctions = [timingFunciton, timingFunciton, timingFunciton] + animation.values = [0, deltaY, -deltaY, 0] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect(x: x + circleSize * CGFloat(i) + circleSpacing * CGFloat(i), + y: y, + width: circleSize, + height: circleSize) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift new file mode 100644 index 0000000..e366e8a --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift @@ -0,0 +1,82 @@ +// +// NVActivityIndicatorAnimationBallRotate.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallRotate: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSize: CGFloat = size.width / 5 + let duration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.7, -0.13, 0.22, 0.86) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction] + scaleAnimation.values = [1, 0.6, 1] + scaleAnimation.duration = duration + + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = [0, 0.5, 1] + rotateAnimation.timingFunctions = [timingFunction, timingFunction] + rotateAnimation.values = [0, Double.pi, 2 * Double.pi] + rotateAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, rotateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + let leftCircle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let rightCircle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let centerCircle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + + leftCircle.opacity = 0.8 + leftCircle.frame = CGRect(x: 0, y: (size.height - circleSize) / 2, width: circleSize, height: circleSize) + rightCircle.opacity = 0.8 + rightCircle.frame = CGRect(x: size.width - circleSize, y: (size.height - circleSize) / 2, width: circleSize, height: circleSize) + centerCircle.frame = CGRect(x: (size.width - circleSize) / 2, y: (size.height - circleSize) / 2, width: circleSize, height: circleSize) + + let circle = CALayer() + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, y: (layer.bounds.size.height - size.height) / 2, width: size.width, height: size.height) + + circle.frame = frame + circle.addSublayer(leftCircle) + circle.addSublayer(rightCircle) + circle.addSublayer(centerCircle) + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotateChase.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotateChase.swift new file mode 100644 index 0000000..4d4df6a --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotateChase.swift @@ -0,0 +1,76 @@ +// +// NVActivityIndicatorAnimationBallRotateChase.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallRotateChase: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSize = size.width / 5 + + // Draw circles + for i in 0 ..< 5 { + let factor = Float(i) * 1 / 5 + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let animation = rotateAnimation(factor, x: layer.bounds.size.width / 2, y: layer.bounds.size.height / 2, size: CGSize(width: size.width - circleSize, height: size.height - circleSize)) + + circle.frame = CGRect(x: 0, y: 0, width: circleSize, height: circleSize) + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } + + func rotateAnimation(_ rate: Float, x: CGFloat, y: CGFloat, size: CGSize) -> CAAnimationGroup { + let duration: CFTimeInterval = 1.5 + let fromScale = 1 - rate + let toScale = 0.2 + rate + let timeFunc = CAMediaTimingFunction(controlPoints: 0.5, 0.15 + rate, 0.25, 1) + + // Scale animation + let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") + scaleAnimation.duration = duration + scaleAnimation.repeatCount = HUGE + scaleAnimation.fromValue = fromScale + scaleAnimation.toValue = toScale + + // Position animation + let positionAnimation = CAKeyframeAnimation(keyPath: "position") + positionAnimation.duration = duration + positionAnimation.repeatCount = HUGE + positionAnimation.path = UIBezierPath(arcCenter: CGPoint(x: x, y: y), radius: size.width / 2, startAngle: CGFloat(3 * Double.pi * 0.5), endAngle: CGFloat(3 * Double.pi * 0.5 + 2 * Double.pi), clockwise: true).cgPath + + // Aniamtion + let animation = CAAnimationGroup() + animation.animations = [scaleAnimation, positionAnimation] + animation.timingFunction = timeFunc + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + return animation + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift new file mode 100644 index 0000000..5c78617 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift @@ -0,0 +1,68 @@ +// +// NVActivityIndicatorAnimationBallScale.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallScale: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 1 + + // Scale animation + let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") + + scaleAnimation.duration = duration + scaleAnimation.fromValue = 0 + scaleAnimation.toValue = 1 + + // Opacity animation + let opacityAnimation = CABasicAnimation(keyPath: "opacity") + + opacityAnimation.duration = duration + opacityAnimation.fromValue = 1 + opacityAnimation.toValue = 0 + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color) + + circle.frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift new file mode 100644 index 0000000..5ad1a8b --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift @@ -0,0 +1,75 @@ +// +// NVActivityIndicatorAnimationBallScaleMultiple.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallScaleMultiple: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 1 + let beginTime = CACurrentMediaTime() + let beginTimes = [0, 0.2, 0.4] + + // Scale animation + let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") + + scaleAnimation.duration = duration + scaleAnimation.fromValue = 0 + scaleAnimation.toValue = 1 + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimation.duration = duration + opacityAnimation.keyTimes = [0, 0.05, 1] + opacityAnimation.values = [0, 1, 0] + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw balls + for i in 0 ..< 3 { + let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.opacity = 0 + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift new file mode 100644 index 0000000..75ecdae --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift @@ -0,0 +1,71 @@ +// +// NVActivityIndicatorAnimationBallScaleRipple.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallScaleRipple: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 1 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.21, 0.53, 0.56, 0.8) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.7] + scaleAnimation.timingFunction = timingFunction + scaleAnimation.values = [0.1, 1] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimation.keyTimes = [0, 0.7, 1] + opacityAnimation.timingFunctions = [timingFunction, timingFunction] + opacityAnimation.values = [1, 0.7, 0] + opacityAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.ring.layerWith(size: size, color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift new file mode 100644 index 0000000..86487bd --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift @@ -0,0 +1,76 @@ +// +// NVActivityIndicatorAnimationBallScaleRippleMultiple.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallScaleRippleMultiple: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 1.25 + let beginTime = CACurrentMediaTime() + let beginTimes = [0, 0.2, 0.4] + let timingFunction = CAMediaTimingFunction(controlPoints: 0.21, 0.53, 0.56, 0.8) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.7] + scaleAnimation.timingFunction = timingFunction + scaleAnimation.values = [0, 1] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimation.keyTimes = [0, 0.7, 1] + opacityAnimation.timingFunctions = [timingFunction, timingFunction] + opacityAnimation.values = [1, 0.7, 0] + opacityAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 3 { + let circle = NVActivityIndicatorShape.ring.layerWith(size: size, color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift new file mode 100644 index 0000000..c368d44 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift @@ -0,0 +1,91 @@ +// +// NVActivityIndicatorAnimationBallSpinFadeLoader.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallSpinFadeLoader: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSpacing: CGFloat = -2 + let circleSize = (size.width - 4 * circleSpacing) / 5 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 1 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0, 0.12, 0.24, 0.36, 0.48, 0.6, 0.72, 0.84] + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.5, 1] + scaleAnimation.values = [1, 0.4, 1] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimaton = CAKeyframeAnimation(keyPath: "opacity") + + opacityAnimaton.keyTimes = [0, 0.5, 1] + opacityAnimaton.values = [1, 0.3, 1] + opacityAnimaton.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimaton] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + for i in 0 ..< 8 { + let circle = circleAt(angle: CGFloat(Double.pi / 4) * CGFloat(i), + size: circleSize, + origin: CGPoint(x: x, y: y), + containerSize: size, + color: color) + + animation.beginTime = beginTime + beginTimes[i] + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + } + + func circleAt(angle: CGFloat, size: CGFloat, origin: CGPoint, containerSize: CGSize, color: UIColor) -> CALayer { + let radius = containerSize.width / 2 - size / 2 + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: size, height: size), color: color) + let frame = CGRect( + x: origin.x + radius * (cos(angle) + 1), + y: origin.y + radius * (sin(angle) + 1), + width: size, + height: size) + + circle.frame = frame + + return circle + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift new file mode 100644 index 0000000..f9ee7f4 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift @@ -0,0 +1,102 @@ +// +// NVActivityIndicatorAnimationBallTrianglePath.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallTrianglePath: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSize = size.width / 5 + let deltaX = size.width / 2 - circleSize / 2 + let deltaY = size.height / 2 - circleSize / 2 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 2 + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform") + + animation.keyTimes = [0, 0.33, 0.66, 1] + animation.timingFunctions = [timingFunction, timingFunction, timingFunction] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Top-center circle + let topCenterCircle = NVActivityIndicatorShape.ring.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + + changeAnimation(animation, values: ["{0,0}", "{hx,fy}", "{-hx,fy}", "{0,0}"], deltaX: deltaX, deltaY: deltaY) + topCenterCircle.frame = CGRect(x: x + size.width / 2 - circleSize / 2, y: y, width: circleSize, height: circleSize) + topCenterCircle.add(animation, forKey: "animation") + layer.addSublayer(topCenterCircle) + + // Bottom-left circle + let bottomLeftCircle = NVActivityIndicatorShape.ring.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + + changeAnimation(animation, values: ["{0,0}", "{hx,-fy}", "{fx,0}", "{0,0}"], deltaX: deltaX, deltaY: deltaY) + bottomLeftCircle.frame = CGRect(x: x, y: y + size.height - circleSize, width: circleSize, height: circleSize) + bottomLeftCircle.add(animation, forKey: "animation") + layer.addSublayer(bottomLeftCircle) + + // Bottom-right circle + let bottomRightCircle = NVActivityIndicatorShape.ring.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + + changeAnimation(animation, values: ["{0,0}", "{-fx,0}", "{-hx,-fy}", "{0,0}"], deltaX: deltaX, deltaY: deltaY) + bottomRightCircle.frame = CGRect(x: x + size.width - circleSize, y: y + size.height - circleSize, width: circleSize, height: circleSize) + bottomRightCircle.add(animation, forKey: "animation") + layer.addSublayer(bottomRightCircle) + } + + func changeAnimation(_ animation: CAKeyframeAnimation, values rawValues: [String], deltaX: CGFloat, deltaY: CGFloat) { + let values = NSMutableArray(capacity: 5) + + for rawValue in rawValues { + let point = CGPointFromString(translateString(rawValue, deltaX: deltaX, deltaY: deltaY)) + + values.add(NSValue(caTransform3D: CATransform3DMakeTranslation(point.x, point.y, 0))) + } + animation.values = values as [AnyObject] + } + + func translateString(_ valueString: String, deltaX: CGFloat, deltaY: CGFloat) -> String { + let valueMutableString = NSMutableString(string: valueString) + let fullDeltaX = 2 * deltaX + let fullDeltaY = 2 * deltaY + var range = NSMakeRange(0, valueMutableString.length) + + valueMutableString.replaceOccurrences(of: "hx", with: "\(deltaX)", options: NSString.CompareOptions.caseInsensitive, range: range) + range.length = valueMutableString.length + valueMutableString.replaceOccurrences(of: "fx", with: "\(fullDeltaX)", options: NSString.CompareOptions.caseInsensitive, range: range) + range.length = valueMutableString.length + valueMutableString.replaceOccurrences(of: "hy", with: "\(deltaY)", options: NSString.CompareOptions.caseInsensitive, range: range) + range.length = valueMutableString.length + valueMutableString.replaceOccurrences(of: "fy", with: "\(fullDeltaY)", options: NSString.CompareOptions.caseInsensitive, range: range) + + return valueMutableString as String + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift new file mode 100644 index 0000000..ae3560a --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift @@ -0,0 +1,78 @@ +// +// NVActivityIndicatorAnimationBallZigZag.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit +import QuartzCore + +class NVActivityIndicatorAnimationBallZigZag: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSize: CGFloat = size.width / 5 + let duration: CFTimeInterval = 0.7 + let deltaX = size.width / 2 - circleSize / 2 + let deltaY = size.height / 2 - circleSize / 2 + let frame = CGRect(x: (layer.bounds.size.width - circleSize) / 2, y: (layer.bounds.size.height - circleSize) / 2, width: circleSize, height: circleSize) + + // Circle 1 animation + let animation = CAKeyframeAnimation(keyPath: "transform") + + animation.keyTimes = [0, 0.33, 0.66, 1] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + + animation.values = [ + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(-deltaX, -deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(deltaX, -deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + ] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle 1 + circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation) + + // Circle 2 animation + animation.values = [ + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(deltaX, deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(-deltaX, deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + ] + + // Draw circle 2 + circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation) + } + + func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: UIColor, animation: CAAnimation) { + let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift new file mode 100644 index 0000000..6dc4f50 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift @@ -0,0 +1,78 @@ +// +// NVActivityIndicatorAnimationBallZigZagDeflect.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBallZigZagDeflect: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let circleSize: CGFloat = size.width / 5 + let duration: CFTimeInterval = 0.75 + let deltaX = size.width / 2 - circleSize / 2 + let deltaY = size.height / 2 - circleSize / 2 + let frame = CGRect(x: (layer.bounds.size.width - circleSize) / 2, y: (layer.bounds.size.height - circleSize) / 2, width: circleSize, height: circleSize) + + // Circle 1 animation + let animation = CAKeyframeAnimation(keyPath: "transform") + + animation.keyTimes = [0, 0.33, 0.66, 1] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + + animation.values = [ + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(-deltaX, -deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(deltaX, -deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + ] + animation.duration = duration + animation.repeatCount = HUGE + animation.autoreverses = true + animation.isRemovedOnCompletion = false + + // Draw circle 1 + circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation) + + // Circle 2 animation + animation.values = [ + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(deltaX, deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(-deltaX, deltaY, 0)), + NSValue(caTransform3D: CATransform3DMakeTranslation(0, 0, 0)), + ] + + // Draw circle 2 + circleAt(frame: frame, layer: layer, size: CGSize(width: circleSize, height: circleSize), color: color, animation: animation) + } + + func circleAt(frame: CGRect, layer: CALayer, size: CGSize, color: UIColor, animation: CAAnimation) { + let circle = NVActivityIndicatorShape.circle.layerWith(size: size, color: color) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBlank.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBlank.swift new file mode 100644 index 0000000..823eeda --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBlank.swift @@ -0,0 +1,35 @@ +// +// NVActivityIndicatorAnimationBlank.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationBlank: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in _: CALayer, size _: CGSize, color _: UIColor) { + // Do nothing + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift new file mode 100644 index 0000000..109df38 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift @@ -0,0 +1,73 @@ +// +// NVActivityIndicatorAnimationCircleStrokeSpin.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import Foundation + +class NVActivityIndicatorAnimationCircleStrokeSpin: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let beginTime: Double = 0.5 + let strokeStartDuration: Double = 1.2 + let strokeEndDuration: Double = 0.7 + + let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation") + rotationAnimation.byValue = Float.pi * 2 + rotationAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + + let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd") + strokeEndAnimation.duration = strokeEndDuration + strokeEndAnimation.timingFunction = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.2, 1.0) + strokeEndAnimation.fromValue = 0 + strokeEndAnimation.toValue = 1 + + let strokeStartAnimation = CABasicAnimation(keyPath: "strokeStart") + strokeStartAnimation.duration = strokeStartDuration + strokeStartAnimation.timingFunction = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.2, 1.0) + strokeStartAnimation.fromValue = 0 + strokeStartAnimation.toValue = 1 + strokeStartAnimation.beginTime = beginTime + + let groupAnimation = CAAnimationGroup() + groupAnimation.animations = [rotationAnimation, strokeEndAnimation, strokeStartAnimation] + groupAnimation.duration = strokeStartDuration + beginTime + groupAnimation.repeatCount = .infinity + groupAnimation.isRemovedOnCompletion = false + groupAnimation.fillMode = kCAFillModeForwards + + let circle = NVActivityIndicatorShape.stroke.layerWith(size: size, color: color) + let frame = CGRect( + x: (layer.bounds.width - size.width) / 2, + y: (layer.bounds.height - size.height) / 2, + width: size.width, + height: size.height + ) + + circle.frame = frame + circle.add(groupAnimation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift new file mode 100644 index 0000000..2ab8e18 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift @@ -0,0 +1,92 @@ +// +// NVActivityIndicatorAnimationCubeTransition.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationCubeTransition: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let squareSize = size.width / 5 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let deltaX = size.width - squareSize + let deltaY = size.height - squareSize + let duration: CFTimeInterval = 1.6 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0, -0.8] + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.25, 0.5, 0.75, 1] + scaleAnimation.timingFunctions = [timingFunction, timingFunction, timingFunction, timingFunction] + scaleAnimation.values = [1, 0.5, 1, 0.5, 1] + scaleAnimation.duration = duration + + // Translate animation + let translateAnimation = CAKeyframeAnimation(keyPath: "transform.translation") + + translateAnimation.keyTimes = scaleAnimation.keyTimes + translateAnimation.timingFunctions = scaleAnimation.timingFunctions + translateAnimation.values = [ + NSValue(cgSize: CGSize(width: 0, height: 0)), + NSValue(cgSize: CGSize(width: deltaX, height: 0)), + NSValue(cgSize: CGSize(width: deltaX, height: deltaY)), + NSValue(cgSize: CGSize(width: 0, height: deltaY)), + NSValue(cgSize: CGSize(width: 0, height: 0)), + ] + translateAnimation.duration = duration + + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + rotateAnimation.keyTimes = scaleAnimation.keyTimes + rotateAnimation.timingFunctions = scaleAnimation.timingFunctions + rotateAnimation.values = [0, -Double.pi / 2, -Double.pi, -1.5 * Double.pi, -2 * Double.pi] + rotateAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, translateAnimation, rotateAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw squares + for i in 0 ..< 2 { + let square = NVActivityIndicatorShape.rectangle.layerWith(size: CGSize(width: squareSize, height: squareSize), color: color) + let frame = CGRect(x: x, y: y, width: squareSize, height: squareSize) + + animation.beginTime = beginTime + beginTimes[i] + square.frame = frame + square.add(animation, forKey: "animation") + layer.addSublayer(square) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift new file mode 100644 index 0000000..7164534 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift @@ -0,0 +1,62 @@ +// +// NVActivityIndicatorAnimationBarScale.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationLineScale: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSize = size.width / 9 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 1 + let beginTime = CACurrentMediaTime() + let beginTimes = [0.1, 0.2, 0.3, 0.4, 0.5] + let timingFunction = CAMediaTimingFunction(controlPoints: 0.2, 0.68, 0.18, 1.08) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.scale.y") + + animation.keyTimes = [0, 0.5, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.4, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw lines + for i in 0 ..< 5 { + let line = NVActivityIndicatorShape.line.layerWith(size: CGSize(width: lineSize, height: size.height), color: color) + let frame = CGRect(x: x + lineSize * 2 * CGFloat(i), y: y, width: lineSize, height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + line.frame = frame + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScaleParty.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScaleParty.swift new file mode 100644 index 0000000..fc1834f --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScaleParty.swift @@ -0,0 +1,61 @@ +// +// NVActivityIndicatorAnimationLineScaleParty.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationLineScaleParty: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSize = size.width / 7 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let durations: [CFTimeInterval] = [1.26, 0.43, 1.01, 0.73] + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0.77, 0.29, 0.28, 0.74] + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.scale") + + animation.keyTimes = [0, 0.5, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.5, 1] + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + for i in 0 ..< 4 { + let line = NVActivityIndicatorShape.line.layerWith(size: CGSize(width: lineSize, height: size.height), color: color) + let frame = CGRect(x: x + lineSize * 2 * CGFloat(i), y: y, width: lineSize, height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + animation.duration = durations[i] + line.frame = frame + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift new file mode 100644 index 0000000..2ed3f34 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift @@ -0,0 +1,65 @@ +// +// NVActivityIndicatorAnimationLineScalePulseOut.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationLineScalePulseOut: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSize = size.width / 9 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 1 + let beginTime = CACurrentMediaTime() + let beginTimes = [0.4, 0.2, 0, 0.2, 0.4] + let timingFunction = CAMediaTimingFunction(controlPoints: 0.85, 0.25, 0.37, 0.85) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.scale.y") + + animation.keyTimes = [0, 0.5, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.4, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw lines + for i in 0 ..< 5 { + let line = NVActivityIndicatorShape.line.layerWith(size: CGSize(width: lineSize, height: size.height), color: color) + let frame = CGRect(x: x + lineSize * 2 * CGFloat(i), + y: y, + width: lineSize, + height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + line.frame = frame + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift new file mode 100644 index 0000000..c02a2a0 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift @@ -0,0 +1,66 @@ +// +// NVActivityIndicatorAnimationLineScalePulseOutRapid.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationLineScalePulseOutRapid: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSize = size.width / 9 + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 0.9 + let beginTime = CACurrentMediaTime() + let beginTimes = [0.5, 0.25, 0, 0.25, 0.5] + let timingFunction = CAMediaTimingFunction(controlPoints: 0.11, 0.49, 0.38, 0.78) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.scale.y") + + animation.keyTimes = [0, 0.8, 0.9] + animation.timingFunctions = [timingFunction, timingFunction] + animation.beginTime = beginTime + animation.values = [1, 0.3, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw lines + for i in 0 ..< 5 { + let line = NVActivityIndicatorShape.line.layerWith(size: CGSize(width: lineSize, height: size.height), color: color) + let frame = CGRect(x: x + lineSize * 2 * CGFloat(i), + y: y, + width: lineSize, + height: size.height) + + animation.beginTime = beginTime + beginTimes[i] + line.frame = frame + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift new file mode 100644 index 0000000..23db058 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift @@ -0,0 +1,89 @@ +// +// NVActivityIndicatorAnimationLineSpinFadeLoader.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationLineSpinFadeLoader: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let lineSpacing: CGFloat = 2 + let lineSize = CGSize(width: (size.width - 4 * lineSpacing) / 5, height: (size.height - 2 * lineSpacing) / 3) + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 1.2 + let beginTime = CACurrentMediaTime() + let beginTimes: [CFTimeInterval] = [0.12, 0.24, 0.36, 0.48, 0.6, 0.72, 0.84, 0.96] + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "opacity") + + animation.keyTimes = [0, 0.5, 1] + animation.timingFunctions = [timingFunction, timingFunction] + animation.values = [1, 0.3, 1] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw lines + for i in 0 ..< 8 { + let line = lineAt(angle: CGFloat(Double.pi / 4 * Double(i)), + size: lineSize, + origin: CGPoint(x: x, y: y), + containerSize: size, + color: color) + + animation.beginTime = beginTime + beginTimes[i] + line.add(animation, forKey: "animation") + layer.addSublayer(line) + } + } + + func lineAt(angle: CGFloat, size: CGSize, origin: CGPoint, containerSize: CGSize, color: UIColor) -> CALayer { + let radius = containerSize.width / 2 - max(size.width, size.height) / 2 + let lineContainerSize = CGSize(width: max(size.width, size.height), height: max(size.width, size.height)) + let lineContainer = CALayer() + let lineContainerFrame = CGRect( + x: origin.x + radius * (cos(angle) + 1), + y: origin.y + radius * (sin(angle) + 1), + width: lineContainerSize.width, + height: lineContainerSize.height) + let line = NVActivityIndicatorShape.line.layerWith(size: size, color: color) + let lineFrame = CGRect( + x: (lineContainerSize.width - size.width) / 2, + y: (lineContainerSize.height - size.height) / 2, + width: size.width, + height: size.height) + + lineContainer.frame = lineContainerFrame + line.frame = lineFrame + lineContainer.addSublayer(line) + lineContainer.sublayerTransform = CATransform3DMakeRotation(CGFloat(Double.pi / 2) + angle, 0, 0, 1) + + return lineContainer + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift new file mode 100644 index 0000000..524bafe --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift @@ -0,0 +1,172 @@ +// +// NVActivityIndicatorAnimationOrbit.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationOrbit: NVActivityIndicatorAnimationDelegate { + let duration: CFTimeInterval = 1.9 + let satelliteCoreRatio: CGFloat = 0.25 + let distanceRatio: CGFloat = 1.5 // distance / core size + + var coreSize: CGFloat = 0 + var satelliteSize: CGFloat = 0 + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + coreSize = size.width / (1 + satelliteCoreRatio + distanceRatio) + satelliteSize = coreSize * satelliteCoreRatio + + ring1InLayer(layer, size: size, color: color) + ring2InLayer(layer, size: size, color: color) + coreInLayer(layer, size: size, color: color) + satelliteInLayer(layer, size: size, color: color) + } + + func ring1InLayer(_ layer: CALayer, size _: CGSize, color: UIColor) { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.45, 0.45, 1] + scaleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + scaleAnimation.values = [0, 0, 1.3, 2] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + let timingFunction = CAMediaTimingFunction(controlPoints: 0.19, 1, 0.22, 1) + + opacityAnimation.keyTimes = [0, 0.45, 1] + scaleAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear), timingFunction] + opacityAnimation.values = [0.8, 0.8, 0] + opacityAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color) + let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2, + y: (layer.bounds.size.height - coreSize) / 2, + width: coreSize, + height: coreSize) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + + func ring2InLayer(_ layer: CALayer, size _: CGSize, color: UIColor) { + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.55, 0.55, 1] + scaleAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + scaleAnimation.values = [0, 0, 1.3, 2.1] + scaleAnimation.duration = duration + + // Opacity animation + let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") + let timingFunction = CAMediaTimingFunction(controlPoints: 0.19, 1, 0.22, 1) + + opacityAnimation.keyTimes = [0, 0.55, 0.65, 1] + scaleAnimation.timingFunctions = [CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear), timingFunction] + opacityAnimation.values = [0.7, 0.7, 0, 0] + opacityAnimation.duration = duration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [scaleAnimation, opacityAnimation] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color) + let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2, + y: (layer.bounds.size.height - coreSize) / 2, + width: coreSize, + height: coreSize) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } + + func coreInLayer(_ layer: CALayer, size _: CGSize, color: UIColor) { + let inTimingFunction = CAMediaTimingFunction(controlPoints: 0.7, 0, 1, 0.5) + let outTimingFunction = CAMediaTimingFunction(controlPoints: 0, 0.7, 0.5, 1) + let standByTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + + // Scale animation + let scaleAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + + scaleAnimation.keyTimes = [0, 0.45, 0.55, 1] + scaleAnimation.timingFunctions = [inTimingFunction, standByTimingFunction, outTimingFunction] + scaleAnimation.values = [1, 1.3, 1.3, 1] + scaleAnimation.duration = duration + scaleAnimation.repeatCount = HUGE + scaleAnimation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: coreSize, height: coreSize), color: color) + let frame = CGRect(x: (layer.bounds.size.width - coreSize) / 2, + y: (layer.bounds.size.height - coreSize) / 2, + width: coreSize, + height: coreSize) + + circle.frame = frame + circle.add(scaleAnimation, forKey: "animation") + layer.addSublayer(circle) + } + + func satelliteInLayer(_ layer: CALayer, size: CGSize, color: UIColor) { + // Rotate animation + let rotateAnimation = CAKeyframeAnimation(keyPath: "position") + + rotateAnimation.path = UIBezierPath(arcCenter: CGPoint(x: layer.bounds.midX, y: layer.bounds.midY), + radius: (size.width - satelliteSize) / 2, + startAngle: CGFloat(Double.pi * 1.5), + endAngle: CGFloat(Double.pi * 1.5 + 4 * Double.pi), + clockwise: true).cgPath + rotateAnimation.duration = duration * 2 + rotateAnimation.repeatCount = HUGE + rotateAnimation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: satelliteSize, height: satelliteSize), color: color) + let frame = CGRect(x: 0, y: 0, width: satelliteSize, height: satelliteSize) + + circle.frame = frame + circle.add(rotateAnimation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift new file mode 100644 index 0000000..f1d7c9a --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift @@ -0,0 +1,120 @@ +// +// NVActivityIndicatorAnimationPacman.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationPacman: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + circleInLayer(layer, size: size, color: color) + pacmanInLayer(layer, size: size, color: color) + } + + func pacmanInLayer(_ layer: CALayer, size: CGSize, color: UIColor) { + let pacmanSize = 2 * size.width / 3 + let pacmanDuration: CFTimeInterval = 0.5 + let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault) + + // Stroke start animation + let strokeStartAnimation = CAKeyframeAnimation(keyPath: "strokeStart") + + strokeStartAnimation.keyTimes = [0, 0.5, 1] + strokeStartAnimation.timingFunctions = [timingFunction, timingFunction] + strokeStartAnimation.values = [0.125, 0, 0.125] + strokeStartAnimation.duration = pacmanDuration + + // Stroke end animation + let strokeEndAnimation = CAKeyframeAnimation(keyPath: "strokeEnd") + + strokeEndAnimation.keyTimes = [0, 0.5, 1] + strokeEndAnimation.timingFunctions = [timingFunction, timingFunction] + strokeEndAnimation.values = [0.875, 1, 0.875] + strokeEndAnimation.duration = pacmanDuration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [strokeStartAnimation, strokeEndAnimation] + animation.duration = pacmanDuration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw pacman + let pacman = NVActivityIndicatorShape.pacman.layerWith(size: CGSize(width: pacmanSize, height: pacmanSize), color: color) + let frame = CGRect( + x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - pacmanSize) / 2, + width: pacmanSize, + height: pacmanSize + ) + + pacman.frame = frame + pacman.add(animation, forKey: "animation") + layer.addSublayer(pacman) + } + + func circleInLayer(_ layer: CALayer, size: CGSize, color: UIColor) { + let circleSize = size.width / 5 + let circleDuration: CFTimeInterval = 1 + + // Translate animation + let translateAnimation = CABasicAnimation(keyPath: "transform.translation.x") + + translateAnimation.fromValue = 0 + translateAnimation.toValue = -size.width / 2 + translateAnimation.duration = circleDuration + + // Opacity animation + let opacityAnimation = CABasicAnimation(keyPath: "opacity") + + opacityAnimation.fromValue = 1 + opacityAnimation.toValue = 0.7 + opacityAnimation.duration = circleDuration + + // Animation + let animation = CAAnimationGroup() + + animation.animations = [translateAnimation, opacityAnimation] + animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) + animation.duration = circleDuration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circles + let circle = NVActivityIndicatorShape.circle.layerWith(size: CGSize(width: circleSize, height: circleSize), color: color) + let frame = CGRect( + x: (layer.bounds.size.width - size.width) / 2 + size.width - circleSize, + y: (layer.bounds.size.height - circleSize) / 2, + width: circleSize, + height: circleSize + ) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift new file mode 100644 index 0000000..857d289 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift @@ -0,0 +1,57 @@ +// +// NVActivityIndicatorAnimationSemiCircleSpin.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationSemiCircleSpin: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 0.6 + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform.rotation.z") + + animation.keyTimes = [0, 0.5, 1] + animation.values = [0, Double.pi, 2 * Double.pi] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw circle + let circle = NVActivityIndicatorShape.circleSemi.layerWith(size: size, color: color) + let frame = CGRect( + x: (layer.bounds.width - size.width) / 2, + y: (layer.bounds.height - size.height) / 2, + width: size.width, + height: size.height + ) + + circle.frame = frame + circle.add(animation, forKey: "animation") + layer.addSublayer(circle) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSquareSpin.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSquareSpin.swift new file mode 100644 index 0000000..40f4422 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSquareSpin.swift @@ -0,0 +1,79 @@ +// +// NVActivityIndicatorAnimationSquareSpin.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationSquareSpin: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let duration: CFTimeInterval = 3 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.09, 0.57, 0.49, 0.9) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform") + + animation.keyTimes = [0, 0.25, 0.5, 0.75, 1] + animation.timingFunctions = [timingFunction, timingFunction, timingFunction, timingFunction] + animation.values = [ + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: 0))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: CGFloat(Double.pi)), createRotateYTransform(angle: 0))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: CGFloat(Double.pi)), createRotateYTransform(angle: CGFloat(Double.pi)))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: CGFloat(Double.pi)))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: 0))), + ] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw square + let square = NVActivityIndicatorShape.rectangle.layerWith(size: size, color: color) + let frame = CGRect(x: (layer.bounds.size.width - size.width) / 2, + y: (layer.bounds.size.height - size.height) / 2, + width: size.width, + height: size.height) + + square.frame = frame + square.add(animation, forKey: "animation") + layer.addSublayer(square) + } + + func createRotateXTransform(angle: CGFloat) -> CATransform3D { + var transform = CATransform3DMakeRotation(angle, 1, 0, 0) + + transform.m34 = CGFloat(-1) / 100 + + return transform + } + + func createRotateYTransform(angle: CGFloat) -> CATransform3D { + var transform = CATransform3DMakeRotation(angle, 0, 1, 0) + + transform.m34 = CGFloat(-1) / 100 + + return transform + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift new file mode 100644 index 0000000..4c81873 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift @@ -0,0 +1,77 @@ +// +// NVActivityIndicatorAnimationTriangleSkewSpin.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +class NVActivityIndicatorAnimationTriangleSkewSpin: NVActivityIndicatorAnimationDelegate { + + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) { + let x = (layer.bounds.size.width - size.width) / 2 + let y = (layer.bounds.size.height - size.height) / 2 + let duration: CFTimeInterval = 3 + let timingFunction = CAMediaTimingFunction(controlPoints: 0.09, 0.57, 0.49, 0.9) + + // Animation + let animation = CAKeyframeAnimation(keyPath: "transform") + + animation.keyTimes = [0, 0.25, 0.5, 0.75, 1] + animation.timingFunctions = [timingFunction, timingFunction, timingFunction, timingFunction] + animation.values = [ + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: 0))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: CGFloat(Double.pi)), createRotateYTransform(angle: 0))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: CGFloat(Double.pi)), createRotateYTransform(angle: CGFloat(Double.pi)))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: CGFloat(Double.pi)))), + NSValue(caTransform3D: CATransform3DConcat(createRotateXTransform(angle: 0), createRotateYTransform(angle: 0))), + ] + animation.duration = duration + animation.repeatCount = HUGE + animation.isRemovedOnCompletion = false + + // Draw triangle + let triangle = NVActivityIndicatorShape.triangle.layerWith(size: size, color: color) + + triangle.frame = CGRect(x: x, y: y, width: size.width, height: size.height) + triangle.add(animation, forKey: "animation") + layer.addSublayer(triangle) + } + + func createRotateXTransform(angle: CGFloat) -> CATransform3D { + var transform = CATransform3DMakeRotation(angle, 1, 0, 0) + + transform.m34 = CGFloat(-1) / 100 + + return transform + } + + func createRotateYTransform(angle: CGFloat) -> CATransform3D { + var transform = CATransform3DMakeRotation(angle, 0, 1, 0) + + transform.m34 = CGFloat(-1) / 100 + + return transform + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift new file mode 100644 index 0000000..159b838 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift @@ -0,0 +1,32 @@ +// +// NVActivityIndicatorDelegate.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +protocol NVActivityIndicatorAnimationDelegate { + func setUpAnimation(in layer: CALayer, size: CGSize, color: UIColor) +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorShape.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorShape.swift new file mode 100644 index 0000000..4d8a7c8 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorShape.swift @@ -0,0 +1,162 @@ +// +// NVActivityIndicatorShape.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +enum NVActivityIndicatorShape { + case circle + case circleSemi + case ring + case ringTwoHalfVertical + case ringTwoHalfHorizontal + case ringThirdFour + case rectangle + case triangle + case line + case pacman + case stroke + + func layerWith(size: CGSize, color: UIColor) -> CALayer { + let layer: CAShapeLayer = CAShapeLayer() + var path: UIBezierPath = UIBezierPath() + let lineWidth: CGFloat = 2 + + switch self { + case .circle: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: 0, + endAngle: CGFloat(2 * Double.pi), + clockwise: false) + layer.fillColor = color.cgColor + case .circleSemi: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-Double.pi / 6), + endAngle: CGFloat(-5 * Double.pi / 6), + clockwise: false) + path.close() + layer.fillColor = color.cgColor + case .ring: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: 0, + endAngle: CGFloat(2 * Double.pi), + clockwise: false) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = lineWidth + case .ringTwoHalfVertical: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-3 * Double.pi / 4), + endAngle: CGFloat(-Double.pi / 4), + clockwise: true) + path.move( + to: CGPoint(x: size.width / 2 - size.width / 2 * cos(CGFloat(Double.pi / 4)), + y: size.height / 2 + size.height / 2 * sin(CGFloat(Double.pi / 4))) + ) + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-5 * Double.pi / 4), + endAngle: CGFloat(-7 * Double.pi / 4), + clockwise: false) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = lineWidth + case .ringTwoHalfHorizontal: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(3 * Double.pi / 4), + endAngle: CGFloat(5 * Double.pi / 4), + clockwise: true) + path.move( + to: CGPoint(x: size.width / 2 + size.width / 2 * cos(CGFloat(Double.pi / 4)), + y: size.height / 2 - size.height / 2 * sin(CGFloat(Double.pi / 4))) + ) + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-Double.pi / 4), + endAngle: CGFloat(Double.pi / 4), + clockwise: true) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = lineWidth + case .ringThirdFour: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: CGFloat(-3 * Double.pi / 4), + endAngle: CGFloat(-Double.pi / 4), + clockwise: false) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = 2 + case .rectangle: + path.move(to: CGPoint(x: 0, y: 0)) + path.addLine(to: CGPoint(x: size.width, y: 0)) + path.addLine(to: CGPoint(x: size.width, y: size.height)) + path.addLine(to: CGPoint(x: 0, y: size.height)) + layer.fillColor = color.cgColor + case .triangle: + let offsetY = size.height / 4 + + path.move(to: CGPoint(x: 0, y: size.height - offsetY)) + path.addLine(to: CGPoint(x: size.width / 2, y: size.height / 2 - offsetY)) + path.addLine(to: CGPoint(x: size.width, y: size.height - offsetY)) + path.close() + layer.fillColor = color.cgColor + case .line: + path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: size.width, height: size.height), + cornerRadius: size.width / 2) + layer.fillColor = color.cgColor + case .pacman: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 4, + startAngle: 0, + endAngle: CGFloat(2 * Double.pi), + clockwise: true) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = size.width / 2 + case .stroke: + path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2), + radius: size.width / 2, + startAngle: -(.pi / 2), + endAngle: .pi + .pi / 2, + clockwise: true) + layer.fillColor = nil + layer.strokeColor = color.cgColor + layer.lineWidth = 2 + } + + layer.backgroundColor = nil + layer.path = path.cgPath + layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height) + + return layer + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift new file mode 100644 index 0000000..d9f8989 --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift @@ -0,0 +1,510 @@ +// +// NVActivityIndicatorView.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +/** + Enum of animation types used for activity indicator view. + + - Blank: Blank animation. + - BallPulse: BallPulse animation. + - BallGridPulse: BallGridPulse animation. + - BallClipRotate: BallClipRotate animation. + - SquareSpin: SquareSpin animation. + - BallClipRotatePulse: BallClipRotatePulse animation. + - BallClipRotateMultiple: BallClipRotateMultiple animation. + - BallPulseRise: BallPulseRise animation. + - BallRotate: BallRotate animation. + - CubeTransition: CubeTransition animation. + - BallZigZag: BallZigZag animation. + - BallZigZagDeflect: BallZigZagDeflect animation. + - BallTrianglePath: BallTrianglePath animation. + - BallScale: BallScale animation. + - LineScale: LineScale animation. + - LineScaleParty: LineScaleParty animation. + - BallScaleMultiple: BallScaleMultiple animation. + - BallPulseSync: BallPulseSync animation. + - BallBeat: BallBeat animation. + - LineScalePulseOut: LineScalePulseOut animation. + - LineScalePulseOutRapid: LineScalePulseOutRapid animation. + - BallScaleRipple: BallScaleRipple animation. + - BallScaleRippleMultiple: BallScaleRippleMultiple animation. + - BallSpinFadeLoader: BallSpinFadeLoader animation. + - LineSpinFadeLoader: LineSpinFadeLoader animation. + - TriangleSkewSpin: TriangleSkewSpin animation. + - Pacman: Pacman animation. + - BallGridBeat: BallGridBeat animation. + - SemiCircleSpin: SemiCircleSpin animation. + - BallRotateChase: BallRotateChase animation. + - Orbit: Orbit animation. + - AudioEqualizer: AudioEqualizer animation. + - CircleStrokeSpin: CircleStrokeSpin animation. + */ +public enum NVActivityIndicatorType: Int { + /** + Blank. + + - returns: Instance of NVActivityIndicatorAnimationBlank. + */ + case blank + /** + BallPulse. + + - returns: Instance of NVActivityIndicatorAnimationBallPulse. + */ + case ballPulse + /** + BallGridPulse. + + - returns: Instance of NVActivityIndicatorAnimationBallGridPulse. + */ + case ballGridPulse + /** + BallClipRotate. + + - returns: Instance of NVActivityIndicatorAnimationBallClipRotate. + */ + case ballClipRotate + /** + SquareSpin. + + - returns: Instance of NVActivityIndicatorAnimationSquareSpin. + */ + case squareSpin + /** + BallClipRotatePulse. + + - returns: Instance of NVActivityIndicatorAnimationBallClipRotatePulse. + */ + case ballClipRotatePulse + /** + BallClipRotateMultiple. + + - returns: Instance of NVActivityIndicatorAnimationBallClipRotateMultiple. + */ + case ballClipRotateMultiple + /** + BallPulseRise. + + - returns: Instance of NVActivityIndicatorAnimationBallPulseRise. + */ + case ballPulseRise + /** + BallRotate. + + - returns: Instance of NVActivityIndicatorAnimationBallRotate. + */ + case ballRotate + /** + CubeTransition. + + - returns: Instance of NVActivityIndicatorAnimationCubeTransition. + */ + case cubeTransition + /** + BallZigZag. + + - returns: Instance of NVActivityIndicatorAnimationBallZigZag. + */ + case ballZigZag + /** + BallZigZagDeflect + + - returns: Instance of NVActivityIndicatorAnimationBallZigZagDeflect + */ + case ballZigZagDeflect + /** + BallTrianglePath. + + - returns: Instance of NVActivityIndicatorAnimationBallTrianglePath. + */ + case ballTrianglePath + /** + BallScale. + + - returns: Instance of NVActivityIndicatorAnimationBallScale. + */ + case ballScale + /** + LineScale. + + - returns: Instance of NVActivityIndicatorAnimationLineScale. + */ + case lineScale + /** + LineScaleParty. + + - returns: Instance of NVActivityIndicatorAnimationLineScaleParty. + */ + case lineScaleParty + /** + BallScaleMultiple. + + - returns: Instance of NVActivityIndicatorAnimationBallScaleMultiple. + */ + case ballScaleMultiple + /** + BallPulseSync. + + - returns: Instance of NVActivityIndicatorAnimationBallPulseSync. + */ + case ballPulseSync + /** + BallBeat. + + - returns: Instance of NVActivityIndicatorAnimationBallBeat. + */ + case ballBeat + /** + LineScalePulseOut. + + - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOut. + */ + case lineScalePulseOut + /** + LineScalePulseOutRapid. + + - returns: Instance of NVActivityIndicatorAnimationLineScalePulseOutRapid. + */ + case lineScalePulseOutRapid + /** + BallScaleRipple. + + - returns: Instance of NVActivityIndicatorAnimationBallScaleRipple. + */ + case ballScaleRipple + /** + BallScaleRippleMultiple. + + - returns: Instance of NVActivityIndicatorAnimationBallScaleRippleMultiple. + */ + case ballScaleRippleMultiple + /** + BallSpinFadeLoader. + + - returns: Instance of NVActivityIndicatorAnimationBallSpinFadeLoader. + */ + case ballSpinFadeLoader + /** + LineSpinFadeLoader. + + - returns: Instance of NVActivityIndicatorAnimationLineSpinFadeLoader. + */ + case lineSpinFadeLoader + /** + TriangleSkewSpin. + + - returns: Instance of NVActivityIndicatorAnimationTriangleSkewSpin. + */ + case triangleSkewSpin + /** + Pacman. + + - returns: Instance of NVActivityIndicatorAnimationPacman. + */ + case pacman + /** + BallGridBeat. + + - returns: Instance of NVActivityIndicatorAnimationBallGridBeat. + */ + case ballGridBeat + /** + SemiCircleSpin. + + - returns: Instance of NVActivityIndicatorAnimationSemiCircleSpin. + */ + case semiCircleSpin + /** + BallRotateChase. + + - returns: Instance of NVActivityIndicatorAnimationBallRotateChase. + */ + case ballRotateChase + /** + Orbit. + + - returns: Instance of NVActivityIndicatorAnimationOrbit. + */ + case orbit + /** + AudioEqualizer. + + - returns: Instance of NVActivityIndicatorAnimationAudioEqualizer. + */ + case audioEqualizer + /** + Stroke. + + - returns: Instance of NVActivityIndicatorAnimationCircleStrokeSpin. + */ + case circleStrokeSpin + + static let allTypes = (blank.rawValue ... circleStrokeSpin.rawValue).map { NVActivityIndicatorType(rawValue: $0)! } + + func animation() -> NVActivityIndicatorAnimationDelegate { + switch self { + case .blank: + return NVActivityIndicatorAnimationBlank() + case .ballPulse: + return NVActivityIndicatorAnimationBallPulse() + case .ballGridPulse: + return NVActivityIndicatorAnimationBallGridPulse() + case .ballClipRotate: + return NVActivityIndicatorAnimationBallClipRotate() + case .squareSpin: + return NVActivityIndicatorAnimationSquareSpin() + case .ballClipRotatePulse: + return NVActivityIndicatorAnimationBallClipRotatePulse() + case .ballClipRotateMultiple: + return NVActivityIndicatorAnimationBallClipRotateMultiple() + case .ballPulseRise: + return NVActivityIndicatorAnimationBallPulseRise() + case .ballRotate: + return NVActivityIndicatorAnimationBallRotate() + case .cubeTransition: + return NVActivityIndicatorAnimationCubeTransition() + case .ballZigZag: + return NVActivityIndicatorAnimationBallZigZag() + case .ballZigZagDeflect: + return NVActivityIndicatorAnimationBallZigZagDeflect() + case .ballTrianglePath: + return NVActivityIndicatorAnimationBallTrianglePath() + case .ballScale: + return NVActivityIndicatorAnimationBallScale() + case .lineScale: + return NVActivityIndicatorAnimationLineScale() + case .lineScaleParty: + return NVActivityIndicatorAnimationLineScaleParty() + case .ballScaleMultiple: + return NVActivityIndicatorAnimationBallScaleMultiple() + case .ballPulseSync: + return NVActivityIndicatorAnimationBallPulseSync() + case .ballBeat: + return NVActivityIndicatorAnimationBallBeat() + case .lineScalePulseOut: + return NVActivityIndicatorAnimationLineScalePulseOut() + case .lineScalePulseOutRapid: + return NVActivityIndicatorAnimationLineScalePulseOutRapid() + case .ballScaleRipple: + return NVActivityIndicatorAnimationBallScaleRipple() + case .ballScaleRippleMultiple: + return NVActivityIndicatorAnimationBallScaleRippleMultiple() + case .ballSpinFadeLoader: + return NVActivityIndicatorAnimationBallSpinFadeLoader() + case .lineSpinFadeLoader: + return NVActivityIndicatorAnimationLineSpinFadeLoader() + case .triangleSkewSpin: + return NVActivityIndicatorAnimationTriangleSkewSpin() + case .pacman: + return NVActivityIndicatorAnimationPacman() + case .ballGridBeat: + return NVActivityIndicatorAnimationBallGridBeat() + case .semiCircleSpin: + return NVActivityIndicatorAnimationSemiCircleSpin() + case .ballRotateChase: + return NVActivityIndicatorAnimationBallRotateChase() + case .orbit: + return NVActivityIndicatorAnimationOrbit() + case .audioEqualizer: + return NVActivityIndicatorAnimationAudioEqualizer() + case .circleStrokeSpin: + return NVActivityIndicatorAnimationCircleStrokeSpin() + } + } +} + +/// Activity indicator view with nice animations +public final class NVActivityIndicatorView: UIView { + /// Default type. Default value is .BallSpinFadeLoader. + public static var DEFAULT_TYPE: NVActivityIndicatorType = .ballSpinFadeLoader + + /// Default color of activity indicator. Default value is UIColor.white. + public static var DEFAULT_COLOR = UIColor.white + + /// Default color of text. Default value is UIColor.white. + public static var DEFAULT_TEXT_COLOR = UIColor.white + + /// Default padding. Default value is 0. + public static var DEFAULT_PADDING: CGFloat = 0 + + /// Default size of activity indicator view in UI blocker. Default value is 60x60. + public static var DEFAULT_BLOCKER_SIZE = CGSize(width: 60, height: 60) + + /// Default display time threshold to actually display UI blocker. Default value is 0 ms. + /// + /// - note: + /// Default time that has to be elapsed (between calls of `startAnimating()` and `stopAnimating()`) in order to actually display UI blocker. It should be set thinking about what the minimum duration of an activity is to be worth showing it to the user. If the activity ends before this time threshold, then it will not be displayed at all. + public static var DEFAULT_BLOCKER_DISPLAY_TIME_THRESHOLD = 0 + + /// Default minimum display time of UI blocker. Default value is 0 ms. + /// + /// - note: + /// Default minimum display time of UI blocker. Its main purpose is to avoid flashes showing and hiding it so fast. For instance, setting it to 200ms will force UI blocker to be shown for at least this time (regardless of calling `stopAnimating()` ealier). + public static var DEFAULT_BLOCKER_MINIMUM_DISPLAY_TIME = 0 + + /// Default message displayed in UI blocker. Default value is nil. + public static var DEFAULT_BLOCKER_MESSAGE: String? + + /// Default message spacing to activity indicator view in UI blocker. Default value is 8. + public static var DEFAULT_BLOCKER_MESSAGE_SPACING = CGFloat(8.0) + + /// Default font of message displayed in UI blocker. Default value is bold system font, size 20. + public static var DEFAULT_BLOCKER_MESSAGE_FONT = UIFont.boldSystemFont(ofSize: 20) + + /// Default background color of UI blocker. Default value is UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) + public static var DEFAULT_BLOCKER_BACKGROUND_COLOR = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) + + /// Animation type. + public var type: NVActivityIndicatorType = NVActivityIndicatorView.DEFAULT_TYPE + + @available(*, unavailable, message: "This property is reserved for Interface Builder. Use 'type' instead.") + @IBInspectable var typeName: String { + get { + return getTypeName() + } + set { + _setTypeName(newValue) + } + } + + /// Color of activity indicator view. + @IBInspectable public var color: UIColor = NVActivityIndicatorView.DEFAULT_COLOR + + /// Padding of activity indicator view. + @IBInspectable public var padding: CGFloat = NVActivityIndicatorView.DEFAULT_PADDING + + /// Current status of animation, read-only. + @available(*, deprecated: 3.1) + public var animating: Bool { return isAnimating } + + /// Current status of animation, read-only. + private(set) public var isAnimating: Bool = false + + /** + Returns an object initialized from data in a given unarchiver. + self, initialized using the data in decoder. + + - parameter decoder: an unarchiver object. + + - returns: self, initialized using the data in decoder. + */ + public required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + backgroundColor = UIColor.clear + isHidden = true + } + + /** + Create a activity indicator view. + + Appropriate NVActivityIndicatorView.DEFAULT_* values are used for omitted params. + + - parameter frame: view's frame. + - parameter type: animation type. + - parameter color: color of activity indicator view. + - parameter padding: padding of activity indicator view. + + - returns: The activity indicator view. + */ + public init(frame: CGRect, type: NVActivityIndicatorType? = nil, color: UIColor? = nil, padding: CGFloat? = nil) { + self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE + self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR + self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING + super.init(frame: frame) + isHidden = true + } + + // Fix issue #62 + // Intrinsic content size is used in autolayout + // that causes mislayout when using with MBProgressHUD. + /** + Returns the natural size for the receiving view, considering only properties of the view itself. + + A size indicating the natural size for the receiving view based on its intrinsic properties. + + - returns: A size indicating the natural size for the receiving view based on its intrinsic properties. + */ + public override var intrinsicContentSize: CGSize { + return CGSize(width: bounds.width, height: bounds.height) + } + + public override var bounds: CGRect { + didSet { + // setup the animation again for the new bounds + if oldValue != bounds && isAnimating { + setUpAnimation() + } + } + } + + /** + Start animating. + */ + public final func startAnimating() { + isHidden = false + isAnimating = true + layer.speed = 1 + setUpAnimation() + } + + /** + Stop animating. + */ + public final func stopAnimating() { + isHidden = true + isAnimating = false + layer.sublayers?.removeAll() + } + + // MARK: Internal + + func _setTypeName(_ typeName: String) { + for item in NVActivityIndicatorType.allTypes { + if String(describing: item).caseInsensitiveCompare(typeName) == ComparisonResult.orderedSame { + type = item + break + } + } + } + + func getTypeName() -> String { + return String(describing: type) + } + + // MARK: Privates + + private final func setUpAnimation() { + let animation: NVActivityIndicatorAnimationDelegate = type.animation() + var animationRect = UIEdgeInsetsInsetRect(frame, UIEdgeInsetsMake(padding, padding, padding, padding)) + let minEdge = min(animationRect.width, animationRect.height) + + layer.sublayers = nil + animationRect.size = CGSize(width: minEdge, height: minEdge) + animation.setUpAnimation(in: layer, size: animationRect.size, color: color) + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorPresenter.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorPresenter.swift new file mode 100644 index 0000000..4d3722e --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorPresenter.swift @@ -0,0 +1,266 @@ +// +// NVActivityIndicatorPresenter.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +/// Class packages information used to display UI blocker. +public final class ActivityData { + /// Size of activity indicator view. + let size: CGSize + + /// Message displayed under activity indicator view. + let message: String? + + /// Font of message displayed under activity indicator view. + let messageFont: UIFont + + /// Message spacing to activity indicator view. + let messageSpacing: CGFloat + + /// Animation type. + let type: NVActivityIndicatorType + + /// Color of activity indicator view. + let color: UIColor + + /// Color of text. + let textColor: UIColor + + /// Padding of activity indicator view. + let padding: CGFloat + + /// Display time threshold to actually display UI blocker. + let displayTimeThreshold: Int + + /// Minimum display time of UI blocker. + let minimumDisplayTime: Int + + /// Background color of the UI blocker + let backgroundColor: UIColor + + /** + Create information package used to display UI blocker. + + Appropriate NVActivityIndicatorView.DEFAULT_* values are used for omitted params. + + - parameter size: size of activity indicator view. + - parameter message: message displayed under activity indicator view. + - parameter messageFont: font of message displayed under activity indicator view. + - parameter messageSpacing: message spacing to activity indicator view. + - parameter type: animation type. + - parameter color: color of activity indicator view. + - parameter padding: padding of activity indicator view. + - parameter displayTimeThreshold: display time threshold to actually display UI blocker. + - parameter minimumDisplayTime: minimum display time of UI blocker. + - parameter textColor: color of the text below the activity indicator view. Will match color parameter if not set, otherwise DEFAULT_TEXT_COLOR if color is not set. + + - returns: The information package used to display UI blocker. + */ + public init(size: CGSize? = nil, + message: String? = nil, + messageFont: UIFont? = nil, + messageSpacing: CGFloat? = nil, + type: NVActivityIndicatorType? = nil, + color: UIColor? = nil, + padding: CGFloat? = nil, + displayTimeThreshold: Int? = nil, + minimumDisplayTime: Int? = nil, + backgroundColor: UIColor? = nil, + textColor: UIColor? = nil) { + self.size = size ?? NVActivityIndicatorView.DEFAULT_BLOCKER_SIZE + self.message = message ?? NVActivityIndicatorView.DEFAULT_BLOCKER_MESSAGE + self.messageFont = messageFont ?? NVActivityIndicatorView.DEFAULT_BLOCKER_MESSAGE_FONT + self.messageSpacing = messageSpacing ?? NVActivityIndicatorView.DEFAULT_BLOCKER_MESSAGE_SPACING + self.type = type ?? NVActivityIndicatorView.DEFAULT_TYPE + self.color = color ?? NVActivityIndicatorView.DEFAULT_COLOR + self.padding = padding ?? NVActivityIndicatorView.DEFAULT_PADDING + self.displayTimeThreshold = displayTimeThreshold ?? NVActivityIndicatorView.DEFAULT_BLOCKER_DISPLAY_TIME_THRESHOLD + self.minimumDisplayTime = minimumDisplayTime ?? NVActivityIndicatorView.DEFAULT_BLOCKER_MINIMUM_DISPLAY_TIME + self.backgroundColor = backgroundColor ?? NVActivityIndicatorView.DEFAULT_BLOCKER_BACKGROUND_COLOR + self.textColor = textColor ?? color ?? NVActivityIndicatorView.DEFAULT_TEXT_COLOR + } +} + +/// Presenter that displays NVActivityIndicatorView as UI blocker. +public final class NVActivityIndicatorPresenter { + private enum State { + case waitingToShow + case showed + case waitingToHide + case hidden + } + + private let restorationIdentifier = "NVActivityIndicatorViewContainer" + private let messageLabel: UILabel = { + let label = UILabel() + + label.textAlignment = .center + label.numberOfLines = 0 + label.translatesAutoresizingMaskIntoConstraints = false + + return label + }() + + private var state: State = .hidden + private let startAnimatingGroup = DispatchGroup() + + /// Shared instance of `NVActivityIndicatorPresenter`. + public static let sharedInstance = NVActivityIndicatorPresenter() + + private init() {} + + // MARK: - Public interface + + /** + Display UI blocker. + + - parameter data: Information package used to display UI blocker. + */ + public final func startAnimating(_ data: ActivityData) { + guard state == .hidden else { return } + + state = .waitingToShow + startAnimatingGroup.enter() + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(data.displayTimeThreshold)) { + guard self.state == .waitingToShow else { + self.startAnimatingGroup.leave() + + return + } + + self.show(with: data) + self.startAnimatingGroup.leave() + } + } + + /** + Remove UI blocker. + */ + public final func stopAnimating() { + _hide() + } + + /// Set message displayed under activity indicator view. + /// + /// - Parameter message: message displayed under activity indicator view. + public final func setMessage(_ message: String?) { + guard state == .showed else { + startAnimatingGroup.notify(queue: DispatchQueue.main) { + self.messageLabel.text = message + } + + return + } + + messageLabel.text = message + } + + // MARK: - Helpers + + private func show(with activityData: ActivityData) { + let containerView = UIView(frame: UIScreen.main.bounds) + + containerView.backgroundColor = activityData.backgroundColor + containerView.restorationIdentifier = restorationIdentifier + containerView.translatesAutoresizingMaskIntoConstraints = false + + let activityIndicatorView = NVActivityIndicatorView( + frame: CGRect(x: 0, y: 0, width: activityData.size.width, height: activityData.size.height), + type: activityData.type, + color: activityData.color, + padding: activityData.padding) + + activityIndicatorView.startAnimating() + activityIndicatorView.translatesAutoresizingMaskIntoConstraints = false + containerView.addSubview(activityIndicatorView) + + // Add constraints for `activityIndicatorView`. + ({ + let xConstraint = NSLayoutConstraint(item: containerView, attribute: .centerX, relatedBy: .equal, toItem: activityIndicatorView, attribute: .centerX, multiplier: 1, constant: 0) + let yConstraint = NSLayoutConstraint(item: containerView, attribute: .centerY, relatedBy: .equal, toItem: activityIndicatorView, attribute: .centerY, multiplier: 1, constant: 0) + + containerView.addConstraints([xConstraint, yConstraint]) + }()) + + messageLabel.font = activityData.messageFont + messageLabel.textColor = activityData.textColor + messageLabel.text = activityData.message + containerView.addSubview(messageLabel) + + // Add constraints for `messageLabel`. + ({ + let leadingConstraint = NSLayoutConstraint(item: containerView, attribute: .leading, relatedBy: .equal, toItem: messageLabel, attribute: .leading, multiplier: 1, constant: -8) + let trailingConstraint = NSLayoutConstraint(item: containerView, attribute: .trailing, relatedBy: .equal, toItem: messageLabel, attribute: .trailing, multiplier: 1, constant: 8) + + containerView.addConstraints([leadingConstraint, trailingConstraint]) + }()) + ({ + let spacingConstraint = NSLayoutConstraint(item: messageLabel, attribute: .top, relatedBy: .equal, toItem: activityIndicatorView, attribute: .bottom, multiplier: 1, constant: activityData.messageSpacing) + + containerView.addConstraint(spacingConstraint) + }()) + + guard let keyWindow = UIApplication.shared.keyWindow else { return } + + keyWindow.addSubview(containerView) + state = .showed + + // Add constraints for `containerView`. + ({ + let leadingConstraint = NSLayoutConstraint(item: keyWindow, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .leading, multiplier: 1, constant: 0) + let trailingConstraint = NSLayoutConstraint(item: keyWindow, attribute: .trailing, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: 1, constant: 0) + let topConstraint = NSLayoutConstraint(item: keyWindow, attribute: .top, relatedBy: .equal, toItem: containerView, attribute: .top, multiplier: 1, constant: 0) + let bottomConstraint = NSLayoutConstraint(item: keyWindow, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .bottom, multiplier: 1, constant: 0) + + keyWindow.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint]) + }()) + + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(activityData.minimumDisplayTime)) { + self._hide() + } + } + + private func _hide() { + if state == .waitingToHide { + hide() + } else if state == .waitingToShow { + state = .hidden + } else if state != .hidden { + state = .waitingToHide + } + } + + private func hide() { + guard let keyWindow = UIApplication.shared.keyWindow else { return } + + for item in keyWindow.subviews + where item.restorationIdentifier == restorationIdentifier { + item.removeFromSuperview() + } + state = .hidden + } +} diff --git a/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorViewable.swift b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorViewable.swift new file mode 100644 index 0000000..7f94f5e --- /dev/null +++ b/Pods/NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorViewable.swift @@ -0,0 +1,84 @@ +// +// NVActivityIndicatorViewable.swift +// NVActivityIndicatorView +// +// The MIT License (MIT) + +// Copyright (c) 2016 Vinh Nguyen + +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: + +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. + +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// + +import UIKit + +/** + * UIViewController conforms this protocol to be able to display NVActivityIndicatorView as UI blocker. + * + * This extends abilities of UIViewController to display and remove UI blocker. + */ +public protocol NVActivityIndicatorViewable {} + +public extension NVActivityIndicatorViewable where Self: UIViewController { + + /** + Display UI blocker. + + Appropriate NVActivityIndicatorView.DEFAULT_* values are used for omitted params. + + - parameter size: size of activity indicator view. + - parameter message: message displayed under activity indicator view. + - parameter messageFont: font of message displayed under activity indicator view. + - parameter type: animation type. + - parameter color: color of activity indicator view. + - parameter padding: padding of activity indicator view. + - parameter displayTimeThreshold: display time threshold to actually display UI blocker. + - parameter minimumDisplayTime: minimum display time of UI blocker. + */ + public func startAnimating( + _ size: CGSize? = nil, + message: String? = nil, + messageFont: UIFont? = nil, + type: NVActivityIndicatorType? = nil, + color: UIColor? = nil, + padding: CGFloat? = nil, + displayTimeThreshold: Int? = nil, + minimumDisplayTime: Int? = nil, + backgroundColor: UIColor? = nil, + textColor: UIColor? = nil) { + let activityData = ActivityData(size: size, + message: message, + messageFont: messageFont, + type: type, + color: color, + padding: padding, + displayTimeThreshold: displayTimeThreshold, + minimumDisplayTime: minimumDisplayTime, + backgroundColor: backgroundColor, + textColor: textColor) + + NVActivityIndicatorPresenter.sharedInstance.startAnimating(activityData) + } + + /** + Remove UI blocker. + */ + public func stopAnimating() { + NVActivityIndicatorPresenter.sharedInstance.stopAnimating() + } +} diff --git a/Pods/NVActivityIndicatorView/README.md b/Pods/NVActivityIndicatorView/README.md new file mode 100644 index 0000000..9916636 --- /dev/null +++ b/Pods/NVActivityIndicatorView/README.md @@ -0,0 +1,222 @@ +NVActivityIndicatorView +======================= + +[![Build Status](https://travis-ci.org/ninjaprox/NVActivityIndicatorView.svg?branch=master)](https://travis-ci.org/ninjaprox/NVActivityIndicatorView) +[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/NVActivityIndicatorView.svg)](https://img.shields.io/cocoapods/v/NVActivityIndicatorView.svg) +[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) + +## Introduction +`NVActivityIndicatorView` is a collection of awesome loading animations. + +This is original a fork from [DGActivityIndicatorView](https://github.com/gontovnik/DGActivityIndicatorView), inspired by [Loaders.css](https://github.com/ConnorAtherton/loaders.css), written in Swift with full implementation of animations, plus more. + +You can also find Objective-C version of this [here](https://github.com/ninjaprox/DGActivityIndicatorView). + +## Demo +![alt tag](https://raw.githubusercontent.com/ninjaprox/NVActivityIndicatorView/master/Demo.gif) + +For first-hand experience, just open the project and run it. + +## Animation types + +| Type | Type | Type | Type | +|---|---|---|---| +|1. ballPulse | 2. ballGridPulse | 3. ballClipRotate | 4. squareSpin| +|5. ballClipRotatePulse | 6. ballClipRotateMultiple | 7. ballPulseRise | 8. ballRotate| +|9. cubeTransition | 10. ballZigZag | 11. ballZigZagDeflect | 12. ballTrianglePath| +|13. ballScale | 14. lineScale | 15. lineScaleParty | 16. ballScaleMultiple| +|17. ballPulseSync | 18. ballBeat | 19. lineScalePulseOut | 20. lineScalePulseOutRapid| +|21. ballScaleRipple | 22. ballScaleRippleMultiple | 23. ballSpinFadeLoader | 24. lineSpinFadeLoader| +|25. triangleSkewSpin | 26. pacman | 27. ballGridBeat | 28. semiCircleSpin| +|29. ballRotateChase | 30. orbit | 31. audioEqualizer | 32. circleStrokeSpin| + +## Installation + +### Cocoapods + +Install Cocoapods if need be. + +```bash +$ gem install cocoapods +``` + +Add `NVActivityIndicatorView` in your `Podfile`. + +```ruby +use_frameworks! + +pod 'NVActivityIndicatorView' +``` + +Then, run the following command. + +```bash +$ pod install +``` +### Carthage + +Install Carthage if need be. + +```bash +$ brew update +$ brew install carthage +``` + +Add `NVActivityIndicatorView` in your `Cartfile`. + +```ruby +github "ninjaprox/NVActivityIndicatorView" +``` + +Run `carthage` to build the framework and drag the built `NVActivityIndicatorView.framework` into your Xcode project. + +_**Note:** You might encounter compile issue, if so please use `carthage` branch instead. Check issue [#101](https://github.com/ninjaprox/NVActivityIndicatorView/issues/101) for more information._ + +### Manual + +Copy `NVActivityIndicatorView` folder to your project. That's it. + +_**Note:** Make sure that all files in `NVActivityIndicatorView` included in Compile Sources in Build Phases._ + +_**Note:** If you encounter issues while uploading the app to iTunes Connect, remove the `Info.plist` file in `NVActivityIndicatorView`. Check issue [#129](https://github.com/ninjaprox/NVActivityIndicatorView/issues/129) for more information._ + +## Migration + +### Version 4.0.0 + +This version requires Xcode 9.0 and Swift 4. + +### Version 3.7.0 + +This version splits `NVActivityIndicatorView` pod to 2 subpods `NVActivityIndicatorView/Presenter` and `NVActivityIndicatorView/AppExtension`. There is no need to change `pod NVActivityIndicatorView` to `pod NVActivityIndicatorView/Presenter` since it will be installed by default if you use the main pod name. + +However, if you want to use `NVActivityIndicatorView` in app extension, use `pod NVActivityIndicatorView/AppExtension` instead. + +_**Note:** Related issue [#119](https://github.com/ninjaprox/NVActivityIndicatorView/issues/119)._ + +### Version 3.6.0 + +This version requires Xcode 8.3 and Swift 3.1. + +### Version 3.0 + +This version requires Xcode 8.0 and Swift 3. + +- `NVActivityIndicatorView.startAnimation()` and `NVActivityIndicatorView.stopAnimation()` are deleted. Use `NVActivityIndicatorView.startAnimating()` and `NVActivityIndicatorView.stopAnimating()` instead. +- `UIViewController.startActivityAnimating()` and `UIViewController.stopActivityAnimating()` are deleted. Use `UIViewController.startAnimating()` and `UIViewController.stopAnimating()` instead. + +### Version 2.0 + +This version continues to spport Xcode 7.0 and Swift 2.2 and earlier. +For Swift 2.3 support, use `swift2.3` branch instead. + +```ruby +pod 'NVActivityIndicatorView', :git => 'https://github.com/ninjaprox/NVActivityIndicatorView.git', :branch => 'swift2.3' +``` + +## Usage + +Firstly, import `NVActivityIndicatorView`. + +```swift +import NVActivityIndicatorView +``` + +### Initialization + +Then, there are two ways you can create NVActivityIndicatorView: + +- By storyboard, changing class of any `UIView` to `NVActivityIndicatorView`. + +_**Note:** Set Module to `NVActivityIndicatorView`._ + +- By code, using initializer. All parameters other than `frame` are optional and `NVActivityIndicatorView.DEFAULT_*` are used as default values. + +```swift +NVActivityIndicatorView(frame: frame, type: type, color: color, padding: padding) +``` + +### Control + +Start animating. + +```swift +activityIndicatorView.startAnimating() +``` + +Stop animating. + +```swift +activityIndicatorView.stopAnimating() +``` + +Determine if it is animating. + +```swift +animating = activityIndicatorView.animating +``` + +### Change properties + +In storyboard, you can change all properties in Attributes inspector tab of Utilities panel. + +_**Note:** Use one of values (case-insensitive) in [Animation types](#animation-types) for `Type Name`._ + +All properties are public so you can change them after initializing. + +_**Note:** All changes must be made before calling `startAnimating()`._ + +### UI blocker + +By conforming `NVActivityIndicatorViewable` protocol, you can use `NVActivityIndicatorView` as UI blocker for `UIViewController`. + +```swift +class ViewController: UIViewController, NVActivityIndicatorViewable { } +``` + +Start animating. + +```swift +startAnimating(size, message) // plus other parameters as in initializer. +``` + +Stop animating. + +```swift +stopAnimating() +``` + +Or you can use `NVActivityIndicatorPresenter` to display UI blocker anywhere. + +Start animating. + +```swift +let activityData = ActivityData() + +NVActivityIndicatorPresenter.sharedInstance.startAnimating(activityData) +``` + +_**Note:** Check [documentation](http://cocoadocs.org/docsets/NVActivityIndicatorView) for detail of `ActivityData`._ + +Stop animating. + +```swift +NVActivityIndicatorPresenter.sharedInstance.stopAnimating() +``` + +Change message. + +```swift +NVActivityIndicatorPresenter.sharedInstance.setMessage("Done") +``` + + +## Acknowledgment + +Thanks [Connor Atherton](https://github.com/ConnorAtherton) for great loaders and [Danil Gontovnik](https://github.com/gontovnik) for kick-start. + +## License + +The MIT License (MIT) + +Copyright (c) 2016 Vinh Nguyen [@ninjaprox](http://twitter.com/ninjaprox) diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 074f080..1486a66 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,187 +7,284 @@ objects = { /* Begin PBXBuildFile section */ - 0D7199DC8A386DFA34F5562C37362068 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F65EAE3D82D469E2A1096B52F72A8FE9 /* SDWebImage-dummy.m */; }; - 16A32E82EFA2630C94B4908CA5EAA813 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4E580CE3FEED6258EB676DD0235104 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19CC7126EB5F566D2FFC5AA05376D9D5 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF8B1359DF9D8043B249280CD580B55 /* UIView+WebCache.m */; }; - 1D10BFAB9D1A3AC8871B02FB4508B54B /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DB03E8BF6B652DBCCFC5A8191299615 /* SDWebImagePrefetcher.m */; }; - 24AED0803DD4BFD2BF5D6542D9BDBB83 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D2CE0B2BD1CD0E400284F0AF18C3467 /* SDWebImageDownloaderOperation.m */; }; - 25F31911023C55528EC7B7C935E140CB /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BB1FBB6C38894191F46102A41CC5A1F /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2989347F9FD5F626086234F38F1BA64D /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8851F593AF07A933B8B3D67D59F15867 /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2C1F355C70AFE80B33F207C187C22F51 /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = CA5694BC925A8C565FB5B42605C36E7C /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E0EC38C45811F38B7B224717F725846 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = AC02688B9E73382CFA1F6666934ED47D /* UIImage+ForceDecode.m */; }; - 2F7948D3EB225636C922F1687C91AE15 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 40180C69247568570B6F268556055401 /* UIImageView+HighlightedWebCache.m */; }; - 38FBEA58340F150E4F8045CEFF819452 /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 807E6BCF9576E9F47CBBA55A517A5302 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3AA2B0391D791153C767545097DEE5E8 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 030D0A2E9767F3221CF3BB467F20CDCF /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F84465AD1FD088EA094A3678F41D064 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D4A243B2EBEDBC9D461F24F8F1F818A1 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 440259D6322C9C263E5412F39BB3A75B /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 91770AD2A7BF449871DEA681B8F4F6A7 /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A1437D7EF958729CF526D55758F7DFA /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = AA939226649534F56A09D908216A32E7 /* SDWebImageFrame.m */; }; + 00A060E92D4F9743360EC4509688015E /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 43F2BE11737B2E7B7B0D0D30B5591770 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 012725CE0A4A4A5B3ACA5C6F8EBC9193 /* Pods-Travel-IT-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C9705D271EB4378190C97F7DDFC762F0 /* Pods-Travel-IT-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 063B88FFA06E95EB49CE72C2BEBE3F85 /* NVActivityIndicatorAnimationBallClipRotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FDEC21F134944F9AACDCECE436EBD2D /* NVActivityIndicatorAnimationBallClipRotate.swift */; }; + 081414D727179033DBBA9632C67091EF /* SDWebImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F9361F2F756EE70BA76D9205B73BE4 /* SDWebImageFrame.m */; }; + 091973F6AA1CF9731066FECF78514263 /* NVActivityIndicatorAnimationBallRotate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB701936826D06D6DF5B65C8BD4A21AF /* NVActivityIndicatorAnimationBallRotate.swift */; }; + 09C2108146870B7A73DB327C82376FB6 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = D9297887C0C85288D496C1F82529CE9B /* UIButton+WebCache.m */; }; + 09EBC7840465583F3B2D5BB5AAC5A4EF /* NVActivityIndicatorAnimationLineScalePulseOut.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007C6B247352AD09065AE68B7C1674D1 /* NVActivityIndicatorAnimationLineScalePulseOut.swift */; }; + 0E2F3568A1B114FBC37F0740937E6EE6 /* NVActivityIndicatorAnimationSquareSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EAFFCE0841F41BAF95C53C62410E8BB /* NVActivityIndicatorAnimationSquareSpin.swift */; }; + 15F12C8C81B778B095D83C63517376EB /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 036B8D659962E363AA8DB2A825BE808A /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 15FA471D24CAA97266473350C62A5148 /* SDWebImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DABBBCA339A97A9006F935806407BF4 /* SDWebImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16042C860E94257BEC8214536D7DAF03 /* Pods-Travel-IT-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 497C46F7A63D3C76E2BFCC00BC302E2A /* Pods-Travel-IT-dummy.m */; }; + 190C06522236ECA728A97AF124CD8C88 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88B2DAEAE02D82A63236044DA6983864 /* QuartzCore.framework */; }; + 1A45D0EFED0889022B0F0662E5F1A9F3 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1E4B6D62215D319FB476B3A9BB7B40 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1D1B2094BB16823EE767C2343BD35F5F /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 851EF95C583D4C682D721CB80FD6E3BB /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 201612D922EC6A7E9DD5A5D616792B04 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = D97952308A0B96205BE65864C93C60E2 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 229688DAFCC8F499E6CFB263607D1C9A /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A92BA3D933890A0F29A995CA7481FDAE /* UIImageView+HighlightedWebCache.m */; }; + 299F62399B8A4F7B198AFF7E6777BBF3 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 503E5F1B7DE36867BCDA809504BFEA7B /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A4A5464B4A5FD4A2CD46FC90EE9B74F /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CA8887590EB4DFD3EF5FFB4E7B706C /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 320CF840E2E5D16BC1A499FE05D2C04F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AEFA2C5F8E95A0FE28177001ABE5FB1 /* SDWebImage-dummy.m */; }; + 34FE04F57131E0AB680F1E03C246F67D /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = E71880D4A72EE19D036BF4ADF44E92D2 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift */; }; + 36600E995DF9181E2248FCD11DFB97E4 /* NVActivityIndicatorAnimationBallZigZag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B70283565C95AE256CCA42366A9C6F28 /* NVActivityIndicatorAnimationBallZigZag.swift */; }; + 3B577DC66B838EB3E30709FF7AF625A6 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F0629032CC0AB57CD521C85E96BBDE3C /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C607ADC9595216CA479F9F4A0D58D0C /* NVActivityIndicatorAnimationDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA8D6B0DFC5DCD95747F69126946AA2 /* NVActivityIndicatorAnimationDelegate.swift */; }; + 3C8E5385426B16CB77BC57CCF0258B68 /* SDWebImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EDAC39D43EB0CFEBBC23DC61284700D1 /* SDWebImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3D270DF9A0AE0AC6D9155489912771F2 /* SDWebImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 234694AFC8615402547039C16C617C25 /* SDWebImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 405E2881FABD1931BB0E2F6F974DA855 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 9433B36CB5FB824BEFF083155309F7D7 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 411892EE5CCD02CA9B1B8F48935856D4 /* NVActivityIndicatorShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5133B7C2EED1EE46FB4C2E70A329A738 /* NVActivityIndicatorShape.swift */; }; + 43600914CEF70E033DF82211BB4E1DF7 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 74296F01F4D81992F31EB4E5927E7D20 /* UIView+WebCache.m */; }; + 441861BF61250ADC4C2114252E433251 /* NVActivityIndicatorAnimationCircleStrokeSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A75F637375254CD70CEE8AB76B2FA9B /* NVActivityIndicatorAnimationCircleStrokeSpin.swift */; }; + 48753AF272E9FA0C7246418D6E224E40 /* NVActivityIndicatorAnimationBallTrianglePath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16426773EB78970D12D3F463C13EED28 /* NVActivityIndicatorAnimationBallTrianglePath.swift */; }; + 4A97BFA49D258276CB2604A4AAAEAAC3 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D03CE02EF4D9B2A8FC8ED9F99F871AE /* NSData+ImageContentType.m */; }; 4C0B9E8421806859E88B84BC43E95DF6 /* Pods-Travel-ITUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 03091388B8313C0B8CC4701BC666929F /* Pods-Travel-ITUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D93695785C7665969D683ABA49B696A /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CFA51EA58788DFD1FDF466BE345A079F /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E5BB9778F1A6BAF96A960F5EE536549 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FEB3814F9E87A29E1EBB359FC225D0 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50F3204650C9EE484D70BF692B7B3189 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */; }; - 515575C702A440F42033A6730FB8A2C3 /* Pods-Travel-IT-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 497C46F7A63D3C76E2BFCC00BC302E2A /* Pods-Travel-IT-dummy.m */; }; - 54715C571230A756299D6D08EA23B20B /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5E31222A92B9BAB5A78D4CE2FC382C /* SDWebImageGIFCoder.m */; }; - 5728224CFE945C29A0B4102212FEDD02 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A6E6DEBCB950E4631B27398F8893852 /* UIImage+MultiFormat.m */; }; - 5B214BC1351197585F1B1A8E22405206 /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB8A9D678B89E18580D3CC6609F36AB /* SDWebImageCoder.m */; }; - 5C234D6F08F902186B7E4E4B81B2B0B6 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 04EA491BC2A35496CE5836AB6820557D /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61D0A033C11C972E0ACD36265770498F /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F68ACFEB0AB9F1C90CFBC7FD5F5283DE /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68671898F46FA03961938B1502FC2605 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E40F8718F5BE2CCE05F9DE231DC120D /* SDWebImageDownloader.m */; }; - 6ABAAF7408EB0429594E4F014B542A86 /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F5DE37C2A3F8EB1A37D909CD16CB8D55 /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6EC44E6E29520C10D74D1826D134A0E2 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C8B8F7807353AE2D112AFC41531D3C6 /* SDWebImageCompat.m */; }; - 70FE8256272684C1853C20428632589F /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 830B1498AC1368B42915C9303062ECE1 /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 730D948C27A7308F7DCCEE66B49C25C9 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 33EE019C6131B3C5733D737786892952 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 742FAE363085B5521CA56FAAD24FA9F1 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F894E446EFE6609D0334CFB9FD65127A /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75801701EA07B2B03CE17A6EA43E0581 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 494E72A97BA3B70228254CAE498F362F /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77974996DDE24A6C3FA5E47B52C843C3 /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FAAFAA4218E6D4F07F749BB4C552A4 /* NSImage+WebCache.m */; }; - 79F507BE37C6ED36A84D5A49B5EEFBEC /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 77EF702B6A6788ED36396ECCC69AD765 /* UIImage+GIF.m */; }; - 7C2B6CF45410A2340AF08E6FCC65D2E5 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = D67A0E2B669C0BA70428FB1FA58477D6 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8101C3DACA6CC67FAD82BBFF946661C8 /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2474F2491264E5C75E11E03D3DA717D5 /* SDWebImageCodersManager.m */; }; - 868132B22B78992B5303E366E5F1483C /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = CA3154527136735F086F0FE7A553C394 /* SDWebImageImageIOCoder.m */; }; - 86C25BE1112F7A6E484997CD7299E519 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2716E37039595D6453F2D62467B39F1D /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86F6038F409E39F6E81DF2EC900CD7CC /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = C438B24E7DD69F583FA269786D7AB142 /* SDWebImageCoderHelper.m */; }; - 881890718D376BEF59191C28F367C75A /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E4D24108C9F9C74396D3F0F1B876BB2 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A50F6C44462AD7B6BC37DB0B3E55349 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 8D08B0767DDB917EE102B13F3C5D6205 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BF9ECB98E9D7BBE8328A3B57BF2F488 /* UIButton+WebCache.m */; }; - 9607C06EEB79CFE794B4EE39EBE5D283 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - 96B428EF0F6C0BD128000FF299D72674 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D4AE9B0003DB1C71D93597A119B565 /* SwiftyJSON-dummy.m */; }; - A6B980BB2771FF02B0A7B840300216BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - B08CB351E27636618AB4104A1B7EBC1D /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D53A09F695BFCF992439504FAD8543C /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3CD8DDB3B36F7C12CD3AE04AD35B614 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E6E6B653FD120DAA2FE20A46C228D85F /* UIView+WebCacheOperation.m */; }; - B449C297F8B4C5C317D64B400602BF7A /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0D0BFC943FBBAFD54E7803E2A958ED /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB12574B19100EF6B01D2A1ADC5A37B1 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = A5DB368FCF4F2D59C5CD31B7FA5CEC41 /* SDImageCacheConfig.m */; }; - BD8681C39DB1A2B3193B1E751600668D /* Pods-Travel-IT-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C9705D271EB4378190C97F7DDFC762F0 /* Pods-Travel-IT-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E699035847CE8D9BE61C63DD6B94B13 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C54F9EE8C6D00CDF2A7F75D3C128F89 /* SwiftyJSON-dummy.m */; }; + 572F96C7CA4E1AE3F138B052240F09D1 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8767460F4DC8018D30FDC64E9D2B954 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift */; }; + 57A4780A029CB799590D16EDC9E8A347 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9160739504A9593099E7029F47C7166F /* NVActivityIndicatorAnimationTriangleSkewSpin.swift */; }; + 593327D0402479D46868BD564F22A924 /* SDWebImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D0A57D40CD5D8F5F16DBDB4788E252A /* SDWebImageCoderHelper.m */; }; + 59A3F3767D4B6906947A61C960895F5D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + 5B83FFB0234A941EA80748FD67FF47BA /* SDWebImageImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DB7626EA60888793AC50CCABE3B685D8 /* SDWebImageImageIOCoder.m */; }; + 5BC792DC66214AE4C5C29B0D1DE0B039 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + 5BE3788439F99B90A3E7567BBB6502D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + 615322F2C514B31DE3EB8CA5E6C517DA /* NVActivityIndicatorAnimationBallClipRotatePulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA438700B39E9799A6BFB3ED28FDB236 /* NVActivityIndicatorAnimationBallClipRotatePulse.swift */; }; + 62AE9A58945EC9658FB97E0EC2864001 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA78CF269D1C5E71B7B976D4FB3AC2F3 /* SwiftyJSON.swift */; }; + 67024CA975DCE13D6E16EEE0D83AF923 /* NSImage+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB615F8D65AEEAAD3D81930D3DD1AB7 /* NSImage+WebCache.m */; }; + 723DB28D62DE82F7048DED51AB1B00E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + 768C8652FEF1CB4AA9CAEF22E77A09AC /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F948806AA674846AA2BC69FCCD740300 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift */; }; + 7A04BD9028666AB823CB5047B9787109 /* NVActivityIndicatorAnimationOrbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AFB61A07DD7C2332B3CFDBF9C929A64 /* NVActivityIndicatorAnimationOrbit.swift */; }; + 7D42F43A43B669759876A946718D8614 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A5348D3E12045407168FAF010DF99F4 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DE6A02290FDEFB0AE3DB653352B2B4D /* SDWebImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BC1B7795E7960C4F5A91FB12FDB5BFF /* SDWebImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8097E07185D2FCEA2ADAAF0772BB09EB /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E7DA5448E9C9117E0ED11B34AE4E899 /* UIView+WebCacheOperation.m */; }; + 82DBE0F5E4EA0AA198362CDEB94148EF /* SDWebImageImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 81DAEF4506F2D72D83CF9E466A98F773 /* SDWebImageImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8717D35760CCF360C98DD9BD0376AE63 /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FD4702318FE1FD575B32B4E90696BA0 /* NVActivityIndicatorAnimationBallPulseSync.swift */; }; + 8A68CE486B24663885C98B5E1FD50E8B /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A526ECE03ED60C50C73B73E341DAE92 /* SDWebImageDownloaderOperation.m */; }; + 8A92EAAB56504D993B3D5B545D08638A /* NVActivityIndicatorPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27866F82DEDE36963BF7FCFA7861FC6C /* NVActivityIndicatorPresenter.swift */; }; + 8D5B884FA93F0A0ED3F2249BA6C52940 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F95B34BF77707C0FA5BCFE363B9B7553 /* ImageIO.framework */; }; + 8F6787786A7FE2C59EC66A8364AA1A77 /* NVActivityIndicatorAnimationLineScaleParty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A39ABAFBAFB8B3AD05EF115F6D0F4B /* NVActivityIndicatorAnimationLineScaleParty.swift */; }; + 92B77CDA30DF4D1C0FD68DFBB2227FEC /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEA146CB4CD23C733CB1318A10DEED8 /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift */; }; + 92D2CC08D714C580E987842370D19E34 /* NSImage+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F2D984D943205FFD8E2951C3C313050B /* NSImage+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9431180AECF2BDF08E75BC12EB9D44C0 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 887649C0CCA86124AC7D73BD737B2DB7 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 945A586D96085643F587C19764C9CF28 /* NVActivityIndicatorViewable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC55809D9D88FCA610C927E653A4BAF7 /* NVActivityIndicatorViewable.swift */; }; + 9607C06EEB79CFE794B4EE39EBE5D283 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + 9A408E26A4697A7FA6C2C48E906B9972 /* NVActivityIndicatorAnimationBallScaleRipple.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD73DDD2C3FA221B74420CC79D87F286 /* NVActivityIndicatorAnimationBallScaleRipple.swift */; }; + 9F1989D547B2013AF64E5CD6A5085105 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 91188C312A42D2CAE7EDFB516BAE23E6 /* SDWebImageDownloader.m */; }; + 9F5AB908B1AE7FB5F7AB9BD67D412DF7 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 97EEFB6CB6FCB4A75C0CC27972E9876D /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1BB2C33EF9E54F72960C95B4CE4E038 /* NVActivityIndicatorAnimationPacman.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5842C75713F471B560EEFEC7F9402F0F /* NVActivityIndicatorAnimationPacman.swift */; }; + A43224CD8A416C7507B4611DB6ACF478 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E0031CA1F09C9BE58927A0778CF70A7 /* UIImage+GIF.m */; }; + A6B980BB2771FF02B0A7B840300216BB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */; }; + A72B2C6C984F03980DCACF70C68874EE /* SDWebImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C33989B6DE6C96AFA6C88339A5AA7E9 /* SDWebImageCodersManager.m */; }; + A8A10642A82DA3D565C8D4D14840A2B0 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 665E3864DD26955410DD00292FF859EC /* NVActivityIndicatorAnimationBallScaleMultiple.swift */; }; + AA31BF27F046968E702885DB18CE4D76 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C14977F6CAA59760BC77E335D97AF263 /* UIKit.framework */; }; + AC585B4D87F4C5CBDCCB4649AED80166 /* NVActivityIndicatorAnimationBallPulseRise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F42BBEB2F704F3C312FAD3303E56A0C /* NVActivityIndicatorAnimationBallPulseRise.swift */; }; + AC9F3542ECCFC163811BC9257882C2BD /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 320A8DAC8869145497D93B8C250DAA1B /* UIImage+ForceDecode.m */; }; + ACE59066B57330A6D5C7E38F52A8E9D6 /* NVActivityIndicatorAnimationBlank.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6990886F87C6B5330C40396BB200D179 /* NVActivityIndicatorAnimationBlank.swift */; }; + BA7CD8060BEA3B87B8F5E172677FDA88 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1838920EAF6DB6771B7BB3C09CCAFF72 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BBB7AED9265CF0D38FD9CAA5B9BA2FF8 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 56704D22F3C75A80F138BD4B99B0D130 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BDD240E0BD3BBF0FA699B5C52338B724 /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0585884489E9912E6732370794C39DBE /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift */; }; + C0ECBEF6859B2F3CEB8285AABB087446 /* NVActivityIndicatorView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E357F24E9A33831E68FEB340D4F57D4 /* NVActivityIndicatorView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C11A046B28A0FB465AE9A7108EA4CF25 /* SDWebImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = F16104E3B52D74CC4D840989DFE569AF /* SDWebImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2A0AFF69B9ACFCCC19BB4C36EDCFF91 /* NVActivityIndicatorAnimationBallScale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F8CFA45B610D5C6BF7C90DA71DF8AB /* NVActivityIndicatorAnimationBallScale.swift */; }; + C49D71662CD248300BFFEEA63EEA11B7 /* NVActivityIndicatorAnimationLineScale.swift in Sources */ = {isa = PBXBuildFile; fileRef = D119F09EF357AF536E57D0FF98F20BEB /* NVActivityIndicatorAnimationLineScale.swift */; }; C4E7C8465A8B0BA67A8AB320A2847C9C /* Pods-Travel-ITUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0666D1005713AD30210AD8A81D0C1E7F /* Pods-Travel-ITUITests-dummy.m */; }; - C5B7FBFEB891220FC0A35952C95EAC12 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B98EE910F928E8CF4F77AB420042575 /* SDImageCache.m */; }; - C6B30CAA5970FAFBDB486A23A5220F37 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C58FCF165A7C548DF6BFE3BC31B7397C /* UIImageView+WebCache.m */; }; + C609BA45AA1975C5C0758A22960737E9 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08A3A1589B7FD4E830223517123F0C9C /* NVActivityIndicatorAnimationBallRotateChase.swift */; }; C7C21488835C49DB4480F71FA43DD152 /* Pods-Travel-ITTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D3933E69FBF36EBDCF6367BD9F174E9 /* Pods-Travel-ITTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDA06C1C35948EAB191E19BC38306CF4 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = E95965ED1D3F3916DDDEC5F19D76C120 /* NSData+ImageContentType.m */; }; - D192BF1D79DB228DBBB761D54C39CF98 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AAB368D8ACA02410D97C36F03EEEBA5 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7542409A6AEB28721401D7450D6188C /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 94B44B6DBC2AFF1CE4EB8BB58E09CD7F /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E26383B88022E2173B9A60FD6E1C7D1D /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1959DE86423F709E2FE5F43E216E9DC2 /* SDWebImageManager.m */; }; - E2E57A95CD79C7782DB7CC384590BD36 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; - E33F191C7BECB77679B52EC561017F78 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DED4961D1449A5A7F5F5BF7940CB0D2 /* SwiftyJSON.swift */; }; - F0CF86A4111557F608A3BFAA310BDEB2 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FC5CBCF4316522341143C402F4264F3A /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F680D1AB428E75DCDC824092769C7555 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 73300947B256EE6F72FB33B43BD1CDEF /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8234E60517AD412129A04D6BC8F85EF /* SDWebImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 07EDE315C1278BDDE0062CCB739175C8 /* SDWebImageGIFCoder.m */; }; + C9E9422FA131C7FDB301626F2E12C597 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 21B217E9C6DB1977AFEB4A053DDEF057 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBCA49C6966B075C43D482A03077FBF4 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FDFD1C88A518F65B0D782DA534F2BC4 /* SDImageCache.m */; }; + CC21FE8AD0DE34E633159ED0EE46CC2D /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F5BD5ADDF3EFBAEA930E09D8512C7AF2 /* SDWebImageManager.m */; }; + D1714D423A6178ED5EBDE141BC54748A /* NVActivityIndicatorAnimationBallGridBeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17E7C99E72F1104C996D53EE331ADA1 /* NVActivityIndicatorAnimationBallGridBeat.swift */; }; + D18F49124CA60E7A1EEE5412B2E2B113 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 796AFEA2778505BC112A5BF30D7F7225 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift */; }; + D49672B1E581015B3BFE18D5BB0BF861 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B74E4E0DE61ACB5D466FED2419B61005 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6DD4A7F1E9FF1C03B6320D95AE15517 /* NVActivityIndicatorAnimationSemiCircleSpin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E6CBC9861F795717CA74932B5C04103 /* NVActivityIndicatorAnimationSemiCircleSpin.swift */; }; + D85FA749403316B4FACC1048345D332B /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F6BBB7E293AF60E0ED8D4B8A60948B5 /* UIImage+MultiFormat.m */; }; + D97D1D5EA372E809799908BD7BC1E149 /* SDWebImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = A1799ADC3E25451A3374ACAFF03F86CC /* SDWebImageCoder.m */; }; + DB26BFF8E95B8DA303734941BA4E9967 /* NVActivityIndicatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFE17F095A9CE6F48A825368AFD6C17 /* NVActivityIndicatorView.swift */; }; + E0C5CF2EB226D10A5389F6E7AFAF14E9 /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C23FC40FAF024002C4C260E31A3A060 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2346CB93BA704418C22B0E141D301C0 /* NVActivityIndicatorView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BCEC89467B85E99B075870C5D86E8BC /* NVActivityIndicatorView-dummy.m */; }; + E6EB8965FA41B283A0C2BBF698B35BDA /* NVActivityIndicatorAnimationBallPulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74C066CD825FA173890DA3A844823A65 /* NVActivityIndicatorAnimationBallPulse.swift */; }; + E98FA6836DCAEE696E8F409DAA4A0E62 /* NVActivityIndicatorAnimationAudioEqualizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3133037229A800A441251D7BE44A3678 /* NVActivityIndicatorAnimationAudioEqualizer.swift */; }; + EDD7904F79DEE1BBEAE7E44439B3071D /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F5742F74F6D3EFB474FE1AE755D0C15 /* SDWebImagePrefetcher.m */; }; + EF365A33EEDD245B80092EC12ADA816C /* NVActivityIndicatorAnimationCubeTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FD1E5D68540CA8EBDF6C91FA86D8EF6 /* NVActivityIndicatorAnimationCubeTransition.swift */; }; + EF6E20153B5E98E157284DBD710F9340 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CE2DA22662822BFF899E3634974B239 /* SDImageCacheConfig.m */; }; + EF6F18F967D1D7805A920F4F219B4635 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B7D2FB92C7F574B0735F0EDB1DB11D /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F00C1E47EFCABC15BAD0C8366A93B16A /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FF71876DA17CBDED7232C9BA615DE23 /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F04FBB802B9861A8A72E0B579380E39E /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = F54DDA6B25E1C197CB27184E854E60FF /* SDWebImageCompat.m */; }; + F122EC7E2474616062D9ED2044D191B9 /* NVActivityIndicatorAnimationBallBeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B87837B7B7D4E4920AD2286FA8BB59 /* NVActivityIndicatorAnimationBallBeat.swift */; }; F7FEF47D173E94D660BD3FCFEB32135F /* Pods-Travel-ITTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 22EF64FBC05618EC10E798FF9AF7A638 /* Pods-Travel-ITTests-dummy.m */; }; - FE80D2CEA04F23B3275F1ACBF9A98447 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */; }; + F96CFE2D23307ADFD341623F156A0450 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BECED6CA0C2EA35636DC4C4B741A412 /* UIImageView+WebCache.m */; }; + FB2BCFA934419C458B3E982AF4466AC9 /* NVActivityIndicatorAnimationBallGridPulse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67D976FDBC2C67A8EB07DDF4860633EC /* NVActivityIndicatorAnimationBallGridPulse.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 479F571E5917B028BA7B3DCD4F2AAFA9 /* PBXContainerItemProxy */ = { + 33C17AEFCFF4AED36296730ABBECA001 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 07D7A42FD6EC1FCF07A6F15DD86C22B9; + remoteGlobalIDString = 9AA4E3F1D4150A60A3520ECBFFC53E4A; remoteInfo = SwiftyJSON; }; - F3099118F9906C112EFE36FBBF847BF1 /* PBXContainerItemProxy */ = { + 3BB98140829DA6A6BC2CE112895A8DC6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E01F44823342F817602A965EB4E548B0; + remoteGlobalIDString = 8A51A6EBFE73154C159A66B69758FD13; remoteInfo = SDWebImage; }; + 83036AF8DBDB1366DBD6FC869A860214 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 123F89F7E8DB3444EAD2F61E835952E2; + remoteInfo = NVActivityIndicatorView; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 007C6B247352AD09065AE68B7C1674D1 /* NVActivityIndicatorAnimationLineScalePulseOut.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScalePulseOut.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOut.swift; sourceTree = ""; }; 03091388B8313C0B8CC4701BC666929F /* Pods-Travel-ITUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Travel-ITUITests-umbrella.h"; sourceTree = ""; }; - 030D0A2E9767F3221CF3BB467F20CDCF /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - 04EA491BC2A35496CE5836AB6820557D /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; + 036B8D659962E363AA8DB2A825BE808A /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/UIView+WebCache.h"; sourceTree = ""; }; + 0585884489E9912E6732370794C39DBE /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallClipRotateMultiple.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotateMultiple.swift; sourceTree = ""; }; 0666D1005713AD30210AD8A81D0C1E7F /* Pods-Travel-ITUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Travel-ITUITests-dummy.m"; sourceTree = ""; }; - 0BB8A9D678B89E18580D3CC6609F36AB /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; + 07EDE315C1278BDDE0062CCB739175C8 /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; + 08A39ABAFBAFB8B3AD05EF115F6D0F4B /* NVActivityIndicatorAnimationLineScaleParty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScaleParty.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScaleParty.swift; sourceTree = ""; }; + 08A3A1589B7FD4E830223517123F0C9C /* NVActivityIndicatorAnimationBallRotateChase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallRotateChase.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotateChase.swift; sourceTree = ""; }; + 0F42BBEB2F704F3C312FAD3303E56A0C /* NVActivityIndicatorAnimationBallPulseRise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallPulseRise.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseRise.swift; sourceTree = ""; }; 0FCA8834F4F4E00EE3C02608FE398F28 /* Pods-Travel-IT-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Travel-IT-acknowledgements.markdown"; sourceTree = ""; }; - 14914E4751EB5FD663EE10F10BA37D0F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1959DE86423F709E2FE5F43E216E9DC2 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 11B87837B7B7D4E4920AD2286FA8BB59 /* NVActivityIndicatorAnimationBallBeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallBeat.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallBeat.swift; sourceTree = ""; }; + 16426773EB78970D12D3F463C13EED28 /* NVActivityIndicatorAnimationBallTrianglePath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallTrianglePath.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallTrianglePath.swift; sourceTree = ""; }; + 1838920EAF6DB6771B7BB3C09CCAFF72 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 1C18AEFAE001E5281FE091E26570175A /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SwiftyJSON.modulemap; sourceTree = ""; }; 1CAC214D77A4ED9F0E9310CA86A103FC /* Pods-Travel-ITUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Travel-ITUITests.modulemap"; sourceTree = ""; }; + 1CE2DA22662822BFF899E3634974B239 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; + 1F2F27341B3377335682B0BC0894B2D1 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; + 1F6BBB7E293AF60E0ED8D4B8A60948B5 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + 21B217E9C6DB1977AFEB4A053DDEF057 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; 22EF64FBC05618EC10E798FF9AF7A638 /* Pods-Travel-ITTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Travel-ITTests-dummy.m"; sourceTree = ""; }; - 2474F2491264E5C75E11E03D3DA717D5 /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; - 2716E37039595D6453F2D62467B39F1D /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 234694AFC8615402547039C16C617C25 /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; + 26B7D2FB92C7F574B0735F0EDB1DB11D /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 27866F82DEDE36963BF7FCFA7861FC6C /* NVActivityIndicatorPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorPresenter.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorPresenter.swift; sourceTree = ""; }; 2924215F14583F19FC11F68C54621140 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C68C77B1BE7B85429BAEB61B564C30A /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + 2BECED6CA0C2EA35636DC4C4B741A412 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + 2C33989B6DE6C96AFA6C88339A5AA7E9 /* SDWebImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCodersManager.m; path = SDWebImage/SDWebImageCodersManager.m; sourceTree = ""; }; + 2EAFFCE0841F41BAF95C53C62410E8BB /* NVActivityIndicatorAnimationSquareSpin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationSquareSpin.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSquareSpin.swift; sourceTree = ""; }; + 2FDFD1C88A518F65B0D782DA534F2BC4 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; 30D7CC58B56BEFDBA32944811FCC0039 /* Pods-Travel-IT.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-IT.release.xcconfig"; sourceTree = ""; }; + 3133037229A800A441251D7BE44A3678 /* NVActivityIndicatorAnimationAudioEqualizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationAudioEqualizer.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationAudioEqualizer.swift; sourceTree = ""; }; 31B97338FC94A0E0F8267E3DEFD76719 /* Pods-Travel-ITUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Travel-ITUITests-acknowledgements.markdown"; sourceTree = ""; }; - 33EE019C6131B3C5733D737786892952 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 320A8DAC8869145497D93B8C250DAA1B /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; 373BCE6103ACDA989335201D611D3C33 /* Pods-Travel-ITUITests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-ITUITests-resources.sh"; sourceTree = ""; }; - 40180C69247568570B6F268556055401 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 3A75F637375254CD70CEE8AB76B2FA9B /* NVActivityIndicatorAnimationCircleStrokeSpin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationCircleStrokeSpin.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCircleStrokeSpin.swift; sourceTree = ""; }; + 3AFB61A07DD7C2332B3CFDBF9C929A64 /* NVActivityIndicatorAnimationOrbit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationOrbit.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationOrbit.swift; sourceTree = ""; }; + 3CFE17F095A9CE6F48A825368AFD6C17 /* NVActivityIndicatorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorView.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorView.swift; sourceTree = ""; }; + 3DD69A5D44C66A230E9F656F8952E4A4 /* NVActivityIndicatorView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NVActivityIndicatorView.xcconfig; sourceTree = ""; }; + 4196EC7589F0A01C365CB6931C177B40 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; 42E60717F56B5E6ED1534CC18D8A9B88 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 436EF9058C92B7D3FCF1C381BF5E7D38 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 46FAAFAA4218E6D4F07F749BB4C552A4 /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; + 43F2BE11737B2E7B7B0D0D30B5591770 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; 491B79671125B2DBA8F07C96A209A913 /* Pods-Travel-ITUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Travel-ITUITests-acknowledgements.plist"; sourceTree = ""; }; - 494E72A97BA3B70228254CAE498F362F /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; 497C46F7A63D3C76E2BFCC00BC302E2A /* Pods-Travel-IT-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Travel-IT-dummy.m"; sourceTree = ""; }; - 4A6E6DEBCB950E4631B27398F8893852 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 4D53A09F695BFCF992439504FAD8543C /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + 4A526ECE03ED60C50C73B73E341DAE92 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 4AB615F8D65AEEAAD3D81930D3DD1AB7 /* NSImage+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+WebCache.m"; path = "SDWebImage/NSImage+WebCache.m"; sourceTree = ""; }; + 4D0A57D40CD5D8F5F16DBDB4788E252A /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; + 4E357F24E9A33831E68FEB340D4F57D4 /* NVActivityIndicatorView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NVActivityIndicatorView-umbrella.h"; sourceTree = ""; }; + 4FDEC21F134944F9AACDCECE436EBD2D /* NVActivityIndicatorAnimationBallClipRotate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallClipRotate.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotate.swift; sourceTree = ""; }; + 503E5F1B7DE36867BCDA809504BFEA7B /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 5133B7C2EED1EE46FB4C2E70A329A738 /* NVActivityIndicatorShape.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorShape.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorShape.swift; sourceTree = ""; }; 5268ADFB35236411DE93C356829E69CB /* Pods-Travel-ITTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-ITTests-frameworks.sh"; sourceTree = ""; }; 54615831894153703A6FA5766FAF75AA /* Pods-Travel-IT.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-IT.debug.xcconfig"; sourceTree = ""; }; + 56704D22F3C75A80F138BD4B99B0D130 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + 5842C75713F471B560EEFEC7F9402F0F /* NVActivityIndicatorAnimationPacman.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationPacman.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationPacman.swift; sourceTree = ""; }; 587D0FE5D08CE832F92FF485E882603E /* Pods-Travel-ITTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-ITTests.debug.xcconfig"; sourceTree = ""; }; - 5D449CE4AB8F5B7EFE81B36536184E11 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 60A35E604BC17121A4A7CD3F1C4C484E /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; - 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 58850725A36AF99F2277A2CE053CDE0D /* NVActivityIndicatorView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = NVActivityIndicatorView.modulemap; sourceTree = ""; }; + 5EB251E227CE42F9B98BCD9CC3AABD15 /* NVActivityIndicatorView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NVActivityIndicatorView.framework; path = NVActivityIndicatorView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 665E3864DD26955410DD00292FF859EC /* NVActivityIndicatorAnimationBallScaleMultiple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleMultiple.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleMultiple.swift; sourceTree = ""; }; + 67D976FDBC2C67A8EB07DDF4860633EC /* NVActivityIndicatorAnimationBallGridPulse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallGridPulse.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridPulse.swift; sourceTree = ""; }; + 6990886F87C6B5330C40396BB200D179 /* NVActivityIndicatorAnimationBlank.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBlank.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBlank.swift; sourceTree = ""; }; 69AEF1B70FE84FB377E02086C0AC48FB /* Pods-Travel-IT-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Travel-IT-acknowledgements.plist"; sourceTree = ""; }; - 6C8B8F7807353AE2D112AFC41531D3C6 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 6D0D0BFC943FBBAFD54E7803E2A958ED /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; - 6DB03E8BF6B652DBCCFC5A8191299615 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 73300947B256EE6F72FB33B43BD1CDEF /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; - 77EF702B6A6788ED36396ECCC69AD765 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 6BC1B7795E7960C4F5A91FB12FDB5BFF /* SDWebImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageFrame.h; path = SDWebImage/SDWebImageFrame.h; sourceTree = ""; }; + 6C54F9EE8C6D00CDF2A7F75D3C128F89 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; + 6CA8D6B0DFC5DCD95747F69126946AA2 /* NVActivityIndicatorAnimationDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationDelegate.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/NVActivityIndicatorAnimationDelegate.swift; sourceTree = ""; }; + 74296F01F4D81992F31EB4E5927E7D20 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; + 74C066CD825FA173890DA3A844823A65 /* NVActivityIndicatorAnimationBallPulse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallPulse.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulse.swift; sourceTree = ""; }; + 76F8CFA45B610D5C6BF7C90DA71DF8AB /* NVActivityIndicatorAnimationBallScale.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScale.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScale.swift; sourceTree = ""; }; + 796AFEA2778505BC112A5BF30D7F7225 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScalePulseOutRapid.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScalePulseOutRapid.swift; sourceTree = ""; }; 7A3CE6F078FD7BC2C1D2F8889C5D98BE /* Pods-Travel-ITTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-ITTests-resources.sh"; sourceTree = ""; }; - 7B5E31222A92B9BAB5A78D4CE2FC382C /* SDWebImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageGIFCoder.m; path = SDWebImage/SDWebImageGIFCoder.m; sourceTree = ""; }; - 7B98EE910F928E8CF4F77AB420042575 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - 7BB1FBB6C38894191F46102A41CC5A1F /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 7BF9ECB98E9D7BBE8328A3B57BF2F488 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 7A7536F236B32F962B2A3FE34007C896 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7C23FC40FAF024002C4C260E31A3A060 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; 7C6CAE62659F1BC14B3FEACA71E810FF /* Pods-Travel-ITTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Travel-ITTests-acknowledgements.plist"; sourceTree = ""; }; 7D3933E69FBF36EBDCF6367BD9F174E9 /* Pods-Travel-ITTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Travel-ITTests-umbrella.h"; sourceTree = ""; }; - 7FE0867999E5DC33979A5B787EB1464C /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 807E6BCF9576E9F47CBBA55A517A5302 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; - 830B1498AC1368B42915C9303062ECE1 /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; - 8851F593AF07A933B8B3D67D59F15867 /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; - 8AAB368D8ACA02410D97C36F03EEEBA5 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/UIImage+ForceDecode.h"; sourceTree = ""; }; + 7E7DA5448E9C9117E0ED11B34AE4E899 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 81DAEF4506F2D72D83CF9E466A98F773 /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; + 851EF95C583D4C682D721CB80FD6E3BB /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 884420071EBD92BDC8C31C8F41208863 /* Pods_Travel_IT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_IT.framework; path = "Pods-Travel-IT.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 887649C0CCA86124AC7D73BD737B2DB7 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + 88B2DAEAE02D82A63236044DA6983864 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 88F9361F2F756EE70BA76D9205B73BE4 /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; + 8AEFA2C5F8E95A0FE28177001ABE5FB1 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; 8C765652CA8104E612144091889C11DE /* Pods-Travel-ITTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-ITTests.release.xcconfig"; sourceTree = ""; }; - 8D2CE0B2BD1CD0E400284F0AF18C3467 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - 8DED4961D1449A5A7F5F5BF7940CB0D2 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; - 8E4D24108C9F9C74396D3F0F1B876BB2 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 91770AD2A7BF449871DEA681B8F4F6A7 /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; + 8D03CE02EF4D9B2A8FC8ED9F99F871AE /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 8E0031CA1F09C9BE58927A0778CF70A7 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 8E6CBC9861F795717CA74932B5C04103 /* NVActivityIndicatorAnimationSemiCircleSpin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationSemiCircleSpin.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationSemiCircleSpin.swift; sourceTree = ""; }; + 8F5742F74F6D3EFB474FE1AE755D0C15 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 8FD1E5D68540CA8EBDF6C91FA86D8EF6 /* NVActivityIndicatorAnimationCubeTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationCubeTransition.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationCubeTransition.swift; sourceTree = ""; }; + 8FD4702318FE1FD575B32B4E90696BA0 /* NVActivityIndicatorAnimationBallPulseSync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallPulseSync.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallPulseSync.swift; sourceTree = ""; }; + 91188C312A42D2CAE7EDFB516BAE23E6 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 9160739504A9593099E7029F47C7166F /* NVActivityIndicatorAnimationTriangleSkewSpin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationTriangleSkewSpin.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationTriangleSkewSpin.swift; sourceTree = ""; }; + 91D3BD85C259B069A3399113C7CB18A5 /* Pods_Travel_ITTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_ITTests.framework; path = "Pods-Travel-ITTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 942F79AE8F4998E3E5C73E5D9375F106 /* Pods-Travel-IT-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-IT-resources.sh"; sourceTree = ""; }; - 94B44B6DBC2AFF1CE4EB8BB58E09CD7F /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 9AF8B1359DF9D8043B249280CD580B55 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/UIView+WebCache.m"; sourceTree = ""; }; - 9E40F8718F5BE2CCE05F9DE231DC120D /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 9433B36CB5FB824BEFF083155309F7D7 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 97EEFB6CB6FCB4A75C0CC27972E9876D /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 9A5348D3E12045407168FAF010DF99F4 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 9A6A30281B4C0532A8473109026F1953 /* NVActivityIndicatorView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NVActivityIndicatorView-prefix.pch"; sourceTree = ""; }; + 9BCEC89467B85E99B075870C5D86E8BC /* NVActivityIndicatorView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NVActivityIndicatorView-dummy.m"; sourceTree = ""; }; + 9DABBBCA339A97A9006F935806407BF4 /* SDWebImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoderHelper.h; path = SDWebImage/SDWebImageCoderHelper.h; sourceTree = ""; }; 9E5DCF650FF312CD7CB1064CB9F143CC /* Pods-Travel-ITUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-ITUITests.release.xcconfig"; sourceTree = ""; }; - 9FCF93A97FFB163504CD6051EC04BCAB /* Pods_Travel_IT.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_IT.framework; path = "Pods-Travel-IT.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - A5DB368FCF4F2D59C5CD31B7FA5CEC41 /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/SDImageCacheConfig.m; sourceTree = ""; }; - AA939226649534F56A09D908216A32E7 /* SDWebImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageFrame.m; path = SDWebImage/SDWebImageFrame.m; sourceTree = ""; }; - AC02688B9E73382CFA1F6666934ED47D /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/UIImage+ForceDecode.m"; sourceTree = ""; }; + 9FF71876DA17CBDED7232C9BA615DE23 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + A11609CC1F3401F5E71FD2D153B63DE1 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + A1799ADC3E25451A3374ACAFF03F86CC /* SDWebImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoder.m; path = SDWebImage/SDWebImageCoder.m; sourceTree = ""; }; + A92BA3D933890A0F29A995CA7481FDAE /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + AC55809D9D88FCA610C927E653A4BAF7 /* NVActivityIndicatorViewable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorViewable.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Presenter/NVActivityIndicatorViewable.swift; sourceTree = ""; }; B116D7ED1B7667C2EDA6FE1C74366637 /* Pods-Travel-ITTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Travel-ITTests.modulemap"; sourceTree = ""; }; B5FA6AD6E95A3FE7BF938D3106FAB9FC /* Pods-Travel-IT-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-IT-frameworks.sh"; sourceTree = ""; }; - BFC25C224AB16272B3445982498F6BCF /* Pods_Travel_ITUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_ITUITests.framework; path = "Pods-Travel-ITUITests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + B70283565C95AE256CCA42366A9C6F28 /* NVActivityIndicatorAnimationBallZigZag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallZigZag.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZag.swift; sourceTree = ""; }; + B74E4E0DE61ACB5D466FED2419B61005 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; + BA493A6D08EAF3B18C8BED4CD90B4762 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + C016E49C6946AA10C85F13755A1F720B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C14977F6CAA59760BC77E335D97AF263 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + C17E7C99E72F1104C996D53EE331ADA1 /* NVActivityIndicatorAnimationBallGridBeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallGridBeat.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallGridBeat.swift; sourceTree = ""; }; C1DA6B352E0302730020267D164F7358 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C438B24E7DD69F583FA269786D7AB142 /* SDWebImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCoderHelper.m; path = SDWebImage/SDWebImageCoderHelper.m; sourceTree = ""; }; - C4FEB3814F9E87A29E1EBB359FC225D0 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - C58FCF165A7C548DF6BFE3BC31B7397C /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - C7D4AE9B0003DB1C71D93597A119B565 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; C9705D271EB4378190C97F7DDFC762F0 /* Pods-Travel-IT-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Travel-IT-umbrella.h"; sourceTree = ""; }; - CA3154527136735F086F0FE7A553C394 /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; - CA5694BC925A8C565FB5B42605C36E7C /* SDWebImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCodersManager.h; path = SDWebImage/SDWebImageCodersManager.h; sourceTree = ""; }; - CFA51EA58788DFD1FDF466BE345A079F /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - D329AB35CEB53B9AD5AB6748147A19C4 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SwiftyJSON.modulemap; sourceTree = ""; }; - D4A243B2EBEDBC9D461F24F8F1F818A1 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + CB701936826D06D6DF5B65C8BD4A21AF /* NVActivityIndicatorAnimationBallRotate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallRotate.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallRotate.swift; sourceTree = ""; }; + CD1E4B6D62215D319FB476B3A9BB7B40 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; + CFB344998556E181EE4D2FB1831941C6 /* Pods_Travel_ITUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_ITUITests.framework; path = "Pods-Travel-ITUITests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + D09EF448AFEA47EFCC4618608360BC0F /* SwiftyJSON.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.xcconfig; sourceTree = ""; }; + D0CA8887590EB4DFD3EF5FFB4E7B706C /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + D119F09EF357AF536E57D0FF98F20BEB /* NVActivityIndicatorAnimationLineScale.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineScale.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineScale.swift; sourceTree = ""; }; D513B9633E6796855E4610131D215A28 /* Pods-Travel-ITUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Travel-ITUITests-frameworks.sh"; sourceTree = ""; }; - D67A0E2B669C0BA70428FB1FA58477D6 /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - DDB31B7136FA6A48C2B04036DB5392F6 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SDWebImage.modulemap; sourceTree = ""; }; + D9297887C0C85288D496C1F82529CE9B /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + D97952308A0B96205BE65864C93C60E2 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + DB7626EA60888793AC50CCABE3B685D8 /* SDWebImageImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageImageIOCoder.m; path = SDWebImage/SDWebImageImageIOCoder.m; sourceTree = ""; }; + DD73DDD2C3FA221B74420CC79D87F286 /* NVActivityIndicatorAnimationBallScaleRipple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleRipple.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRipple.swift; sourceTree = ""; }; E17812B5FA565ADB04190A9DBACBCB4F /* Pods-Travel-ITUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Travel-ITUITests.debug.xcconfig"; sourceTree = ""; }; - E3CE2CBFC7DDC86C4BF8903905C95C60 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; - E6E6B653FD120DAA2FE20A46C228D85F /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + E3632A34DEC6F0726C78EAAB011DA2D5 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyJSON.framework; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E71880D4A72EE19D036BF4ADF44E92D2 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallScaleRippleMultiple.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallScaleRippleMultiple.swift; sourceTree = ""; }; E7B95A3B1C39B39273C6E07248B08BA7 /* Pods-Travel-ITTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Travel-ITTests-acknowledgements.markdown"; sourceTree = ""; }; - E95965ED1D3F3916DDDEC5F19D76C120 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - F5DE37C2A3F8EB1A37D909CD16CB8D55 /* SDWebImageImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageImageIOCoder.h; path = SDWebImage/SDWebImageImageIOCoder.h; sourceTree = ""; }; - F65EAE3D82D469E2A1096B52F72A8FE9 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - F68ACFEB0AB9F1C90CFBC7FD5F5283DE /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - F894E446EFE6609D0334CFB9FD65127A /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - FB4E580CE3FEED6258EB676DD0235104 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/SDImageCacheConfig.h; sourceTree = ""; }; - FC5CBCF4316522341143C402F4264F3A /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - FD699A6085F98D26256B1B3AC3BC4CEE /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyJSON.framework; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FE158734C4EA8717C2D12F11E6DC3D69 /* Pods_Travel_ITTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Travel_ITTests.framework; path = "Pods-Travel-ITTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + E8767460F4DC8018D30FDC64E9D2B954 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallZigZagDeflect.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallZigZagDeflect.swift; sourceTree = ""; }; + ECEA146CB4CD23C733CB1318A10DEED8 /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationLineSpinFadeLoader.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationLineSpinFadeLoader.swift; sourceTree = ""; }; + EDAC39D43EB0CFEBBC23DC61284700D1 /* SDWebImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageGIFCoder.h; path = SDWebImage/SDWebImageGIFCoder.h; sourceTree = ""; }; + F0629032CC0AB57CD521C85E96BBDE3C /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + F16104E3B52D74CC4D840989DFE569AF /* SDWebImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCoder.h; path = SDWebImage/SDWebImageCoder.h; sourceTree = ""; }; + F1F6DD09C9104B73D39B8839B97D1DFE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F2D984D943205FFD8E2951C3C313050B /* NSImage+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+WebCache.h"; path = "SDWebImage/NSImage+WebCache.h"; sourceTree = ""; }; + F54DDA6B25E1C197CB27184E854E60FF /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + F5BD5ADDF3EFBAEA930E09D8512C7AF2 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + F948806AA674846AA2BC69FCCD740300 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallSpinFadeLoader.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallSpinFadeLoader.swift; sourceTree = ""; }; + F95B34BF77707C0FA5BCFE363B9B7553 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + FA438700B39E9799A6BFB3ED28FDB236 /* NVActivityIndicatorAnimationBallClipRotatePulse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NVActivityIndicatorAnimationBallClipRotatePulse.swift; path = NVActivityIndicatorView/NVActivityIndicatorView/Animations/NVActivityIndicatorAnimationBallClipRotatePulse.swift; sourceTree = ""; }; + FA78CF269D1C5E71B7B976D4FB3AC2F3 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON.swift; sourceTree = ""; }; + FCAFEF747E920C6EC7E8EA332E7C49F8 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = SDWebImage.modulemap; sourceTree = ""; }; FE2A0EE1AC09F8E3576D8769735F33A8 /* Pods-Travel-IT.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Travel-IT.modulemap"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -200,36 +297,46 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 50B8EBA85D4F4D078ACC0C5544708E74 /* Frameworks */ = { + 3DB0827BDE100ED75D83172497999A0D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E2E57A95CD79C7782DB7CC384590BD36 /* Foundation.framework in Frameworks */, + 723DB28D62DE82F7048DED51AB1B00E3 /* Foundation.framework in Frameworks */, + 190C06522236ECA728A97AF124CD8C88 /* QuartzCore.framework in Frameworks */, + AA31BF27F046968E702885DB18CE4D76 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC034ED38E5D72D02F8D0434EEA6D899 /* Frameworks */ = { + 7269CCA4AEE8335C85F4DBAF1DD98E4B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FE80D2CEA04F23B3275F1ACBF9A98447 /* Foundation.framework in Frameworks */, + 5BC792DC66214AE4C5C29B0D1DE0B039 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9DAB0FCC32D64990F150735E895422B /* Frameworks */ = { + 812764EC1A7362C961E976950F880058 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9607C06EEB79CFE794B4EE39EBE5D283 /* Foundation.framework in Frameworks */, + 5BE3788439F99B90A3E7567BBB6502D8 /* Foundation.framework in Frameworks */, + 8D5B884FA93F0A0ED3F2249BA6C52940 /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F0555FD3AAEC4BC5B75E8A17BF522421 /* Frameworks */ = { + 9AC063B60EC822E60CF6ADA08B4B509F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 59A3F3767D4B6906947A61C960895F5D /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E9DAB0FCC32D64990F150735E895422B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8A50F6C44462AD7B6BC37DB0B3E55349 /* Foundation.framework in Frameworks */, - 50F3204650C9EE484D70BF692B7B3189 /* ImageIO.framework in Frameworks */, + 9607C06EEB79CFE794B4EE39EBE5D283 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -254,56 +361,135 @@ path = "Target Support Files/Pods-Travel-IT"; sourceTree = ""; }; - 1FADA36CBBEBF5DF6696194D87183478 /* iOS */ = { + 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */ = { isa = PBXGroup; children = ( - 6CE29CF4FF5C02028C0A06EC0D2A6120 /* Foundation.framework */, - 635A4BD1CEF7E623C71F97A54BFC3616 /* ImageIO.framework */, + E2944C0A925048D4E5419856DF047925 /* iOS */, ); - name = iOS; + name = Frameworks; sourceTree = ""; }; - 332570AFAB29C760CA8042E5A96D0A12 /* Products */ = { + 23387720C11F38846426FFA2DFE95712 /* NVActivityIndicatorView */ = { isa = PBXGroup; children = ( - 9FCF93A97FFB163504CD6051EC04BCAB /* Pods_Travel_IT.framework */, - FE158734C4EA8717C2D12F11E6DC3D69 /* Pods_Travel_ITTests.framework */, - BFC25C224AB16272B3445982498F6BCF /* Pods_Travel_ITUITests.framework */, - 7FE0867999E5DC33979A5B787EB1464C /* SDWebImage.framework */, - FD699A6085F98D26256B1B3AC3BC4CEE /* SwiftyJSON.framework */, + 5E418B34E732F6E1C7A35FA811F519E6 /* Presenter */, + 5B657DBF07AE0EBE225F666A65C9097E /* Support Files */, ); - name = Products; + name = NVActivityIndicatorView; + path = NVActivityIndicatorView; sourceTree = ""; }; - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { + 3B91DD852EC1218CF443732A76BEFF6B /* Core */ = { isa = PBXGroup; children = ( - 1FADA36CBBEBF5DF6696194D87183478 /* iOS */, + D97952308A0B96205BE65864C93C60E2 /* NSData+ImageContentType.h */, + 8D03CE02EF4D9B2A8FC8ED9F99F871AE /* NSData+ImageContentType.m */, + F2D984D943205FFD8E2951C3C313050B /* NSImage+WebCache.h */, + 4AB615F8D65AEEAAD3D81930D3DD1AB7 /* NSImage+WebCache.m */, + 503E5F1B7DE36867BCDA809504BFEA7B /* SDImageCache.h */, + 2FDFD1C88A518F65B0D782DA534F2BC4 /* SDImageCache.m */, + CD1E4B6D62215D319FB476B3A9BB7B40 /* SDImageCacheConfig.h */, + 1CE2DA22662822BFF899E3634974B239 /* SDImageCacheConfig.m */, + F16104E3B52D74CC4D840989DFE569AF /* SDWebImageCoder.h */, + A1799ADC3E25451A3374ACAFF03F86CC /* SDWebImageCoder.m */, + 9DABBBCA339A97A9006F935806407BF4 /* SDWebImageCoderHelper.h */, + 4D0A57D40CD5D8F5F16DBDB4788E252A /* SDWebImageCoderHelper.m */, + 234694AFC8615402547039C16C617C25 /* SDWebImageCodersManager.h */, + 2C33989B6DE6C96AFA6C88339A5AA7E9 /* SDWebImageCodersManager.m */, + 9FF71876DA17CBDED7232C9BA615DE23 /* SDWebImageCompat.h */, + F54DDA6B25E1C197CB27184E854E60FF /* SDWebImageCompat.m */, + 56704D22F3C75A80F138BD4B99B0D130 /* SDWebImageDownloader.h */, + 91188C312A42D2CAE7EDFB516BAE23E6 /* SDWebImageDownloader.m */, + 851EF95C583D4C682D721CB80FD6E3BB /* SDWebImageDownloaderOperation.h */, + 4A526ECE03ED60C50C73B73E341DAE92 /* SDWebImageDownloaderOperation.m */, + 6BC1B7795E7960C4F5A91FB12FDB5BFF /* SDWebImageFrame.h */, + 88F9361F2F756EE70BA76D9205B73BE4 /* SDWebImageFrame.m */, + EDAC39D43EB0CFEBBC23DC61284700D1 /* SDWebImageGIFCoder.h */, + 07EDE315C1278BDDE0062CCB739175C8 /* SDWebImageGIFCoder.m */, + 81DAEF4506F2D72D83CF9E466A98F773 /* SDWebImageImageIOCoder.h */, + DB7626EA60888793AC50CCABE3B685D8 /* SDWebImageImageIOCoder.m */, + D0CA8887590EB4DFD3EF5FFB4E7B706C /* SDWebImageManager.h */, + F5BD5ADDF3EFBAEA930E09D8512C7AF2 /* SDWebImageManager.m */, + 887649C0CCA86124AC7D73BD737B2DB7 /* SDWebImageOperation.h */, + 9433B36CB5FB824BEFF083155309F7D7 /* SDWebImagePrefetcher.h */, + 8F5742F74F6D3EFB474FE1AE755D0C15 /* SDWebImagePrefetcher.m */, + 1838920EAF6DB6771B7BB3C09CCAFF72 /* UIButton+WebCache.h */, + D9297887C0C85288D496C1F82529CE9B /* UIButton+WebCache.m */, + 7C23FC40FAF024002C4C260E31A3A060 /* UIImage+ForceDecode.h */, + 320A8DAC8869145497D93B8C250DAA1B /* UIImage+ForceDecode.m */, + 97EEFB6CB6FCB4A75C0CC27972E9876D /* UIImage+GIF.h */, + 8E0031CA1F09C9BE58927A0778CF70A7 /* UIImage+GIF.m */, + 21B217E9C6DB1977AFEB4A053DDEF057 /* UIImage+MultiFormat.h */, + 1F6BBB7E293AF60E0ED8D4B8A60948B5 /* UIImage+MultiFormat.m */, + 9A5348D3E12045407168FAF010DF99F4 /* UIImageView+HighlightedWebCache.h */, + A92BA3D933890A0F29A995CA7481FDAE /* UIImageView+HighlightedWebCache.m */, + 26B7D2FB92C7F574B0735F0EDB1DB11D /* UIImageView+WebCache.h */, + 2BECED6CA0C2EA35636DC4C4B741A412 /* UIImageView+WebCache.m */, + 036B8D659962E363AA8DB2A825BE808A /* UIView+WebCache.h */, + 74296F01F4D81992F31EB4E5927E7D20 /* UIView+WebCache.m */, + F0629032CC0AB57CD521C85E96BBDE3C /* UIView+WebCacheOperation.h */, + 7E7DA5448E9C9117E0ED11B34AE4E899 /* UIView+WebCacheOperation.m */, ); - name = Frameworks; + name = Core; sourceTree = ""; }; - 4D174E175B4E9FBD7C2D482C8D7E9A32 /* Support Files */ = { + 5B657DBF07AE0EBE225F666A65C9097E /* Support Files */ = { isa = PBXGroup; children = ( - 14914E4751EB5FD663EE10F10BA37D0F /* Info.plist */, - DDB31B7136FA6A48C2B04036DB5392F6 /* SDWebImage.modulemap */, - 2C68C77B1BE7B85429BAEB61B564C30A /* SDWebImage.xcconfig */, - F65EAE3D82D469E2A1096B52F72A8FE9 /* SDWebImage-dummy.m */, - 5D449CE4AB8F5B7EFE81B36536184E11 /* SDWebImage-prefix.pch */, - 33EE019C6131B3C5733D737786892952 /* SDWebImage-umbrella.h */, + C016E49C6946AA10C85F13755A1F720B /* Info.plist */, + 58850725A36AF99F2277A2CE053CDE0D /* NVActivityIndicatorView.modulemap */, + 3DD69A5D44C66A230E9F656F8952E4A4 /* NVActivityIndicatorView.xcconfig */, + 9BCEC89467B85E99B075870C5D86E8BC /* NVActivityIndicatorView-dummy.m */, + 9A6A30281B4C0532A8473109026F1953 /* NVActivityIndicatorView-prefix.pch */, + 4E357F24E9A33831E68FEB340D4F57D4 /* NVActivityIndicatorView-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + path = "../Target Support Files/NVActivityIndicatorView"; sourceTree = ""; }; - 5E995B3E4589B49E385744AE205BA23E /* Pods */ = { + 5E418B34E732F6E1C7A35FA811F519E6 /* Presenter */ = { isa = PBXGroup; children = ( - 89EBAC9DBA3CC0522BF6959F82ABF2E4 /* SDWebImage */, - 6888CD6ED76690FD4FA7203FEA6E5D38 /* SwiftyJSON */, + 3133037229A800A441251D7BE44A3678 /* NVActivityIndicatorAnimationAudioEqualizer.swift */, + 11B87837B7B7D4E4920AD2286FA8BB59 /* NVActivityIndicatorAnimationBallBeat.swift */, + 4FDEC21F134944F9AACDCECE436EBD2D /* NVActivityIndicatorAnimationBallClipRotate.swift */, + 0585884489E9912E6732370794C39DBE /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift */, + FA438700B39E9799A6BFB3ED28FDB236 /* NVActivityIndicatorAnimationBallClipRotatePulse.swift */, + C17E7C99E72F1104C996D53EE331ADA1 /* NVActivityIndicatorAnimationBallGridBeat.swift */, + 67D976FDBC2C67A8EB07DDF4860633EC /* NVActivityIndicatorAnimationBallGridPulse.swift */, + 74C066CD825FA173890DA3A844823A65 /* NVActivityIndicatorAnimationBallPulse.swift */, + 0F42BBEB2F704F3C312FAD3303E56A0C /* NVActivityIndicatorAnimationBallPulseRise.swift */, + 8FD4702318FE1FD575B32B4E90696BA0 /* NVActivityIndicatorAnimationBallPulseSync.swift */, + CB701936826D06D6DF5B65C8BD4A21AF /* NVActivityIndicatorAnimationBallRotate.swift */, + 08A3A1589B7FD4E830223517123F0C9C /* NVActivityIndicatorAnimationBallRotateChase.swift */, + 76F8CFA45B610D5C6BF7C90DA71DF8AB /* NVActivityIndicatorAnimationBallScale.swift */, + 665E3864DD26955410DD00292FF859EC /* NVActivityIndicatorAnimationBallScaleMultiple.swift */, + DD73DDD2C3FA221B74420CC79D87F286 /* NVActivityIndicatorAnimationBallScaleRipple.swift */, + E71880D4A72EE19D036BF4ADF44E92D2 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift */, + F948806AA674846AA2BC69FCCD740300 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift */, + 16426773EB78970D12D3F463C13EED28 /* NVActivityIndicatorAnimationBallTrianglePath.swift */, + B70283565C95AE256CCA42366A9C6F28 /* NVActivityIndicatorAnimationBallZigZag.swift */, + E8767460F4DC8018D30FDC64E9D2B954 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift */, + 6990886F87C6B5330C40396BB200D179 /* NVActivityIndicatorAnimationBlank.swift */, + 3A75F637375254CD70CEE8AB76B2FA9B /* NVActivityIndicatorAnimationCircleStrokeSpin.swift */, + 8FD1E5D68540CA8EBDF6C91FA86D8EF6 /* NVActivityIndicatorAnimationCubeTransition.swift */, + 6CA8D6B0DFC5DCD95747F69126946AA2 /* NVActivityIndicatorAnimationDelegate.swift */, + D119F09EF357AF536E57D0FF98F20BEB /* NVActivityIndicatorAnimationLineScale.swift */, + 08A39ABAFBAFB8B3AD05EF115F6D0F4B /* NVActivityIndicatorAnimationLineScaleParty.swift */, + 007C6B247352AD09065AE68B7C1674D1 /* NVActivityIndicatorAnimationLineScalePulseOut.swift */, + 796AFEA2778505BC112A5BF30D7F7225 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift */, + ECEA146CB4CD23C733CB1318A10DEED8 /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift */, + 3AFB61A07DD7C2332B3CFDBF9C929A64 /* NVActivityIndicatorAnimationOrbit.swift */, + 5842C75713F471B560EEFEC7F9402F0F /* NVActivityIndicatorAnimationPacman.swift */, + 8E6CBC9861F795717CA74932B5C04103 /* NVActivityIndicatorAnimationSemiCircleSpin.swift */, + 2EAFFCE0841F41BAF95C53C62410E8BB /* NVActivityIndicatorAnimationSquareSpin.swift */, + 9160739504A9593099E7029F47C7166F /* NVActivityIndicatorAnimationTriangleSkewSpin.swift */, + 27866F82DEDE36963BF7FCFA7861FC6C /* NVActivityIndicatorPresenter.swift */, + 5133B7C2EED1EE46FB4C2E70A329A738 /* NVActivityIndicatorShape.swift */, + 3CFE17F095A9CE6F48A825368AFD6C17 /* NVActivityIndicatorView.swift */, + AC55809D9D88FCA610C927E653A4BAF7 /* NVActivityIndicatorViewable.swift */, ); - name = Pods; + name = Presenter; sourceTree = ""; }; 619255747F31DB8C70F50C4A399AF5DC /* Pods-Travel-ITTests */ = { @@ -324,103 +510,97 @@ path = "Target Support Files/Pods-Travel-ITTests"; sourceTree = ""; }; - 6888CD6ED76690FD4FA7203FEA6E5D38 /* SwiftyJSON */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - 8DED4961D1449A5A7F5F5BF7940CB0D2 /* SwiftyJSON.swift */, - 9ED74EA940936E5971FC2F4DF4EAE9E9 /* Support Files */, + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 14B8B9B15ECBE87983FF987239AB2D7B /* Frameworks */, + F346F7E5227AC4CFB611FD38775EAED3 /* Pods */, + 9EE16324532758B6014C715A9C874E21 /* Products */, + F58B3C3E6D8450D51A564BD57FA7D911 /* Targets Support Files */, ); - name = SwiftyJSON; - path = SwiftyJSON; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + 9EE16324532758B6014C715A9C874E21 /* Products */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - 5E995B3E4589B49E385744AE205BA23E /* Pods */, - 332570AFAB29C760CA8042E5A96D0A12 /* Products */, - F58B3C3E6D8450D51A564BD57FA7D911 /* Targets Support Files */, + 5EB251E227CE42F9B98BCD9CC3AABD15 /* NVActivityIndicatorView.framework */, + 884420071EBD92BDC8C31C8F41208863 /* Pods_Travel_IT.framework */, + 91D3BD85C259B069A3399113C7CB18A5 /* Pods_Travel_ITTests.framework */, + CFB344998556E181EE4D2FB1831941C6 /* Pods_Travel_ITUITests.framework */, + BA493A6D08EAF3B18C8BED4CD90B4762 /* SDWebImage.framework */, + E3632A34DEC6F0726C78EAAB011DA2D5 /* SwiftyJSON.framework */, ); + name = Products; sourceTree = ""; }; - 89EBAC9DBA3CC0522BF6959F82ABF2E4 /* SDWebImage */ = { + BC23B5D7AFA8DC678A0CB10A2F268172 /* Support Files */ = { isa = PBXGroup; children = ( - AF7B229EB8C47C161099122BBA2D9C68 /* Core */, - 4D174E175B4E9FBD7C2D482C8D7E9A32 /* Support Files */, + F1F6DD09C9104B73D39B8839B97D1DFE /* Info.plist */, + 1C18AEFAE001E5281FE091E26570175A /* SwiftyJSON.modulemap */, + D09EF448AFEA47EFCC4618608360BC0F /* SwiftyJSON.xcconfig */, + 6C54F9EE8C6D00CDF2A7F75D3C128F89 /* SwiftyJSON-dummy.m */, + 1F2F27341B3377335682B0BC0894B2D1 /* SwiftyJSON-prefix.pch */, + B74E4E0DE61ACB5D466FED2419B61005 /* SwiftyJSON-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftyJSON"; + sourceTree = ""; + }; + E2944C0A925048D4E5419856DF047925 /* iOS */ = { + isa = PBXGroup; + children = ( + BD397F43A4FF86872FBCF272C1D7AE79 /* Foundation.framework */, + F95B34BF77707C0FA5BCFE363B9B7553 /* ImageIO.framework */, + 88B2DAEAE02D82A63236044DA6983864 /* QuartzCore.framework */, + C14977F6CAA59760BC77E335D97AF263 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + EE8D53F8E922F60202CD6593805DA177 /* SwiftyJSON */ = { + isa = PBXGroup; + children = ( + FA78CF269D1C5E71B7B976D4FB3AC2F3 /* SwiftyJSON.swift */, + BC23B5D7AFA8DC678A0CB10A2F268172 /* Support Files */, + ); + name = SwiftyJSON; + path = SwiftyJSON; + sourceTree = ""; + }; + EED116768E403685F25A87EF60AC5E1B /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 3B91DD852EC1218CF443732A76BEFF6B /* Core */, + F51003B324ECBDB8EB4FEF7B901982FF /* Support Files */, ); name = SDWebImage; path = SDWebImage; sourceTree = ""; }; - 9ED74EA940936E5971FC2F4DF4EAE9E9 /* Support Files */ = { + F346F7E5227AC4CFB611FD38775EAED3 /* Pods */ = { isa = PBXGroup; children = ( - 436EF9058C92B7D3FCF1C381BF5E7D38 /* Info.plist */, - D329AB35CEB53B9AD5AB6748147A19C4 /* SwiftyJSON.modulemap */, - 60A35E604BC17121A4A7CD3F1C4C484E /* SwiftyJSON.xcconfig */, - C7D4AE9B0003DB1C71D93597A119B565 /* SwiftyJSON-dummy.m */, - E3CE2CBFC7DDC86C4BF8903905C95C60 /* SwiftyJSON-prefix.pch */, - 73300947B256EE6F72FB33B43BD1CDEF /* SwiftyJSON-umbrella.h */, + 23387720C11F38846426FFA2DFE95712 /* NVActivityIndicatorView */, + EED116768E403685F25A87EF60AC5E1B /* SDWebImage */, + EE8D53F8E922F60202CD6593805DA177 /* SwiftyJSON */, ); - name = "Support Files"; - path = "../Target Support Files/SwiftyJSON"; + name = Pods; sourceTree = ""; }; - AF7B229EB8C47C161099122BBA2D9C68 /* Core */ = { + F51003B324ECBDB8EB4FEF7B901982FF /* Support Files */ = { isa = PBXGroup; children = ( - 030D0A2E9767F3221CF3BB467F20CDCF /* NSData+ImageContentType.h */, - E95965ED1D3F3916DDDEC5F19D76C120 /* NSData+ImageContentType.m */, - 830B1498AC1368B42915C9303062ECE1 /* NSImage+WebCache.h */, - 46FAAFAA4218E6D4F07F749BB4C552A4 /* NSImage+WebCache.m */, - D4A243B2EBEDBC9D461F24F8F1F818A1 /* SDImageCache.h */, - 7B98EE910F928E8CF4F77AB420042575 /* SDImageCache.m */, - FB4E580CE3FEED6258EB676DD0235104 /* SDImageCacheConfig.h */, - A5DB368FCF4F2D59C5CD31B7FA5CEC41 /* SDImageCacheConfig.m */, - 8851F593AF07A933B8B3D67D59F15867 /* SDWebImageCoder.h */, - 0BB8A9D678B89E18580D3CC6609F36AB /* SDWebImageCoder.m */, - 807E6BCF9576E9F47CBBA55A517A5302 /* SDWebImageCoderHelper.h */, - C438B24E7DD69F583FA269786D7AB142 /* SDWebImageCoderHelper.m */, - CA5694BC925A8C565FB5B42605C36E7C /* SDWebImageCodersManager.h */, - 2474F2491264E5C75E11E03D3DA717D5 /* SDWebImageCodersManager.m */, - D67A0E2B669C0BA70428FB1FA58477D6 /* SDWebImageCompat.h */, - 6C8B8F7807353AE2D112AFC41531D3C6 /* SDWebImageCompat.m */, - F68ACFEB0AB9F1C90CFBC7FD5F5283DE /* SDWebImageDownloader.h */, - 9E40F8718F5BE2CCE05F9DE231DC120D /* SDWebImageDownloader.m */, - 2716E37039595D6453F2D62467B39F1D /* SDWebImageDownloaderOperation.h */, - 8D2CE0B2BD1CD0E400284F0AF18C3467 /* SDWebImageDownloaderOperation.m */, - 6D0D0BFC943FBBAFD54E7803E2A958ED /* SDWebImageFrame.h */, - AA939226649534F56A09D908216A32E7 /* SDWebImageFrame.m */, - 91770AD2A7BF449871DEA681B8F4F6A7 /* SDWebImageGIFCoder.h */, - 7B5E31222A92B9BAB5A78D4CE2FC382C /* SDWebImageGIFCoder.m */, - F5DE37C2A3F8EB1A37D909CD16CB8D55 /* SDWebImageImageIOCoder.h */, - CA3154527136735F086F0FE7A553C394 /* SDWebImageImageIOCoder.m */, - F894E446EFE6609D0334CFB9FD65127A /* SDWebImageManager.h */, - 1959DE86423F709E2FE5F43E216E9DC2 /* SDWebImageManager.m */, - FC5CBCF4316522341143C402F4264F3A /* SDWebImageOperation.h */, - 8E4D24108C9F9C74396D3F0F1B876BB2 /* SDWebImagePrefetcher.h */, - 6DB03E8BF6B652DBCCFC5A8191299615 /* SDWebImagePrefetcher.m */, - 94B44B6DBC2AFF1CE4EB8BB58E09CD7F /* UIButton+WebCache.h */, - 7BF9ECB98E9D7BBE8328A3B57BF2F488 /* UIButton+WebCache.m */, - 8AAB368D8ACA02410D97C36F03EEEBA5 /* UIImage+ForceDecode.h */, - AC02688B9E73382CFA1F6666934ED47D /* UIImage+ForceDecode.m */, - 494E72A97BA3B70228254CAE498F362F /* UIImage+GIF.h */, - 77EF702B6A6788ED36396ECCC69AD765 /* UIImage+GIF.m */, - 4D53A09F695BFCF992439504FAD8543C /* UIImage+MultiFormat.h */, - 4A6E6DEBCB950E4631B27398F8893852 /* UIImage+MultiFormat.m */, - 7BB1FBB6C38894191F46102A41CC5A1F /* UIImageView+HighlightedWebCache.h */, - 40180C69247568570B6F268556055401 /* UIImageView+HighlightedWebCache.m */, - C4FEB3814F9E87A29E1EBB359FC225D0 /* UIImageView+WebCache.h */, - C58FCF165A7C548DF6BFE3BC31B7397C /* UIImageView+WebCache.m */, - 04EA491BC2A35496CE5836AB6820557D /* UIView+WebCache.h */, - 9AF8B1359DF9D8043B249280CD580B55 /* UIView+WebCache.m */, - CFA51EA58788DFD1FDF466BE345A079F /* UIView+WebCacheOperation.h */, - E6E6B653FD120DAA2FE20A46C228D85F /* UIView+WebCacheOperation.m */, + 7A7536F236B32F962B2A3FE34007C896 /* Info.plist */, + FCAFEF747E920C6EC7E8EA332E7C49F8 /* SDWebImage.modulemap */, + A11609CC1F3401F5E71FD2D153B63DE1 /* SDWebImage.xcconfig */, + 8AEFA2C5F8E95A0FE28177001ABE5FB1 /* SDWebImage-dummy.m */, + 4196EC7589F0A01C365CB6931C177B40 /* SDWebImage-prefix.pch */, + 43F2BE11737B2E7B7B0D0D30B5591770 /* SDWebImage-umbrella.h */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; F58B3C3E6D8450D51A564BD57FA7D911 /* Targets Support Files */ = { @@ -462,11 +642,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2EFB81CAEC2231B1FA47D66181BC796D /* Headers */ = { + 0365162DA9928E96DE2C3CC825429875 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F680D1AB428E75DCDC824092769C7555 /* SwiftyJSON-umbrella.h in Headers */, + 201612D922EC6A7E9DD5A5D616792B04 /* NSData+ImageContentType.h in Headers */, + 92D2CC08D714C580E987842370D19E34 /* NSImage+WebCache.h in Headers */, + 299F62399B8A4F7B198AFF7E6777BBF3 /* SDImageCache.h in Headers */, + 1A45D0EFED0889022B0F0662E5F1A9F3 /* SDImageCacheConfig.h in Headers */, + 00A060E92D4F9743360EC4509688015E /* SDWebImage-umbrella.h in Headers */, + C11A046B28A0FB465AE9A7108EA4CF25 /* SDWebImageCoder.h in Headers */, + 15FA471D24CAA97266473350C62A5148 /* SDWebImageCoderHelper.h in Headers */, + 3D270DF9A0AE0AC6D9155489912771F2 /* SDWebImageCodersManager.h in Headers */, + F00C1E47EFCABC15BAD0C8366A93B16A /* SDWebImageCompat.h in Headers */, + BBB7AED9265CF0D38FD9CAA5B9BA2FF8 /* SDWebImageDownloader.h in Headers */, + 1D1B2094BB16823EE767C2343BD35F5F /* SDWebImageDownloaderOperation.h in Headers */, + 7DE6A02290FDEFB0AE3DB653352B2B4D /* SDWebImageFrame.h in Headers */, + 3C8E5385426B16CB77BC57CCF0258B68 /* SDWebImageGIFCoder.h in Headers */, + 82DBE0F5E4EA0AA198362CDEB94148EF /* SDWebImageImageIOCoder.h in Headers */, + 2A4A5464B4A5FD4A2CD46FC90EE9B74F /* SDWebImageManager.h in Headers */, + 9431180AECF2BDF08E75BC12EB9D44C0 /* SDWebImageOperation.h in Headers */, + 405E2881FABD1931BB0E2F6F974DA855 /* SDWebImagePrefetcher.h in Headers */, + BA7CD8060BEA3B87B8F5E172677FDA88 /* UIButton+WebCache.h in Headers */, + E0C5CF2EB226D10A5389F6E7AFAF14E9 /* UIImage+ForceDecode.h in Headers */, + 9F5AB908B1AE7FB5F7AB9BD67D412DF7 /* UIImage+GIF.h in Headers */, + C9E9422FA131C7FDB301626F2E12C597 /* UIImage+MultiFormat.h in Headers */, + 7D42F43A43B669759876A946718D8614 /* UIImageView+HighlightedWebCache.h in Headers */, + EF6F18F967D1D7805A920F4F219B4635 /* UIImageView+WebCache.h in Headers */, + 15F12C8C81B778B095D83C63517376EB /* UIView+WebCache.h in Headers */, + 3B577DC66B838EB3E30709FF7AF625A6 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -478,83 +682,68 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A9B4886A988F8B626073BDF8F31ACD31 /* Headers */ = { + 74406DEFAA66B79D2E5A3234CAE2CB30 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - BD8681C39DB1A2B3193B1E751600668D /* Pods-Travel-IT-umbrella.h in Headers */, + 012725CE0A4A4A5B3ACA5C6F8EBC9193 /* Pods-Travel-IT-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B446BF37E66E9AEAB1A0D7F78DACE643 /* Headers */ = { + 7A137430C1276C6F09162CC2677DF5B1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 3AA2B0391D791153C767545097DEE5E8 /* NSData+ImageContentType.h in Headers */, - 70FE8256272684C1853C20428632589F /* NSImage+WebCache.h in Headers */, - 3F84465AD1FD088EA094A3678F41D064 /* SDImageCache.h in Headers */, - 16A32E82EFA2630C94B4908CA5EAA813 /* SDImageCacheConfig.h in Headers */, - 730D948C27A7308F7DCCEE66B49C25C9 /* SDWebImage-umbrella.h in Headers */, - 2989347F9FD5F626086234F38F1BA64D /* SDWebImageCoder.h in Headers */, - 38FBEA58340F150E4F8045CEFF819452 /* SDWebImageCoderHelper.h in Headers */, - 2C1F355C70AFE80B33F207C187C22F51 /* SDWebImageCodersManager.h in Headers */, - 7C2B6CF45410A2340AF08E6FCC65D2E5 /* SDWebImageCompat.h in Headers */, - 61D0A033C11C972E0ACD36265770498F /* SDWebImageDownloader.h in Headers */, - 86C25BE1112F7A6E484997CD7299E519 /* SDWebImageDownloaderOperation.h in Headers */, - B449C297F8B4C5C317D64B400602BF7A /* SDWebImageFrame.h in Headers */, - 440259D6322C9C263E5412F39BB3A75B /* SDWebImageGIFCoder.h in Headers */, - 6ABAAF7408EB0429594E4F014B542A86 /* SDWebImageImageIOCoder.h in Headers */, - 742FAE363085B5521CA56FAAD24FA9F1 /* SDWebImageManager.h in Headers */, - F0CF86A4111557F608A3BFAA310BDEB2 /* SDWebImageOperation.h in Headers */, - 881890718D376BEF59191C28F367C75A /* SDWebImagePrefetcher.h in Headers */, - D7542409A6AEB28721401D7450D6188C /* UIButton+WebCache.h in Headers */, - D192BF1D79DB228DBBB761D54C39CF98 /* UIImage+ForceDecode.h in Headers */, - 75801701EA07B2B03CE17A6EA43E0581 /* UIImage+GIF.h in Headers */, - B08CB351E27636618AB4104A1B7EBC1D /* UIImage+MultiFormat.h in Headers */, - 25F31911023C55528EC7B7C935E140CB /* UIImageView+HighlightedWebCache.h in Headers */, - 4E5BB9778F1A6BAF96A960F5EE536549 /* UIImageView+WebCache.h in Headers */, - 5C234D6F08F902186B7E4E4B81B2B0B6 /* UIView+WebCache.h in Headers */, - 4D93695785C7665969D683ABA49B696A /* UIView+WebCacheOperation.h in Headers */, + C0ECBEF6859B2F3CEB8285AABB087446 /* NVActivityIndicatorView-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D94B6EAF27FA5F4DDB084570975B3F38 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D49672B1E581015B3BFE18D5BB0BF861 /* SwiftyJSON-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 07D7A42FD6EC1FCF07A6F15DD86C22B9 /* SwiftyJSON */ = { + 123F89F7E8DB3444EAD2F61E835952E2 /* NVActivityIndicatorView */ = { isa = PBXNativeTarget; - buildConfigurationList = 47FB57E663CC6F40F0A34A45DF98D824 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; + buildConfigurationList = F8808CC8F44CBB4AF94BD9B9F4ECD43B /* Build configuration list for PBXNativeTarget "NVActivityIndicatorView" */; buildPhases = ( - EDCB21658B3E938EE840FC7F5E6BA449 /* Sources */, - AC034ED38E5D72D02F8D0434EEA6D899 /* Frameworks */, - 2EFB81CAEC2231B1FA47D66181BC796D /* Headers */, + 027AFA83DD3F16DD8FE3DE2BABC95F0C /* Sources */, + 3DB0827BDE100ED75D83172497999A0D /* Frameworks */, + 7A137430C1276C6F09162CC2677DF5B1 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = SwiftyJSON; - productName = SwiftyJSON; - productReference = FD699A6085F98D26256B1B3AC3BC4CEE /* SwiftyJSON.framework */; + name = NVActivityIndicatorView; + productName = NVActivityIndicatorView; + productReference = 5EB251E227CE42F9B98BCD9CC3AABD15 /* NVActivityIndicatorView.framework */; productType = "com.apple.product-type.framework"; }; - 20ADB6BEE838D3A27175B69A7954683B /* Pods-Travel-IT */ = { + 5505D581256D79F8F5D9202861BF1D72 /* Pods-Travel-IT */ = { isa = PBXNativeTarget; - buildConfigurationList = B74E4AE28C94D3A8B4AE73927449844A /* Build configuration list for PBXNativeTarget "Pods-Travel-IT" */; + buildConfigurationList = 2CF5166490E5CEC3C9ADC083224D4CAA /* Build configuration list for PBXNativeTarget "Pods-Travel-IT" */; buildPhases = ( - FCEE9EF28D4EB1063742B7CF6D4952EB /* Sources */, - 50B8EBA85D4F4D078ACC0C5544708E74 /* Frameworks */, - A9B4886A988F8B626073BDF8F31ACD31 /* Headers */, + A7FA88DAFF0E878154EFBB01EEA8DF17 /* Sources */, + 7269CCA4AEE8335C85F4DBAF1DD98E4B /* Frameworks */, + 74406DEFAA66B79D2E5A3234CAE2CB30 /* Headers */, ); buildRules = ( ); dependencies = ( - 163E5B7D9614DC4665120E97919EEBCA /* PBXTargetDependency */, - 31D5BA8979D464DBED79495CD2D8F75B /* PBXTargetDependency */, + 39862FB0AF6994B7C0A5D04ED2CF35DF /* PBXTargetDependency */, + 32884AACBA9DC67A3313AF70A73E06DC /* PBXTargetDependency */, + A2D15E24FF3196EBDBDC66AD688F701D /* PBXTargetDependency */, ); name = "Pods-Travel-IT"; productName = "Pods-Travel-IT"; - productReference = 9FCF93A97FFB163504CD6051EC04BCAB /* Pods_Travel_IT.framework */; + productReference = 884420071EBD92BDC8C31C8F41208863 /* Pods_Travel_IT.framework */; productType = "com.apple.product-type.framework"; }; 5CB6A5925FC7658C9EB09FC0835CD2BB /* Pods-Travel-ITTests */ = { @@ -571,41 +760,58 @@ ); name = "Pods-Travel-ITTests"; productName = "Pods-Travel-ITTests"; - productReference = FE158734C4EA8717C2D12F11E6DC3D69 /* Pods_Travel_ITTests.framework */; + productReference = 91D3BD85C259B069A3399113C7CB18A5 /* Pods_Travel_ITTests.framework */; productType = "com.apple.product-type.framework"; }; - BC6F4DC7FAEEA35C840C86D432EC5493 /* Pods-Travel-ITUITests */ = { + 8A51A6EBFE73154C159A66B69758FD13 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 2B6CB6FE3B6E6490B36B82D660B10283 /* Build configuration list for PBXNativeTarget "Pods-Travel-ITUITests" */; + buildConfigurationList = 03011A07120294C4D9863F765355F2A9 /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - 77E2E1CABFF060E7B51B1EF9B45E2D25 /* Sources */, - 20B5C3CFB9BD24A6A1572F65E732CB7B /* Frameworks */, - 009B905766BC51538249CDFD69A1347B /* Headers */, + 5CCED8549DE22A62E26DE9CA0E086B06 /* Sources */, + 812764EC1A7362C961E976950F880058 /* Frameworks */, + 0365162DA9928E96DE2C3CC825429875 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "Pods-Travel-ITUITests"; - productName = "Pods-Travel-ITUITests"; - productReference = BFC25C224AB16272B3445982498F6BCF /* Pods_Travel_ITUITests.framework */; + name = SDWebImage; + productName = SDWebImage; + productReference = BA493A6D08EAF3B18C8BED4CD90B4762 /* SDWebImage.framework */; productType = "com.apple.product-type.framework"; }; - E01F44823342F817602A965EB4E548B0 /* SDWebImage */ = { + 9AA4E3F1D4150A60A3520ECBFFC53E4A /* SwiftyJSON */ = { isa = PBXNativeTarget; - buildConfigurationList = C7146704C5784D6C4AF317CFA08BFE91 /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = E8143A9DBD6DCC9C5DB089400425A1FD /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; buildPhases = ( - 2467590618D47C5C6D24E3CD86801C61 /* Sources */, - F0555FD3AAEC4BC5B75E8A17BF522421 /* Frameworks */, - B446BF37E66E9AEAB1A0D7F78DACE643 /* Headers */, + 6EB0DD530D81202941980C45BA33DF73 /* Sources */, + 9AC063B60EC822E60CF6ADA08B4B509F /* Frameworks */, + D94B6EAF27FA5F4DDB084570975B3F38 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = SDWebImage; - productName = SDWebImage; - productReference = 7FE0867999E5DC33979A5B787EB1464C /* SDWebImage.framework */; + name = SwiftyJSON; + productName = SwiftyJSON; + productReference = E3632A34DEC6F0726C78EAAB011DA2D5 /* SwiftyJSON.framework */; + productType = "com.apple.product-type.framework"; + }; + BC6F4DC7FAEEA35C840C86D432EC5493 /* Pods-Travel-ITUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B6CB6FE3B6E6490B36B82D660B10283 /* Build configuration list for PBXNativeTarget "Pods-Travel-ITUITests" */; + buildPhases = ( + 77E2E1CABFF060E7B51B1EF9B45E2D25 /* Sources */, + 20B5C3CFB9BD24A6A1572F65E732CB7B /* Frameworks */, + 009B905766BC51538249CDFD69A1347B /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Pods-Travel-ITUITests"; + productName = "Pods-Travel-ITUITests"; + productReference = CFB344998556E181EE4D2FB1831941C6 /* Pods_Travel_ITUITests.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -625,140 +831,155 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 332570AFAB29C760CA8042E5A96D0A12 /* Products */; + productRefGroup = 9EE16324532758B6014C715A9C874E21 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 20ADB6BEE838D3A27175B69A7954683B /* Pods-Travel-IT */, + 123F89F7E8DB3444EAD2F61E835952E2 /* NVActivityIndicatorView */, + 5505D581256D79F8F5D9202861BF1D72 /* Pods-Travel-IT */, 5CB6A5925FC7658C9EB09FC0835CD2BB /* Pods-Travel-ITTests */, BC6F4DC7FAEEA35C840C86D432EC5493 /* Pods-Travel-ITUITests */, - E01F44823342F817602A965EB4E548B0 /* SDWebImage */, - 07D7A42FD6EC1FCF07A6F15DD86C22B9 /* SwiftyJSON */, + 8A51A6EBFE73154C159A66B69758FD13 /* SDWebImage */, + 9AA4E3F1D4150A60A3520ECBFFC53E4A /* SwiftyJSON */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 2467590618D47C5C6D24E3CD86801C61 /* Sources */ = { + 027AFA83DD3F16DD8FE3DE2BABC95F0C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - CDA06C1C35948EAB191E19BC38306CF4 /* NSData+ImageContentType.m in Sources */, - 77974996DDE24A6C3FA5E47B52C843C3 /* NSImage+WebCache.m in Sources */, - C5B7FBFEB891220FC0A35952C95EAC12 /* SDImageCache.m in Sources */, - BB12574B19100EF6B01D2A1ADC5A37B1 /* SDImageCacheConfig.m in Sources */, - 0D7199DC8A386DFA34F5562C37362068 /* SDWebImage-dummy.m in Sources */, - 5B214BC1351197585F1B1A8E22405206 /* SDWebImageCoder.m in Sources */, - 86F6038F409E39F6E81DF2EC900CD7CC /* SDWebImageCoderHelper.m in Sources */, - 8101C3DACA6CC67FAD82BBFF946661C8 /* SDWebImageCodersManager.m in Sources */, - 6EC44E6E29520C10D74D1826D134A0E2 /* SDWebImageCompat.m in Sources */, - 68671898F46FA03961938B1502FC2605 /* SDWebImageDownloader.m in Sources */, - 24AED0803DD4BFD2BF5D6542D9BDBB83 /* SDWebImageDownloaderOperation.m in Sources */, - 4A1437D7EF958729CF526D55758F7DFA /* SDWebImageFrame.m in Sources */, - 54715C571230A756299D6D08EA23B20B /* SDWebImageGIFCoder.m in Sources */, - 868132B22B78992B5303E366E5F1483C /* SDWebImageImageIOCoder.m in Sources */, - E26383B88022E2173B9A60FD6E1C7D1D /* SDWebImageManager.m in Sources */, - 1D10BFAB9D1A3AC8871B02FB4508B54B /* SDWebImagePrefetcher.m in Sources */, - 8D08B0767DDB917EE102B13F3C5D6205 /* UIButton+WebCache.m in Sources */, - 2E0EC38C45811F38B7B224717F725846 /* UIImage+ForceDecode.m in Sources */, - 79F507BE37C6ED36A84D5A49B5EEFBEC /* UIImage+GIF.m in Sources */, - 5728224CFE945C29A0B4102212FEDD02 /* UIImage+MultiFormat.m in Sources */, - 2F7948D3EB225636C922F1687C91AE15 /* UIImageView+HighlightedWebCache.m in Sources */, - C6B30CAA5970FAFBDB486A23A5220F37 /* UIImageView+WebCache.m in Sources */, - 19CC7126EB5F566D2FFC5AA05376D9D5 /* UIView+WebCache.m in Sources */, - B3CD8DDB3B36F7C12CD3AE04AD35B614 /* UIView+WebCacheOperation.m in Sources */, + E98FA6836DCAEE696E8F409DAA4A0E62 /* NVActivityIndicatorAnimationAudioEqualizer.swift in Sources */, + F122EC7E2474616062D9ED2044D191B9 /* NVActivityIndicatorAnimationBallBeat.swift in Sources */, + 063B88FFA06E95EB49CE72C2BEBE3F85 /* NVActivityIndicatorAnimationBallClipRotate.swift in Sources */, + BDD240E0BD3BBF0FA699B5C52338B724 /* NVActivityIndicatorAnimationBallClipRotateMultiple.swift in Sources */, + 615322F2C514B31DE3EB8CA5E6C517DA /* NVActivityIndicatorAnimationBallClipRotatePulse.swift in Sources */, + D1714D423A6178ED5EBDE141BC54748A /* NVActivityIndicatorAnimationBallGridBeat.swift in Sources */, + FB2BCFA934419C458B3E982AF4466AC9 /* NVActivityIndicatorAnimationBallGridPulse.swift in Sources */, + E6EB8965FA41B283A0C2BBF698B35BDA /* NVActivityIndicatorAnimationBallPulse.swift in Sources */, + AC585B4D87F4C5CBDCCB4649AED80166 /* NVActivityIndicatorAnimationBallPulseRise.swift in Sources */, + 8717D35760CCF360C98DD9BD0376AE63 /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */, + 091973F6AA1CF9731066FECF78514263 /* NVActivityIndicatorAnimationBallRotate.swift in Sources */, + C609BA45AA1975C5C0758A22960737E9 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */, + C2A0AFF69B9ACFCCC19BB4C36EDCFF91 /* NVActivityIndicatorAnimationBallScale.swift in Sources */, + A8A10642A82DA3D565C8D4D14840A2B0 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */, + 9A408E26A4697A7FA6C2C48E906B9972 /* NVActivityIndicatorAnimationBallScaleRipple.swift in Sources */, + 34FE04F57131E0AB680F1E03C246F67D /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift in Sources */, + 768C8652FEF1CB4AA9CAEF22E77A09AC /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift in Sources */, + 48753AF272E9FA0C7246418D6E224E40 /* NVActivityIndicatorAnimationBallTrianglePath.swift in Sources */, + 36600E995DF9181E2248FCD11DFB97E4 /* NVActivityIndicatorAnimationBallZigZag.swift in Sources */, + 572F96C7CA4E1AE3F138B052240F09D1 /* NVActivityIndicatorAnimationBallZigZagDeflect.swift in Sources */, + ACE59066B57330A6D5C7E38F52A8E9D6 /* NVActivityIndicatorAnimationBlank.swift in Sources */, + 441861BF61250ADC4C2114252E433251 /* NVActivityIndicatorAnimationCircleStrokeSpin.swift in Sources */, + EF365A33EEDD245B80092EC12ADA816C /* NVActivityIndicatorAnimationCubeTransition.swift in Sources */, + 3C607ADC9595216CA479F9F4A0D58D0C /* NVActivityIndicatorAnimationDelegate.swift in Sources */, + C49D71662CD248300BFFEEA63EEA11B7 /* NVActivityIndicatorAnimationLineScale.swift in Sources */, + 8F6787786A7FE2C59EC66A8364AA1A77 /* NVActivityIndicatorAnimationLineScaleParty.swift in Sources */, + 09EBC7840465583F3B2D5BB5AAC5A4EF /* NVActivityIndicatorAnimationLineScalePulseOut.swift in Sources */, + D18F49124CA60E7A1EEE5412B2E2B113 /* NVActivityIndicatorAnimationLineScalePulseOutRapid.swift in Sources */, + 92B77CDA30DF4D1C0FD68DFBB2227FEC /* NVActivityIndicatorAnimationLineSpinFadeLoader.swift in Sources */, + 7A04BD9028666AB823CB5047B9787109 /* NVActivityIndicatorAnimationOrbit.swift in Sources */, + A1BB2C33EF9E54F72960C95B4CE4E038 /* NVActivityIndicatorAnimationPacman.swift in Sources */, + D6DD4A7F1E9FF1C03B6320D95AE15517 /* NVActivityIndicatorAnimationSemiCircleSpin.swift in Sources */, + 0E2F3568A1B114FBC37F0740937E6EE6 /* NVActivityIndicatorAnimationSquareSpin.swift in Sources */, + 57A4780A029CB799590D16EDC9E8A347 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */, + 8A92EAAB56504D993B3D5B545D08638A /* NVActivityIndicatorPresenter.swift in Sources */, + 411892EE5CCD02CA9B1B8F48935856D4 /* NVActivityIndicatorShape.swift in Sources */, + E2346CB93BA704418C22B0E141D301C0 /* NVActivityIndicatorView-dummy.m in Sources */, + DB26BFF8E95B8DA303734941BA4E9967 /* NVActivityIndicatorView.swift in Sources */, + 945A586D96085643F587C19764C9CF28 /* NVActivityIndicatorViewable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 77E2E1CABFF060E7B51B1EF9B45E2D25 /* Sources */ = { + 5CCED8549DE22A62E26DE9CA0E086B06 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4E7C8465A8B0BA67A8AB320A2847C9C /* Pods-Travel-ITUITests-dummy.m in Sources */, + 4A97BFA49D258276CB2604A4AAAEAAC3 /* NSData+ImageContentType.m in Sources */, + 67024CA975DCE13D6E16EEE0D83AF923 /* NSImage+WebCache.m in Sources */, + CBCA49C6966B075C43D482A03077FBF4 /* SDImageCache.m in Sources */, + EF6E20153B5E98E157284DBD710F9340 /* SDImageCacheConfig.m in Sources */, + 320CF840E2E5D16BC1A499FE05D2C04F /* SDWebImage-dummy.m in Sources */, + D97D1D5EA372E809799908BD7BC1E149 /* SDWebImageCoder.m in Sources */, + 593327D0402479D46868BD564F22A924 /* SDWebImageCoderHelper.m in Sources */, + A72B2C6C984F03980DCACF70C68874EE /* SDWebImageCodersManager.m in Sources */, + F04FBB802B9861A8A72E0B579380E39E /* SDWebImageCompat.m in Sources */, + 9F1989D547B2013AF64E5CD6A5085105 /* SDWebImageDownloader.m in Sources */, + 8A68CE486B24663885C98B5E1FD50E8B /* SDWebImageDownloaderOperation.m in Sources */, + 081414D727179033DBBA9632C67091EF /* SDWebImageFrame.m in Sources */, + C8234E60517AD412129A04D6BC8F85EF /* SDWebImageGIFCoder.m in Sources */, + 5B83FFB0234A941EA80748FD67FF47BA /* SDWebImageImageIOCoder.m in Sources */, + CC21FE8AD0DE34E633159ED0EE46CC2D /* SDWebImageManager.m in Sources */, + EDD7904F79DEE1BBEAE7E44439B3071D /* SDWebImagePrefetcher.m in Sources */, + 09C2108146870B7A73DB327C82376FB6 /* UIButton+WebCache.m in Sources */, + AC9F3542ECCFC163811BC9257882C2BD /* UIImage+ForceDecode.m in Sources */, + A43224CD8A416C7507B4611DB6ACF478 /* UIImage+GIF.m in Sources */, + D85FA749403316B4FACC1048345D332B /* UIImage+MultiFormat.m in Sources */, + 229688DAFCC8F499E6CFB263607D1C9A /* UIImageView+HighlightedWebCache.m in Sources */, + F96CFE2D23307ADFD341623F156A0450 /* UIImageView+WebCache.m in Sources */, + 43600914CEF70E033DF82211BB4E1DF7 /* UIView+WebCache.m in Sources */, + 8097E07185D2FCEA2ADAAF0772BB09EB /* UIView+WebCacheOperation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80A8FAA5E8C1B775D07356354098676E /* Sources */ = { + 6EB0DD530D81202941980C45BA33DF73 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F7FEF47D173E94D660BD3FCFEB32135F /* Pods-Travel-ITTests-dummy.m in Sources */, + 4E699035847CE8D9BE61C63DD6B94B13 /* SwiftyJSON-dummy.m in Sources */, + 62AE9A58945EC9658FB97E0EC2864001 /* SwiftyJSON.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 77E2E1CABFF060E7B51B1EF9B45E2D25 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C4E7C8465A8B0BA67A8AB320A2847C9C /* Pods-Travel-ITUITests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EDCB21658B3E938EE840FC7F5E6BA449 /* Sources */ = { + 80A8FAA5E8C1B775D07356354098676E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 96B428EF0F6C0BD128000FF299D72674 /* SwiftyJSON-dummy.m in Sources */, - E33F191C7BECB77679B52EC561017F78 /* SwiftyJSON.swift in Sources */, + F7FEF47D173E94D660BD3FCFEB32135F /* Pods-Travel-ITTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FCEE9EF28D4EB1063742B7CF6D4952EB /* Sources */ = { + A7FA88DAFF0E878154EFBB01EEA8DF17 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 515575C702A440F42033A6730FB8A2C3 /* Pods-Travel-IT-dummy.m in Sources */, + 16042C860E94257BEC8214536D7DAF03 /* Pods-Travel-IT-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 163E5B7D9614DC4665120E97919EEBCA /* PBXTargetDependency */ = { + 32884AACBA9DC67A3313AF70A73E06DC /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SDWebImage; - target = E01F44823342F817602A965EB4E548B0 /* SDWebImage */; - targetProxy = F3099118F9906C112EFE36FBBF847BF1 /* PBXContainerItemProxy */; + target = 8A51A6EBFE73154C159A66B69758FD13 /* SDWebImage */; + targetProxy = 3BB98140829DA6A6BC2CE112895A8DC6 /* PBXContainerItemProxy */; }; - 31D5BA8979D464DBED79495CD2D8F75B /* PBXTargetDependency */ = { + 39862FB0AF6994B7C0A5D04ED2CF35DF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = NVActivityIndicatorView; + target = 123F89F7E8DB3444EAD2F61E835952E2 /* NVActivityIndicatorView */; + targetProxy = 83036AF8DBDB1366DBD6FC869A860214 /* PBXContainerItemProxy */; + }; + A2D15E24FF3196EBDBDC66AD688F701D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftyJSON; - target = 07D7A42FD6EC1FCF07A6F15DD86C22B9 /* SwiftyJSON */; - targetProxy = 479F571E5917B028BA7B3DCD4F2AAFA9 /* PBXContainerItemProxy */; + target = 9AA4E3F1D4150A60A3520ECBFFC53E4A /* SwiftyJSON */; + targetProxy = 33C17AEFCFF4AED36296730ABBECA001 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 02C72FE9F1F9A208FBDE0E6AB0FFD12B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 30D7CC58B56BEFDBA32944811FCC0039 /* Pods-Travel-IT.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Travel-IT/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Travel-IT/Pods-Travel-IT.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Travel_IT; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 0D6BEF61500CD49F8E8CB57C9FE5BF6D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8C765652CA8104E612144091889C11DE /* Pods-Travel-ITTests.release.xcconfig */; @@ -795,16 +1016,16 @@ }; name = Release; }; - 1694511BB8F6D3A18D8225C09802367A /* Debug */ = { + 108DC18C62EE55BF90C8DA79138E7EBD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54615831894153703A6FA5766FAF75AA /* Pods-Travel-IT.debug.xcconfig */; + baseConfigurationReference = 30D7CC58B56BEFDBA32944811FCC0039 /* Pods-Travel-IT.release.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -817,7 +1038,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-Travel-IT/Pods-Travel-IT.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -825,14 +1046,13 @@ PRODUCT_NAME = Pods_Travel_IT; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; 1A41B15D3AA834993ADDD808FA9D8764 /* Release */ = { isa = XCBuildConfiguration; @@ -878,9 +1098,9 @@ }; name = Release; }; - 1D1505950A4F3580E592D6FF050A9963 /* Debug */ = { + 4259E25C1C1154E53BC1BC335BCD184C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 60A35E604BC17121A4A7CD3F1C4C484E /* SwiftyJSON.xcconfig */; + baseConfigurationReference = E17812B5FA565ADB04190A9DBACBCB4F /* Pods-Travel-ITUITests.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -894,35 +1114,36 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Travel-ITUITests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = SwiftyJSON; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Travel_ITUITests; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 247AC4756BEFBE54F08754BA08247D45 /* Release */ = { + 67E87B5C10F08FC2879A53B92DFAA1A7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C68C77B1BE7B85429BAEB61B564C30A /* SDWebImage.xcconfig */; + baseConfigurationReference = A11609CC1F3401F5E71FD2D153B63DE1 /* SDWebImage.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -935,7 +1156,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; + MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -945,46 +1166,11 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 40D05A903F858723F3A67C19BB2D44E3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 60A35E604BC17121A4A7CD3F1C4C484E /* SwiftyJSON.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; + name = Debug; }; - 4259E25C1C1154E53BC1BC335BCD184C /* Debug */ = { + 6A0C9BD001F9FDFEFF66CC92A55C64D6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E17812B5FA565ADB04190A9DBACBCB4F /* Pods-Travel-ITUITests.debug.xcconfig */; + baseConfigurationReference = 587D0FE5D08CE832F92FF485E882603E /* Pods-Travel-ITTests.debug.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -998,18 +1184,18 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Travel-ITUITests/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Travel-ITTests/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Travel_ITUITests; + PRODUCT_NAME = Pods_Travel_ITTests; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1018,52 +1204,51 @@ }; name = Debug; }; - 6A0C9BD001F9FDFEFF66CC92A55C64D6 /* Debug */ = { + 809BE066D624697FFE3DD1E2E83EFB7E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 587D0FE5D08CE832F92FF485E882603E /* Pods-Travel-ITTests.debug.xcconfig */; + baseConfigurationReference = D09EF448AFEA47EFCC4618608360BC0F /* SwiftyJSON.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-Travel-ITTests/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Travel_ITTests; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = SwiftyJSON; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - A534B093C478926099E80EDAB83060D3 /* Debug */ = { + 9AB370E76E7E5264AD2BEC72F9992D60 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2C68C77B1BE7B85429BAEB61B564C30A /* SDWebImage.xcconfig */; + baseConfigurationReference = A11609CC1F3401F5E71FD2D153B63DE1 /* SDWebImage.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; @@ -1076,7 +1261,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = SDWebImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -1086,7 +1271,7 @@ VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; AFD29721D3E2E35F7BA398ADC55F7374 /* Release */ = { isa = XCBuildConfiguration; @@ -1173,9 +1358,162 @@ }; name = Debug; }; + DA373F2A891C1F8F059E3EF3D73F4DB2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3DD69A5D44C66A230E9F656F8952E4A4 /* NVActivityIndicatorView.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NVActivityIndicatorView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = NVActivityIndicatorView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + E1C8B1837E7869A20E50E7F4922E34DD /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3DD69A5D44C66A230E9F656F8952E4A4 /* NVActivityIndicatorView.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/NVActivityIndicatorView/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = NVActivityIndicatorView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E40E92FFFCC6333CE81D4EAF66F129BD /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 54615831894153703A6FA5766FAF75AA /* Pods-Travel-IT.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-Travel-IT/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Travel-IT/Pods-Travel-IT.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_Travel_IT; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E7E15473B3BA2C355D931BA2DC6A90C3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D09EF448AFEA47EFCC4618608360BC0F /* SwiftyJSON.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 03011A07120294C4D9863F765355F2A9 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 67E87B5C10F08FC2879A53B92DFAA1A7 /* Debug */, + 9AB370E76E7E5264AD2BEC72F9992D60 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2B6CB6FE3B6E6490B36B82D660B10283 /* Build configuration list for PBXNativeTarget "Pods-Travel-ITUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1185,47 +1523,47 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 2CF5166490E5CEC3C9ADC083224D4CAA /* Build configuration list for PBXNativeTarget "Pods-Travel-IT" */ = { isa = XCConfigurationList; buildConfigurations = ( - BC80BBB5C066539FFFC0B2127CA5D3C4 /* Debug */, - 1A41B15D3AA834993ADDD808FA9D8764 /* Release */, + E40E92FFFCC6333CE81D4EAF66F129BD /* Debug */, + 108DC18C62EE55BF90C8DA79138E7EBD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 47FB57E663CC6F40F0A34A45DF98D824 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1D1505950A4F3580E592D6FF050A9963 /* Debug */, - 40D05A903F858723F3A67C19BB2D44E3 /* Release */, + BC80BBB5C066539FFFC0B2127CA5D3C4 /* Debug */, + 1A41B15D3AA834993ADDD808FA9D8764 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B74E4AE28C94D3A8B4AE73927449844A /* Build configuration list for PBXNativeTarget "Pods-Travel-IT" */ = { + DC27D4531892CC80697A148928DD80AE /* Build configuration list for PBXNativeTarget "Pods-Travel-ITTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1694511BB8F6D3A18D8225C09802367A /* Debug */, - 02C72FE9F1F9A208FBDE0E6AB0FFD12B /* Release */, + 6A0C9BD001F9FDFEFF66CC92A55C64D6 /* Debug */, + 0D6BEF61500CD49F8E8CB57C9FE5BF6D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C7146704C5784D6C4AF317CFA08BFE91 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + E8143A9DBD6DCC9C5DB089400425A1FD /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( - A534B093C478926099E80EDAB83060D3 /* Debug */, - 247AC4756BEFBE54F08754BA08247D45 /* Release */, + E7E15473B3BA2C355D931BA2DC6A90C3 /* Debug */, + 809BE066D624697FFE3DD1E2E83EFB7E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - DC27D4531892CC80697A148928DD80AE /* Build configuration list for PBXNativeTarget "Pods-Travel-ITTests" */ = { + F8808CC8F44CBB4AF94BD9B9F4ECD43B /* Build configuration list for PBXNativeTarget "NVActivityIndicatorView" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6A0C9BD001F9FDFEFF66CC92A55C64D6 /* Debug */, - 0D6BEF61500CD49F8E8CB57C9FE5BF6D /* Release */, + E1C8B1837E7869A20E50E7F4922E34DD /* Debug */, + DA373F2A891C1F8F059E3EF3D73F4DB2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/NVActivityIndicatorView.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/NVActivityIndicatorView.xcscheme new file mode 100644 index 0000000..f88d4c4 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/NVActivityIndicatorView.xcscheme @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/Pods-Travel-IT.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/Pods-Travel-IT.xcscheme index f287a4e..6dfaf77 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/Pods-Travel-IT.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/Pods-Travel-IT.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -47,7 +47,7 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SDWebImage.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SDWebImage.xcscheme index ead8dfb..ba38b0f 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SDWebImage.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SDWebImage.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SwiftyJSON.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SwiftyJSON.xcscheme index 1209432..235416d 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SwiftyJSON.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/SwiftyJSON.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist index e67023e..44cb884 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,41 +4,48 @@ SchemeUserState - Pods-Travel-IT.xcscheme + NVActivityIndicatorView.xcscheme isShown orderHint 0 - Pods-Travel-ITTests.xcscheme + Pods-Travel-IT.xcscheme isShown orderHint 1 - Pods-Travel-ITUITests.xcscheme + Pods-Travel-ITTests.xcscheme isShown orderHint 2 - SDWebImage.xcscheme + Pods-Travel-ITUITests.xcscheme isShown orderHint 3 - SwiftyJSON.xcscheme + SDWebImage.xcscheme isShown orderHint 4 + SwiftyJSON.xcscheme + + isShown + + orderHint + 5 + SuppressBuildableAutocreation diff --git a/Pods/Target Support Files/NVActivityIndicatorView/Info.plist b/Pods/Target Support Files/NVActivityIndicatorView/Info.plist new file mode 100644 index 0000000..cd98f8a --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 4.1.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-dummy.m b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-dummy.m new file mode 100644 index 0000000..4651318 --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_NVActivityIndicatorView : NSObject +@end +@implementation PodsDummy_NVActivityIndicatorView +@end diff --git a/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-umbrella.h b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-umbrella.h new file mode 100644 index 0000000..0e45e56 --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double NVActivityIndicatorViewVersionNumber; +FOUNDATION_EXPORT const unsigned char NVActivityIndicatorViewVersionString[]; + diff --git a/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap new file mode 100644 index 0000000..7b8de36 --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.modulemap @@ -0,0 +1,6 @@ +framework module NVActivityIndicatorView { + umbrella header "NVActivityIndicatorView-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.xcconfig b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.xcconfig new file mode 100644 index 0000000..e6bce62 --- /dev/null +++ b/Pods/Target Support Files/NVActivityIndicatorView/NVActivityIndicatorView.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "QuartzCore" -framework "UIKit" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/NVActivityIndicatorView +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.markdown b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.markdown index 89ae6c3..f2c6433 100644 --- a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.markdown @@ -1,6 +1,31 @@ # Acknowledgements This application makes use of the following third party libraries: +## NVActivityIndicatorView + +The MIT License (MIT) + +Copyright (c) 2016 Vinh Nguyen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + ## SDWebImage Copyright (c) 2009-2017 Olivier Poitrey rs@dailymotion.com diff --git a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.plist b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.plist index b774d1a..3d936db 100644 --- a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-acknowledgements.plist @@ -12,6 +12,37 @@ Type PSGroupSpecifier + + FooterText + The MIT License (MIT) + +Copyright (c) 2016 Vinh Nguyen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + NVActivityIndicatorView + Type + PSGroupSpecifier + FooterText Copyright (c) 2009-2017 Olivier Poitrey rs@dailymotion.com diff --git a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-frameworks.sh b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-frameworks.sh index 9fa6e79..ee79b5d 100755 --- a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-frameworks.sh +++ b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-frameworks.sh @@ -102,10 +102,12 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" fi diff --git a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.debug.xcconfig b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.debug.xcconfig index 981881a..da26ca7 100644 --- a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.debug.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "SDWebImage" -framework "SwiftyJSON" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "NVActivityIndicatorView" -framework "SDWebImage" -framework "SwiftyJSON" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.release.xcconfig b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.release.xcconfig index 981881a..da26ca7 100644 --- a/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.release.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.release.xcconfig @@ -1,9 +1,9 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "SDWebImage" -framework "SwiftyJSON" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "NVActivityIndicatorView" -framework "SDWebImage" -framework "SwiftyJSON" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.debug.xcconfig b/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.debug.xcconfig index 62e96b5..26f0008 100644 --- a/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.debug.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.release.xcconfig b/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.release.xcconfig index 62e96b5..26f0008 100644 --- a/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-ITTests/Pods-Travel-ITTests.release.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.debug.xcconfig b/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.debug.xcconfig index 62e96b5..26f0008 100644 --- a/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.debug.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.release.xcconfig b/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.release.xcconfig index 62e96b5..26f0008 100644 --- a/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.release.xcconfig +++ b/Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.release.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/NVActivityIndicatorView/NVActivityIndicatorView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SDWebImage/SDWebImage.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Travel-IT.xcodeproj/project.pbxproj b/Travel-IT.xcodeproj/project.pbxproj index 17ede7b..b366d76 100644 --- a/Travel-IT.xcodeproj/project.pbxproj +++ b/Travel-IT.xcodeproj/project.pbxproj @@ -18,6 +18,16 @@ 147B5107205D6106001424D2 /* PostShowVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 147B5106205D6106001424D2 /* PostShowVC.swift */; }; 14A724CE2063D16200A9BE47 /* HotPosts.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14A724CD2063D16200A9BE47 /* HotPosts.storyboard */; }; 14A724D12063D7BA00A9BE47 /* CustomNavigationVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A724D02063D7BA00A9BE47 /* CustomNavigationVC.swift */; }; + 14A724D32063DCD100A9BE47 /* CustomTabbarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A724D22063DCD100A9BE47 /* CustomTabbarVC.swift */; }; + 14A724D52063DD0400A9BE47 /* BaseColours.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A724D42063DD0400A9BE47 /* BaseColours.swift */; }; + 14E6026B20652233006BAFCF /* Tools.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14E6026A20652233006BAFCF /* Tools.storyboard */; }; + 14E6026D20652242006BAFCF /* UserProfile.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 14E6026C20652242006BAFCF /* UserProfile.storyboard */; }; + 14E6026F206522C3006BAFCF /* UsefulSteemitToolsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E6026E206522C3006BAFCF /* UsefulSteemitToolsVC.swift */; }; + 14E60271206524A3006BAFCF /* UserProfileVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E60270206524A3006BAFCF /* UserProfileVC.swift */; }; + 14E6027320652A5D006BAFCF /* HotPostsListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E6027220652A5D006BAFCF /* HotPostsListVC.swift */; }; + 14E6027520652BBF006BAFCF /* HotPostShowVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E6027420652BBF006BAFCF /* HotPostShowVC.swift */; }; + 14E6027720652C3C006BAFCF /* HotPostsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E6027620652C3C006BAFCF /* HotPostsTableCell.swift */; }; + 14E6027F2067B6A5006BAFCF /* UIView+Properties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E6027E2067B6A5006BAFCF /* UIView+Properties.swift */; }; 2EB6F374AFCD37B268E0BA7B /* Pods_Travel_IT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77E094BB8B0A5EB6212CBC3B /* Pods_Travel_IT.framework */; }; 7307BF747F9CDEE969022D9C /* Pods_Travel_ITTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA610B383F2F8AC9B37B0BD6 /* Pods_Travel_ITTests.framework */; }; A12012B856DB71FC4FF8E70A /* Pods_Travel_ITUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75C12EDD7E7937C95839A771 /* Pods_Travel_ITUITests.framework */; }; @@ -59,6 +69,16 @@ 147B5106205D6106001424D2 /* PostShowVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostShowVC.swift; sourceTree = ""; }; 14A724CD2063D16200A9BE47 /* HotPosts.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = HotPosts.storyboard; sourceTree = ""; }; 14A724D02063D7BA00A9BE47 /* CustomNavigationVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomNavigationVC.swift; sourceTree = ""; }; + 14A724D22063DCD100A9BE47 /* CustomTabbarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTabbarVC.swift; sourceTree = ""; }; + 14A724D42063DD0400A9BE47 /* BaseColours.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseColours.swift; sourceTree = ""; }; + 14E6026A20652233006BAFCF /* Tools.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Tools.storyboard; sourceTree = ""; }; + 14E6026C20652242006BAFCF /* UserProfile.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = UserProfile.storyboard; sourceTree = ""; }; + 14E6026E206522C3006BAFCF /* UsefulSteemitToolsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsefulSteemitToolsVC.swift; sourceTree = ""; }; + 14E60270206524A3006BAFCF /* UserProfileVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileVC.swift; sourceTree = ""; }; + 14E6027220652A5D006BAFCF /* HotPostsListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HotPostsListVC.swift; sourceTree = ""; }; + 14E6027420652BBF006BAFCF /* HotPostShowVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HotPostShowVC.swift; sourceTree = ""; }; + 14E6027620652C3C006BAFCF /* HotPostsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HotPostsTableCell.swift; sourceTree = ""; }; + 14E6027E2067B6A5006BAFCF /* UIView+Properties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Properties.swift"; sourceTree = ""; }; 2FB3863114ABC1A69AF198B0 /* Pods-Travel-ITUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Travel-ITUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.debug.xcconfig"; sourceTree = ""; }; 3CA0381B9729E9456583DD57 /* Pods-Travel-ITUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Travel-ITUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Travel-ITUITests/Pods-Travel-ITUITests.release.xcconfig"; sourceTree = ""; }; 40D2DA033EA82685DFCA66D7 /* Pods-Travel-IT.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Travel-IT.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT.debug.xcconfig"; sourceTree = ""; }; @@ -124,6 +144,8 @@ children = ( 14A724CA2063D0F600A9BE47 /* Trending Posts */, 14A724CC2063D13400A9BE47 /* Hot Posts */, + 14E602682065220A006BAFCF /* Tools */, + 14E6026920652219006BAFCF /* User */, 14A724CF2063D1AC00A9BE47 /* Extensions */, 147B50D6205CEA44001424D2 /* AppDelegate.swift */, 147B50DD205CEA44001424D2 /* Assets.xcassets */, @@ -154,10 +176,10 @@ 14A724CA2063D0F600A9BE47 /* Trending Posts */ = { isa = PBXGroup; children = ( + 147B50DA205CEA44001424D2 /* Main.storyboard */, 147B50D8205CEA44001424D2 /* ViewController.swift */, 147B5106205D6106001424D2 /* PostShowVC.swift */, 147B5104205CFD1A001424D2 /* PostsTableCell.swift */, - 147B50DA205CEA44001424D2 /* Main.storyboard */, ); path = "Trending Posts"; sourceTree = ""; @@ -166,6 +188,9 @@ isa = PBXGroup; children = ( 14A724CD2063D16200A9BE47 /* HotPosts.storyboard */, + 14E6027220652A5D006BAFCF /* HotPostsListVC.swift */, + 14E6027420652BBF006BAFCF /* HotPostShowVC.swift */, + 14E6027620652C3C006BAFCF /* HotPostsTableCell.swift */, ); path = "Hot Posts"; sourceTree = ""; @@ -174,10 +199,31 @@ isa = PBXGroup; children = ( 14A724D02063D7BA00A9BE47 /* CustomNavigationVC.swift */, + 14A724D22063DCD100A9BE47 /* CustomTabbarVC.swift */, + 14A724D42063DD0400A9BE47 /* BaseColours.swift */, + 14E6027E2067B6A5006BAFCF /* UIView+Properties.swift */, ); path = Extensions; sourceTree = ""; }; + 14E602682065220A006BAFCF /* Tools */ = { + isa = PBXGroup; + children = ( + 14E6026A20652233006BAFCF /* Tools.storyboard */, + 14E6026E206522C3006BAFCF /* UsefulSteemitToolsVC.swift */, + ); + path = Tools; + sourceTree = ""; + }; + 14E6026920652219006BAFCF /* User */ = { + isa = PBXGroup; + children = ( + 14E6026C20652242006BAFCF /* UserProfile.storyboard */, + 14E60270206524A3006BAFCF /* UserProfileVC.swift */, + ); + path = User; + sourceTree = ""; + }; 4EF16B3679071E01C36FEBE8 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -320,6 +366,8 @@ 147B50E1205CEA44001424D2 /* LaunchScreen.storyboard in Resources */, 147B50DE205CEA44001424D2 /* Assets.xcassets in Resources */, 14A724CE2063D16200A9BE47 /* HotPosts.storyboard in Resources */, + 14E6026D20652242006BAFCF /* UserProfile.storyboard in Resources */, + 14E6026B20652233006BAFCF /* Tools.storyboard in Resources */, 147B50DC205CEA44001424D2 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -363,11 +411,13 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-Travel-IT/Pods-Travel-IT-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/NVActivityIndicatorView/NVActivityIndicatorView.framework", "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NVActivityIndicatorView.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework", ); @@ -499,9 +549,17 @@ files = ( 14A724D12063D7BA00A9BE47 /* CustomNavigationVC.swift in Sources */, 147B50D9205CEA44001424D2 /* ViewController.swift in Sources */, + 14E6027320652A5D006BAFCF /* HotPostsListVC.swift in Sources */, + 14E6027F2067B6A5006BAFCF /* UIView+Properties.swift in Sources */, 147B50D7205CEA44001424D2 /* AppDelegate.swift in Sources */, 147B5105205CFD1A001424D2 /* PostsTableCell.swift in Sources */, 147B5107205D6106001424D2 /* PostShowVC.swift in Sources */, + 14E60271206524A3006BAFCF /* UserProfileVC.swift in Sources */, + 14A724D32063DCD100A9BE47 /* CustomTabbarVC.swift in Sources */, + 14E6026F206522C3006BAFCF /* UsefulSteemitToolsVC.swift in Sources */, + 14E6027520652BBF006BAFCF /* HotPostShowVC.swift in Sources */, + 14E6027720652C3C006BAFCF /* HotPostsTableCell.swift in Sources */, + 14A724D52063DD0400A9BE47 /* BaseColours.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Travel-IT.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist b/Travel-IT.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist index 6709dc0..896b9db 100644 --- a/Travel-IT.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Travel-IT.xcodeproj/xcuserdata/ankitsingh.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Travel-IT.xcscheme orderHint - 5 + 6 diff --git a/Travel-IT/Assets.xcassets/Launch_Screen.imageset/Contents.json b/Travel-IT/Assets.xcassets/Group.imageset/Contents.json similarity index 66% rename from Travel-IT/Assets.xcassets/Launch_Screen.imageset/Contents.json rename to Travel-IT/Assets.xcassets/Group.imageset/Contents.json index 885e78e..10de2f9 100644 --- a/Travel-IT/Assets.xcassets/Launch_Screen.imageset/Contents.json +++ b/Travel-IT/Assets.xcassets/Group.imageset/Contents.json @@ -2,7 +2,7 @@ "images" : [ { "idiom" : "universal", - "filename" : "ec6a6b0d-6136-4ca2-9af6-5f634a8d9798.png" + "filename" : "Group.pdf" } ], "info" : { diff --git a/Travel-IT/Assets.xcassets/Group.imageset/Group.pdf b/Travel-IT/Assets.xcassets/Group.imageset/Group.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c60609c73fd06f9d6fcb5bcb23db15a3d7ef27f4 GIT binary patch literal 4420 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 Y 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 C$FLXx diff --git a/Travel-IT/Assets.xcassets/appLogo.imageset/Contents.json b/Travel-IT/Assets.xcassets/appLogo.imageset/Contents.json new file mode 100644 index 0000000..ce0f8ee --- /dev/null +++ b/Travel-IT/Assets.xcassets/appLogo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "color.png" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Travel-IT/Assets.xcassets/appLogo.imageset/color.png b/Travel-IT/Assets.xcassets/appLogo.imageset/color.png new file mode 100644 index 0000000000000000000000000000000000000000..186ef7a72aa93d022d69fae47d2fa6b7d0f63106 GIT binary patch literal 16692 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 mi@7nY3A+Ho|J&uC<>u`2UK;<{5Dv?z`vQ`__8B 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 G@c#$ueeKr( literal 0 HcmV?d00001 diff --git a/Travel-IT/Base.lproj/LaunchScreen.storyboard b/Travel-IT/Base.lproj/LaunchScreen.storyboard index df9dff8..e9742eb 100644 --- a/Travel-IT/Base.lproj/LaunchScreen.storyboard +++ b/Travel-IT/Base.lproj/LaunchScreen.storyboard @@ -4,7 +4,6 @@ - @@ -18,7 +17,7 @@ - + @@ -31,7 +30,7 @@ - + @@ -49,6 +48,6 @@ - + diff --git a/Travel-IT/Extensions/BaseColours.swift b/Travel-IT/Extensions/BaseColours.swift new file mode 100644 index 0000000..2560399 --- /dev/null +++ b/Travel-IT/Extensions/BaseColours.swift @@ -0,0 +1,16 @@ +// +// BaseColours.swift +// Travel-IT +// +// Created by Ankit Singh on 22/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +extension UIColor { + + static var loaderColor: UIColor { + return UIColor(red: 31/250, green: 191/250, blue: 143/250, alpha: 1) } + +} diff --git a/Travel-IT/Extensions/CustomNavigationVC.swift b/Travel-IT/Extensions/CustomNavigationVC.swift index 279378a..50e93df 100644 --- a/Travel-IT/Extensions/CustomNavigationVC.swift +++ b/Travel-IT/Extensions/CustomNavigationVC.swift @@ -15,7 +15,8 @@ class CustomNavigationVC: UINavigationController { let backImage = UIImage(named: "Back") self.navigationBar.isTranslucent = true self.navigationBar.backIndicatorImage = backImage - self.navigationBar.tintColor = UIColor.blue + self.navigationBar.tintColor = UIColor.black + self.navigationBar.barTintColor = UIColor.loaderColor self.navigationBar.backIndicatorTransitionMaskImage = backImage self.navigationBar.topItem?.title = " " // self.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Avenir-Next-Regular", size: 20)!, NSAttributedStringKey.foregroundColor: UIColor.blue] diff --git a/Travel-IT/Extensions/CustomTabbarVC.swift b/Travel-IT/Extensions/CustomTabbarVC.swift new file mode 100644 index 0000000..1a5d119 --- /dev/null +++ b/Travel-IT/Extensions/CustomTabbarVC.swift @@ -0,0 +1,51 @@ +// +// CustomTabbarVC.swift +// Travel-IT +// +// Created by Ankit Singh on 22/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +class CustomTabbarVC: UITabBarController, UITabBarControllerDelegate { + + var previousSelectedIndex : Int? + var selectedTabUnderline : UIView? + + override func viewDidLoad() + { + super.viewDidLoad() + self.delegate = self + self.tabBar.barTintColor = UIColor.loaderColor + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.delegate = self + // Do any additional setup after loading the view. + // Add background color to middle tabBarItem + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { + + let view = item.value(forKey: "view") as! UIView + let icon = view.subviews[0] as! UIImageView + self.bounceAnimation(icon: icon) + } + + // bounce animation code + func bounceAnimation(icon: UIImageView) { + let bounceAnimation = CAKeyframeAnimation(keyPath: "transform.scale") + bounceAnimation.values = [1.0 ,1.4, 0.9, 1.0] + bounceAnimation.duration = 0.4 + bounceAnimation.calculationMode = kCAAnimationCubic + icon.layer.add(bounceAnimation, forKey: "bounceAnimation") + + } +} diff --git a/Travel-IT/Extensions/UIView+Properties.swift b/Travel-IT/Extensions/UIView+Properties.swift new file mode 100644 index 0000000..47af461 --- /dev/null +++ b/Travel-IT/Extensions/UIView+Properties.swift @@ -0,0 +1,116 @@ +// +// UIView+Properties.swift +// Travel-IT +// +// Created by Ankit Singh on 25/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +@IBDesignable +class DesignableImageView: UIImageView { +} + +@IBDesignable +class DesignableView: UIView { +} + +@IBDesignable +class DesignableButton: UIButton { +} + +@IBDesignable +class DesignableLabel: UILabel { +} + +@IBDesignable +class DesignableTextfield: UITextField { +} + +extension UIView { + + @IBInspectable + var cornerRadius: CGFloat { + get { + return layer.cornerRadius + } + set { + layer.cornerRadius = newValue + } + } + + @IBInspectable + var borderWidth: CGFloat { + get { + return layer.borderWidth + } + set { + layer.borderWidth = newValue + } + } + + @IBInspectable + var borderColor: UIColor? { + get { + if let color = layer.borderColor { + return UIColor(cgColor: color) + } + return nil + } + set { + if let color = newValue { + layer.borderColor = color.cgColor + } else { + layer.borderColor = nil + } + } + } + + @IBInspectable + var shadowRadius: CGFloat { + get { + return layer.shadowRadius + } + set { + layer.shadowRadius = newValue + } + } + + @IBInspectable + var shadowOpacity: Float { + get { + return layer.shadowOpacity + } + set { + layer.shadowOpacity = newValue + } + } + + @IBInspectable + var shadowOffset: CGSize { + get { + return layer.shadowOffset + } + set { + layer.shadowOffset = newValue + } + } + + @IBInspectable + var shadowColor: UIColor? { + get { + if let color = layer.shadowColor { + return UIColor(cgColor: color) + } + return nil + } + set { + if let color = newValue { + layer.shadowColor = color.cgColor + } else { + layer.shadowColor = nil + } + } + } +} diff --git a/Travel-IT/Hot Posts/HotPostShowVC.swift b/Travel-IT/Hot Posts/HotPostShowVC.swift new file mode 100644 index 0000000..41aec39 --- /dev/null +++ b/Travel-IT/Hot Posts/HotPostShowVC.swift @@ -0,0 +1,48 @@ +// +// HotPostShowVC.swift +// Travel-IT +// +// Created by Ankit Singh on 23/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +class HotPostShowVC: UIViewController { + var postData = [String:AnyObject]() + var postMainImage: String? + @IBOutlet var postMainImageView: UIImageView! + @IBOutlet var postBodyLabel: UILabel! + override func viewDidLoad() { + super.viewDidLoad() + self.postBodyLabel.numberOfLines = 0 + self.populatePostData() + // Do any additional setup after loading the view. + } + + func populatePostData() { + if let url = URL(string: postMainImage!) { + self.postMainImageView.sd_setImage(with: url) + } + let postBody = postData["body"]! as! String + self.postBodyLabel.text = postBody.html2String + self.fetchUrls(bodyData: postBody.html2String) + } + + func fetchUrls(bodyData: String) { + let input = bodyData + let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) + let matches = detector.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count)) + + for match in matches { + guard let range = Range(match.range, in: input) else { continue } + let url = input[range] + print(url) + } + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + } diff --git a/Travel-IT/Hot Posts/HotPosts.storyboard b/Travel-IT/Hot Posts/HotPosts.storyboard index c95625a..54b9394 100644 --- a/Travel-IT/Hot Posts/HotPosts.storyboard +++ b/Travel-IT/Hot Posts/HotPosts.storyboard @@ -5,53 +5,219 @@ + + + + AvenirNext-Regular + + + KannadaSangamMN-Bold + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Travel-IT/Hot Posts/HotPostsListVC.swift b/Travel-IT/Hot Posts/HotPostsListVC.swift new file mode 100644 index 0000000..0f0f6a4 --- /dev/null +++ b/Travel-IT/Hot Posts/HotPostsListVC.swift @@ -0,0 +1,105 @@ +// +// HotPostsListVC.swift +// Travel-IT +// +// Created by Ankit Singh on 23/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit +import SwiftyJSON +import NVActivityIndicatorView + +class HotPostsListVC: UIViewController, UITableViewDataSource, UITableViewDelegate { + private var activityView: NVActivityIndicatorView! + @IBOutlet var hotTravelpostsTableView: UITableView! + var allPosts = [[String: AnyObject]]() + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Hot Travel Posts" + self.hotTravelpostsTableView.delegate = self + self.hotTravelpostsTableView.dataSource = self + self.getHotTravelPosts() + } + + func getHotTravelPosts() { + self.showLoadingIndicator() + let url = URL(string: "https://api.steemjs.com/get_discussions_by_hot?query=%7B%22tag%22%3A%22travel%22%2C%20%22limit%22%3A%20%2210%22%7D")! + URLSession.shared.dataTask(with: url, completionHandler: { + (data, response, error) in + if(error != nil){ + print("error") + }else{ + do{ + var json = try JSONSerialization.jsonObject(with: data!, options: []) as! [[String: AnyObject]] + for post in json { + self.allPosts.append(post) + } + DispatchQueue.main.async(execute: { + self.stopLoadingIndicator() + self.hotTravelpostsTableView.reloadData() + }) + }catch let error as NSError{ + print(error) + } + } + }).resume() + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return self.allPosts.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "HotPostsTableCell", for: indexPath) as? HotPostsTableCell + let cellData = self.allPosts[indexPath.row] + cell?.updateCellData(data: cellData) + return cell! + } + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return 265 + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let postData = self.allPosts[indexPath.row] + let metadata = postData["json_metadata"]! as! String + var mainImage: String? + let data = metadata.data(using: .utf8)! + do { + if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [String:AnyObject] + { + let images = jsonArray["image"] as! [String] + mainImage = images[0] + } else { + print("bad json") + } + } catch let error as NSError { + print(error) + } + let storyboard = UIStoryboard(name: "HotPosts", bundle: nil) + let vc = storyboard.instantiateViewController(withIdentifier: "HotPostShowVC") as! HotPostShowVC + vc.postData = postData + vc.postMainImage = mainImage + navigationController?.pushViewController(vc,animated: true) + } + + func showLoadingIndicator(){ + if activityView == nil{ + activityView = NVActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50.0, height: 50.0), type: NVActivityIndicatorType.ballClipRotatePulse, color: UIColor.loaderColor, padding: 0.0) + // add subview + view.addSubview(activityView) + // autoresizing mask + activityView.translatesAutoresizingMaskIntoConstraints = false + // constraints + view.addConstraint(NSLayoutConstraint(item: activityView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0)) + view.addConstraint(NSLayoutConstraint(item: activityView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0)) + } + + activityView.startAnimating() + } + + func stopLoadingIndicator(){ + activityView.stopAnimating() + } +} diff --git a/Travel-IT/Hot Posts/HotPostsTableCell.swift b/Travel-IT/Hot Posts/HotPostsTableCell.swift new file mode 100644 index 0000000..60b034f --- /dev/null +++ b/Travel-IT/Hot Posts/HotPostsTableCell.swift @@ -0,0 +1,57 @@ +// +// HotPostsTableCell.swift +// Travel-IT +// +// Created by Ankit Singh on 23/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit +import SDWebImage +class HotPostsTableCell: UITableViewCell { + + @IBOutlet var hotPostCellMainView: UIView! + @IBOutlet var postMainImage: UIImageView! + @IBOutlet var postTitle: UILabel! + @IBOutlet var authorNameLabel: UILabel! + override func awakeFromNib() { + super.awakeFromNib() + self.hotPostCellMainView.layer.shadowOffset = CGSize(width: 0, height: 0) + self.hotPostCellMainView.layer.shadowColor = UIColor.black.cgColor + self.hotPostCellMainView.layer.shadowRadius = 4 + self.hotPostCellMainView.layer.shadowOpacity = 0.25 + self.hotPostCellMainView.layer.masksToBounds = false; + self.hotPostCellMainView.clipsToBounds = false; + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + + // function to update single cell data + func updateCellData(data: [String: AnyObject]) { + self.postTitle.text = data["title"]! as! String + self.authorNameLabel.text = data["author"] as! String + let metadata = data["json_metadata"]! as! String + let data = metadata.data(using: .utf8)! + do { + if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [String:AnyObject] + { + if let images = jsonArray["image"] as? [String] { + let finalImage = images[0] + if let url = URL(string: finalImage) { + postMainImage.sd_setImage(with: url) + } + } + } else { + print("bad json") + } + } catch let error as NSError { + print(error) + } + + } + +} diff --git a/Travel-IT/Tools/Tools.storyboard b/Travel-IT/Tools/Tools.storyboard new file mode 100644 index 0000000..2cb3345 --- /dev/null +++ b/Travel-IT/Tools/Tools.storyboard @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Travel-IT/Tools/UsefulSteemitToolsVC.swift b/Travel-IT/Tools/UsefulSteemitToolsVC.swift new file mode 100644 index 0000000..33f13bc --- /dev/null +++ b/Travel-IT/Tools/UsefulSteemitToolsVC.swift @@ -0,0 +1,35 @@ +// +// UsefulSteemitToolsVC.swift +// Travel-IT +// +// Created by Ankit Singh on 23/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +class UsefulSteemitToolsVC: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/Travel-IT/Trending Posts/Base.lproj/HotPosts~.storyboard b/Travel-IT/Trending Posts/Base.lproj/HotPosts~.storyboard new file mode 100644 index 0000000..1acfc56 --- /dev/null +++ b/Travel-IT/Trending Posts/Base.lproj/HotPosts~.storyboard @@ -0,0 +1,241 @@ + + + + + + + + + + + + + AvenirNext-Regular + + + KannadaSangamMN-Bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Travel-IT/Trending Posts/Base.lproj/Main.storyboard b/Travel-IT/Trending Posts/Base.lproj/Main.storyboard index de46056..e0d6b82 100644 --- a/Travel-IT/Trending Posts/Base.lproj/Main.storyboard +++ b/Travel-IT/Trending Posts/Base.lproj/Main.storyboard @@ -21,7 +21,7 @@ - + @@ -34,10 +34,10 @@ - + - + @@ -45,6 +45,9 @@ + + + @@ -59,61 +62,88 @@ - + - + - + - - + + + + + + + + + + + + + + - + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + @@ -144,7 +174,7 @@ - + @@ -215,7 +245,41 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Travel-IT/Trending Posts/PostsTableCell.swift b/Travel-IT/Trending Posts/PostsTableCell.swift index 0127d20..4e534e0 100644 --- a/Travel-IT/Trending Posts/PostsTableCell.swift +++ b/Travel-IT/Trending Posts/PostsTableCell.swift @@ -10,11 +10,18 @@ import UIKit import SDWebImage class PostsTableCell: UITableViewCell { + @IBOutlet var postCardView: UIView! @IBOutlet var postMainImage: UIImageView! @IBOutlet var postTitle: UILabel! @IBOutlet var authorNameLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() + self.postCardView.layer.shadowOffset = CGSize(width: 0, height: 0) + self.postCardView.layer.shadowColor = UIColor.black.cgColor + self.postCardView.layer.shadowRadius = 4 + self.postCardView.layer.shadowOpacity = 0.25 + self.postCardView.layer.masksToBounds = false; + self.postCardView.clipsToBounds = false; } override func setSelected(_ selected: Bool, animated: Bool) { diff --git a/Travel-IT/Trending Posts/ViewController.swift b/Travel-IT/Trending Posts/ViewController.swift index ca4b136..cf0d57f 100644 --- a/Travel-IT/Trending Posts/ViewController.swift +++ b/Travel-IT/Trending Posts/ViewController.swift @@ -8,10 +8,14 @@ import UIKit import SwiftyJSON +import NVActivityIndicatorView class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { + private var activityView: NVActivityIndicatorView! @IBOutlet var travelpostsTableView: UITableView! var allPosts = [[String: AnyObject]]() + // variable to check data loaded or not in tableview + var dataLoad: Bool = false override func viewDidLoad() { super.viewDidLoad() self.title = "Trending Travel Posts" @@ -21,6 +25,7 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega } func getTredingTravelPosts() { + self.showLoadingIndicator() let url = URL(string: "https://api.steemjs.com/get_discussions_by_trending?query=%7B%22tag%22%3A%22travel%22%2C%20%22limit%22%3A%20%2210%22%7D")! URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in @@ -33,6 +38,8 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega self.allPosts.append(post) } DispatchQueue.main.async(execute: { + self.dataLoad = true + self.stopLoadingIndicator() self.travelpostsTableView.reloadData() }) }catch let error as NSError{ @@ -79,5 +86,23 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega vc.postMainImage = mainImage navigationController?.pushViewController(vc,animated: true) } + + func showLoadingIndicator(){ + if activityView == nil{ + activityView = NVActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50.0, height: 50.0), type: NVActivityIndicatorType.ballClipRotatePulse, color: UIColor.loaderColor, padding: 0.0) + // add subview + view.addSubview(activityView) + // autoresizing mask + activityView.translatesAutoresizingMaskIntoConstraints = false + // constraints + view.addConstraint(NSLayoutConstraint(item: activityView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0)) + view.addConstraint(NSLayoutConstraint(item: activityView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0)) + } + + activityView.startAnimating() + } + + func stopLoadingIndicator(){ + activityView.stopAnimating() + } } - diff --git a/Travel-IT/User/UserProfile.storyboard b/Travel-IT/User/UserProfile.storyboard new file mode 100644 index 0000000..2c7548e --- /dev/null +++ b/Travel-IT/User/UserProfile.storyboard @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Travel-IT/User/UserProfileVC.swift b/Travel-IT/User/UserProfileVC.swift new file mode 100644 index 0000000..4afe87f --- /dev/null +++ b/Travel-IT/User/UserProfileVC.swift @@ -0,0 +1,35 @@ +// +// UserProfileVC.swift +// Travel-IT +// +// Created by Ankit Singh on 23/03/18. +// Copyright © 2018 Ankit Singh. All rights reserved. +// + +import UIKit + +class UserProfileVC: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destinationViewController. + // Pass the selected object to the new view controller. + } + */ + +}