├── .github ├── ISSUE_TEMPLATE.md └── contributing.md ├── .gitignore ├── .gitmodules ├── .swift-version ├── Cartfile ├── Cartfile.resolved ├── LICENSE ├── Podfile ├── PullToMakeSoup.podspec ├── PullToMakeSoup.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ └── PullToMakeSoup.xcscheme ├── PullToMakeSoup ├── Info.plist ├── PullToMakeSoup-Bridging-Header.h ├── PullToMakeSoup.h └── PullToMakeSoup │ ├── CAKeyframeAnimation+Extensions.swift │ ├── PocketSVG │ ├── PocketSVG+Extension.swift │ ├── PocketSVG.h │ └── PocketSVG.m │ ├── PullToMakeSoup.swift │ └── Resources │ ├── CookingRefresher.xcassets │ ├── carrot.imageset │ │ ├── Contents.json │ │ └── carrot@2x.png │ ├── circle.imageset │ │ ├── Contents.json │ │ └── circle@2x.png │ ├── cover.imageset │ │ ├── Contents.json │ │ └── cover@2x.png │ ├── flames │ │ ├── Flames0001.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0001.png │ │ ├── Flames0002.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0002.png │ │ ├── Flames0003.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0003.png │ │ ├── Flames0004.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0004.png │ │ ├── Flames0005.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0005.png │ │ ├── Flames0006.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0006.png │ │ ├── Flames0007.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0007.png │ │ ├── Flames0008.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0008.png │ │ ├── Flames0009.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0009.png │ │ ├── Flames0010.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0010.png │ │ ├── Flames0011.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0011.png │ │ ├── Flames0012.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0012.png │ │ ├── Flames0013.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0013.png │ │ ├── Flames0014.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0014.png │ │ ├── Flames0015.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0015.png │ │ ├── Flames0016.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0016.png │ │ ├── Flames0017.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0017.png │ │ ├── Flames0018.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0018.png │ │ ├── Flames0019.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0019.png │ │ ├── Flames0020.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0020.png │ │ ├── Flames0021.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0021.png │ │ ├── Flames0022.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0022.png │ │ ├── Flames0023.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0023.png │ │ ├── Flames0024.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0024.png │ │ ├── Flames0025.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0025.png │ │ ├── Flames0026.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0026.png │ │ ├── Flames0027.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0027.png │ │ ├── Flames0028.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0028.png │ │ ├── Flames0029.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0029.png │ │ ├── Flames0030.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0030.png │ │ ├── Flames0031.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0031.png │ │ ├── Flames0032.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0032.png │ │ ├── Flames0033.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0033.png │ │ ├── Flames0034.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0034.png │ │ ├── Flames0035.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0035.png │ │ ├── Flames0036.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0036.png │ │ ├── Flames0037.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0037.png │ │ ├── Flames0038.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0038.png │ │ ├── Flames0039.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0039.png │ │ ├── Flames0040.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0040.png │ │ ├── Flames0041.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0041.png │ │ ├── Flames0042.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0042.png │ │ ├── Flames0043.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0043.png │ │ ├── Flames0044.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0044.png │ │ ├── Flames0045.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0045.png │ │ ├── Flames0046.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0046.png │ │ ├── Flames0047.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0047.png │ │ ├── Flames0048.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0048.png │ │ ├── Flames0049.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0049.png │ │ ├── Flames0050.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0050.png │ │ ├── Flames0051.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0051.png │ │ ├── Flames0052.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0052.png │ │ ├── Flames0053.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0053.png │ │ ├── Flames0054.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0054.png │ │ ├── Flames0055.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0055.png │ │ ├── Flames0056.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0056.png │ │ ├── Flames0057.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0057.png │ │ ├── Flames0058.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0058.png │ │ ├── Flames0059.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0059.png │ │ ├── Flames0060.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0060.png │ │ ├── Flames0061.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0061.png │ │ ├── Flames0062.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0062.png │ │ ├── Flames0063.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0063.png │ │ ├── Flames0064.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0064.png │ │ ├── Flames0065.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0065.png │ │ ├── Flames0066.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0066.png │ │ ├── Flames0067.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0067.png │ │ ├── Flames0068.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0068.png │ │ ├── Flames0069.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0069.png │ │ ├── Flames0070.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0070.png │ │ ├── Flames0071.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0071.png │ │ ├── Flames0072.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0072.png │ │ ├── Flames0073.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0073.png │ │ ├── Flames0074.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0074.png │ │ ├── Flames0075.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0075.png │ │ ├── Flames0076.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0076.png │ │ ├── Flames0077.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0077.png │ │ └── Flames0078.imageset │ │ │ ├── Contents.json │ │ │ └── Flames0078.png │ ├── pan.imageset │ │ ├── Contents.json │ │ └── pan@2x.png │ ├── pea.imageset │ │ ├── Contents.json │ │ └── pea@2x.png │ ├── potato.imageset │ │ ├── Contents.json │ │ └── potato@2x.png │ ├── shadow.imageset │ │ ├── Contents.json │ │ └── shadow@2x.png │ └── water.imageset │ │ ├── Contents.json │ │ └── water@2x.png │ ├── SoupView.xib │ ├── carrot-path-only.svg │ ├── cover-path-only.svg │ ├── pea-from-left-path-only.svg │ ├── pea-from-right-path-only.svg │ └── potato-path-only.svg ├── PullToMakeSoupDemo.xcodeproj ├── project.pbxproj └── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ └── PullToMakeSoupDemo.xccheckout ├── PullToMakeSoupDemo.xcworkspace └── contents.xcworkspacedata ├── PullToMakeSoupDemo ├── AppDelegate.swift ├── Base.lproj │ ├── LaunchScreen.xib │ └── Main.storyboard ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── gamburger.imageset │ │ ├── Contents.json │ │ └── gamburger@2x.png │ └── pizza.imageset │ │ ├── Contents.json │ │ └── pizza@2x.png ├── Info.plist ├── Resouces │ ├── badge_dark.png │ └── recipe-finder.gif └── ViewController.swift └── README.md /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Report 2 | 3 | > The more information you provide, the faster we can help you. 4 | 5 | ⚠️ Select what you want - **a feature request** or **report a bug**. Please remove the section you aren't interested in. 6 | 7 | ## A feature request 8 | 9 | ### What do you want to add? 10 | 11 | > Please describe what you want to add to the component. 12 | 13 | ### How should it look like? 14 | 15 | > Please add images. 16 | 17 | ## Report a bug 18 | 19 | ### What did you do? 20 | 21 | > Please replace this with what you did. 22 | 23 | ### What did you expect to happen? 24 | 25 | > Please replace this with what you expected to happen. 26 | 27 | ### What happened instead? 28 | 29 | > Please replace this with what happened instead. 30 | 31 | ### Your Environment 32 | 33 | - Version of the component: _insert here_ 34 | - Swift version: _insert here_ 35 | - iOS version: _insert here_ 36 | - Device: _insert here_ 37 | - Xcode version: _insert here_ 38 | - If you use Cocoapods: _run `pod env | pbcopy` and insert here_ 39 | - If you use Carthage: _run `carthage version | pbcopy` and insert here_ 40 | 41 | ### Project that demonstrates the bug 42 | 43 | > Please add a link to a project we can download that reproduces the bug. 44 | -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | ## How to contribute to PullToMakeSoup 2 | 3 | #### **Did you find a bug?** 4 | 5 | * **Ensure the bug was not already reported** by searching under [Issues](https://github.com/Yalantis/PullToMakeSoup/issues). 6 | 7 | * If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/Yalantis/PullToMakeSoup/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **example project** demonstrating the expected behavior that is not occurring. 8 | 9 | * Fill appropriate section in issue template and remove the section you aren't interested in. 10 | 11 | #### **Did you write a patch that fixes a bug?** 12 | 13 | * Open a new GitHub pull request with the patch. 14 | 15 | * Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable. 16 | 17 | * Ensure the PR doesn't extend the number of existing issues. 18 | 19 | #### **Did you fix whitespace, format code, or make a purely cosmetic patch?** 20 | 21 | * Changes that are **cosmetic** in nature and **do not add anything substantial** to the stability or functionality of PullToMakeSoup will generally **not be accepted**. 22 | 23 | #### **Did you write patch that extends functionality?** 24 | 25 | * Ensure the functionality you trying to add needed not only for your case. 26 | 27 | #### Each issue will be labeled by it's `type`, `priority` and `status`. 28 | 29 | **Issue types:** 30 | * Bug 31 | * Enhancement 32 | 33 | **These are the available priority labels:** 34 | * Critical 35 | * High 36 | * Medium 37 | * Low 38 | 39 | **Status label will be assigned to your issue to keep the issue tracker easy to follow:** 40 | * Queued (will be reviewed soon) 41 | * Reviewed (assignee has read it) 42 | * Pending (will work on it soon) 43 | * Work in progress (is working on it now) 44 | * On hold 45 | * Invalid (if bug it's not reproducible) 46 | * Need feedback (signal to get people to read and comment or provide help) 47 | 48 | #### **Coding Style** 49 | 50 | * Most importantly, match the existing code style as much as possible. 51 | 52 | #### **Do you have a question?** 53 | 54 | For any usage questions that are not specific to the project itself, please ask on [Stack Overflow](https://stackoverflow.com/). By doing so, you'll be more likely to quickly solve your problem, and you'll allow anyone else with the same question to find the answer. This also allows maintainers to focus on improving the project for others. 55 | 56 | ## Thank you! 57 | 58 | #### [![Yalantis](https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/master/PullToMakeSoupDemo/Resouces/badge_dark.png)](https://Yalantis.com/?utm_source=github) 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | build/ 3 | *.pbxuser 4 | !default.pbxuser 5 | *.mode1v3 6 | !default.mode1v3 7 | *.mode2v3 8 | !default.mode2v3 9 | *.perspectivev3 10 | !default.perspectivev3 11 | xcuserdata 12 | *.moved-aside 13 | DerivedData 14 | .idea/ 15 | 16 | .idea 17 | 18 | Modules/*/*.xcodeproj/** 19 | !Modules/*/*.xcodeproj/*.pbxproj 20 | 21 | build/* 22 | build.output/* 23 | pkg/* 24 | 25 | cpd-output.* 26 | DerivedData 27 | build.output 28 | 29 | Pods 30 | Podfile.lock 31 | 32 | Carthage/Build 33 | Carthage/Checkouts -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Carthage/Checkouts/PullToRefresh"] 2 | path = Carthage/Checkouts/PullToRefresh 3 | url = https://github.com/Yalantis/PullToRefresh.git 4 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 2 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | github "Yalantis/PullToRefresh" ~> 2.0 2 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "Yalantis/PullToRefresh" "2.0.1" 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | use_frameworks! 3 | 4 | target 'PullToMakeSoupDemo' do 5 | project 'PullToMakeSoupDemo.xcodeproj' 6 | 7 | pod "PullToMakeSoup", :path => "./" 8 | end 9 | -------------------------------------------------------------------------------- /PullToMakeSoup.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = "PullToMakeSoup" 4 | s.version = "2.0" 5 | s.summary = "Custom animated pull-to-refresh that can be easily added to UIScrollView" 6 | s.homepage = "http://yalantis.com/blog/how-we-built-customizable-pull-to-refresh-pull-to-cook-soup-animation/" 7 | 8 | s.license = { :type => "MIT", :file => "LICENSE" } 9 | s.author = "Yalantis" 10 | s.social_media_url = "https://twitter.com/yalantis" 11 | 12 | s.ios.deployment_target = "8.0" 13 | 14 | s.source = { :git => "https://github.com/Yalantis/PullToMakeSoup.git", :tag => s.version } 15 | s.source_files = "PullToMakeSoup/**/*.{h,m,swift}" 16 | s.resources = 'PullToMakeSoup/**/*.{svg,png,xib,xcassets}' 17 | s.module_name = "PullToMakeSoup" 18 | s.requires_arc = true 19 | s.frameworks = 'CoreGraphics', 'QuartzCore' 20 | 21 | s.dependency 'PullToRefresher', '~> 2.0' 22 | 23 | end 24 | -------------------------------------------------------------------------------- /PullToMakeSoup.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 801593F11C996F25005A0F9D /* PullToMakeSoup.h in Headers */ = {isa = PBXBuildFile; fileRef = 801593F01C996F25005A0F9D /* PullToMakeSoup.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 804EC0991C9971C00012CA27 /* CAKeyframeAnimation+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804EC08A1C9971C00012CA27 /* CAKeyframeAnimation+Extensions.swift */; }; 12 | 804EC09A1C9971C00012CA27 /* PocketSVG+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804EC08C1C9971C00012CA27 /* PocketSVG+Extension.swift */; }; 13 | 804EC09B1C9971C00012CA27 /* PocketSVG.h in Headers */ = {isa = PBXBuildFile; fileRef = 804EC08D1C9971C00012CA27 /* PocketSVG.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 804EC09C1C9971C00012CA27 /* PocketSVG.m in Sources */ = {isa = PBXBuildFile; fileRef = 804EC08E1C9971C00012CA27 /* PocketSVG.m */; }; 15 | 804EC09D1C9971C00012CA27 /* PullToMakeSoup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804EC08F1C9971C00012CA27 /* PullToMakeSoup.swift */; }; 16 | 804EC09E1C9971C00012CA27 /* carrot-path-only.svg in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0911C9971C00012CA27 /* carrot-path-only.svg */; }; 17 | 804EC09F1C9971C00012CA27 /* CookingRefresher.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0921C9971C00012CA27 /* CookingRefresher.xcassets */; }; 18 | 804EC0A01C9971C00012CA27 /* cover-path-only.svg in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0931C9971C00012CA27 /* cover-path-only.svg */; }; 19 | 804EC0A11C9971C00012CA27 /* pea-from-left-path-only.svg in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0941C9971C00012CA27 /* pea-from-left-path-only.svg */; }; 20 | 804EC0A21C9971C00012CA27 /* pea-from-right-path-only.svg in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0951C9971C00012CA27 /* pea-from-right-path-only.svg */; }; 21 | 804EC0A31C9971C00012CA27 /* potato-path-only.svg in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0961C9971C00012CA27 /* potato-path-only.svg */; }; 22 | 804EC0A41C9971C00012CA27 /* SoupView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 804EC0971C9971C00012CA27 /* SoupView.xib */; }; 23 | 804EC0A71C9985410012CA27 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 804EC0A61C9985410012CA27 /* PullToRefresh.framework */; }; 24 | 804EC0B21C999AF30012CA27 /* PullToRefresh.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 804EC0A61C9985410012CA27 /* PullToRefresh.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXCopyFilesBuildPhase section */ 28 | 804EC0B11C9994390012CA27 /* CopyFiles */ = { 29 | isa = PBXCopyFilesBuildPhase; 30 | buildActionMask = 2147483647; 31 | dstPath = Carthage/Build/iOS/PullToRefresh.framework; 32 | dstSubfolderSpec = 10; 33 | files = ( 34 | 804EC0B21C999AF30012CA27 /* PullToRefresh.framework in CopyFiles */, 35 | ); 36 | runOnlyForDeploymentPostprocessing = 0; 37 | }; 38 | /* End PBXCopyFilesBuildPhase section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 801593ED1C996F25005A0F9D /* PullToMakeSoup.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PullToMakeSoup.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 801593F01C996F25005A0F9D /* PullToMakeSoup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PullToMakeSoup.h; sourceTree = ""; }; 43 | 801593F21C996F25005A0F9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | 804EC08A1C9971C00012CA27 /* CAKeyframeAnimation+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CAKeyframeAnimation+Extensions.swift"; sourceTree = ""; }; 45 | 804EC08C1C9971C00012CA27 /* PocketSVG+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PocketSVG+Extension.swift"; sourceTree = ""; }; 46 | 804EC08D1C9971C00012CA27 /* PocketSVG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PocketSVG.h; sourceTree = ""; }; 47 | 804EC08E1C9971C00012CA27 /* PocketSVG.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PocketSVG.m; sourceTree = ""; }; 48 | 804EC08F1C9971C00012CA27 /* PullToMakeSoup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PullToMakeSoup.swift; sourceTree = ""; }; 49 | 804EC0911C9971C00012CA27 /* carrot-path-only.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "carrot-path-only.svg"; sourceTree = ""; }; 50 | 804EC0921C9971C00012CA27 /* CookingRefresher.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = CookingRefresher.xcassets; sourceTree = ""; }; 51 | 804EC0931C9971C00012CA27 /* cover-path-only.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "cover-path-only.svg"; sourceTree = ""; }; 52 | 804EC0941C9971C00012CA27 /* pea-from-left-path-only.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "pea-from-left-path-only.svg"; sourceTree = ""; }; 53 | 804EC0951C9971C00012CA27 /* pea-from-right-path-only.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "pea-from-right-path-only.svg"; sourceTree = ""; }; 54 | 804EC0961C9971C00012CA27 /* potato-path-only.svg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "potato-path-only.svg"; sourceTree = ""; }; 55 | 804EC0971C9971C00012CA27 /* SoupView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SoupView.xib; sourceTree = ""; }; 56 | 804EC0A61C9985410012CA27 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = ../Carthage/Build/iOS/PullToRefresh.framework; sourceTree = ""; }; 57 | /* End PBXFileReference section */ 58 | 59 | /* Begin PBXFrameworksBuildPhase section */ 60 | 801593E91C996F25005A0F9D /* Frameworks */ = { 61 | isa = PBXFrameworksBuildPhase; 62 | buildActionMask = 2147483647; 63 | files = ( 64 | 804EC0A71C9985410012CA27 /* PullToRefresh.framework in Frameworks */, 65 | ); 66 | runOnlyForDeploymentPostprocessing = 0; 67 | }; 68 | /* End PBXFrameworksBuildPhase section */ 69 | 70 | /* Begin PBXGroup section */ 71 | 801593E31C996F25005A0F9D = { 72 | isa = PBXGroup; 73 | children = ( 74 | 801593EF1C996F25005A0F9D /* PullToMakeSoup */, 75 | 801593EE1C996F25005A0F9D /* Products */, 76 | ); 77 | sourceTree = ""; 78 | }; 79 | 801593EE1C996F25005A0F9D /* Products */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 801593ED1C996F25005A0F9D /* PullToMakeSoup.framework */, 83 | ); 84 | name = Products; 85 | sourceTree = ""; 86 | }; 87 | 801593EF1C996F25005A0F9D /* PullToMakeSoup */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 804EC0891C9971C00012CA27 /* PullToMakeSoup */, 91 | 801593F01C996F25005A0F9D /* PullToMakeSoup.h */, 92 | 801593F21C996F25005A0F9D /* Info.plist */, 93 | 804EC0B81C99A2700012CA27 /* Frameworks */, 94 | ); 95 | path = PullToMakeSoup; 96 | sourceTree = ""; 97 | }; 98 | 804EC0891C9971C00012CA27 /* PullToMakeSoup */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 804EC08A1C9971C00012CA27 /* CAKeyframeAnimation+Extensions.swift */, 102 | 804EC08B1C9971C00012CA27 /* PocketSVG */, 103 | 804EC08F1C9971C00012CA27 /* PullToMakeSoup.swift */, 104 | 804EC0901C9971C00012CA27 /* Resources */, 105 | ); 106 | path = PullToMakeSoup; 107 | sourceTree = ""; 108 | }; 109 | 804EC08B1C9971C00012CA27 /* PocketSVG */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 804EC08C1C9971C00012CA27 /* PocketSVG+Extension.swift */, 113 | 804EC08D1C9971C00012CA27 /* PocketSVG.h */, 114 | 804EC08E1C9971C00012CA27 /* PocketSVG.m */, 115 | ); 116 | path = PocketSVG; 117 | sourceTree = ""; 118 | }; 119 | 804EC0901C9971C00012CA27 /* Resources */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | 804EC0911C9971C00012CA27 /* carrot-path-only.svg */, 123 | 804EC0921C9971C00012CA27 /* CookingRefresher.xcassets */, 124 | 804EC0931C9971C00012CA27 /* cover-path-only.svg */, 125 | 804EC0941C9971C00012CA27 /* pea-from-left-path-only.svg */, 126 | 804EC0951C9971C00012CA27 /* pea-from-right-path-only.svg */, 127 | 804EC0961C9971C00012CA27 /* potato-path-only.svg */, 128 | 804EC0971C9971C00012CA27 /* SoupView.xib */, 129 | ); 130 | path = Resources; 131 | sourceTree = ""; 132 | }; 133 | 804EC0B81C99A2700012CA27 /* Frameworks */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 804EC0A61C9985410012CA27 /* PullToRefresh.framework */, 137 | ); 138 | name = Frameworks; 139 | sourceTree = ""; 140 | }; 141 | /* End PBXGroup section */ 142 | 143 | /* Begin PBXHeadersBuildPhase section */ 144 | 801593EA1C996F25005A0F9D /* Headers */ = { 145 | isa = PBXHeadersBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | 801593F11C996F25005A0F9D /* PullToMakeSoup.h in Headers */, 149 | 804EC09B1C9971C00012CA27 /* PocketSVG.h in Headers */, 150 | ); 151 | runOnlyForDeploymentPostprocessing = 0; 152 | }; 153 | /* End PBXHeadersBuildPhase section */ 154 | 155 | /* Begin PBXNativeTarget section */ 156 | 801593EC1C996F25005A0F9D /* PullToMakeSoup */ = { 157 | isa = PBXNativeTarget; 158 | buildConfigurationList = 801593F51C996F25005A0F9D /* Build configuration list for PBXNativeTarget "PullToMakeSoup" */; 159 | buildPhases = ( 160 | 801593E81C996F25005A0F9D /* Sources */, 161 | 801593E91C996F25005A0F9D /* Frameworks */, 162 | 801593EA1C996F25005A0F9D /* Headers */, 163 | 801593EB1C996F25005A0F9D /* Resources */, 164 | 804EC0A81C99857F0012CA27 /* ShellScript */, 165 | 804EC0B11C9994390012CA27 /* CopyFiles */, 166 | ); 167 | buildRules = ( 168 | ); 169 | dependencies = ( 170 | ); 171 | name = PullToMakeSoup; 172 | productName = PullToMakeSoup; 173 | productReference = 801593ED1C996F25005A0F9D /* PullToMakeSoup.framework */; 174 | productType = "com.apple.product-type.framework"; 175 | }; 176 | /* End PBXNativeTarget section */ 177 | 178 | /* Begin PBXProject section */ 179 | 801593E41C996F25005A0F9D /* Project object */ = { 180 | isa = PBXProject; 181 | attributes = { 182 | LastUpgradeCheck = 0800; 183 | ORGANIZATIONNAME = Yalantis; 184 | TargetAttributes = { 185 | 801593EC1C996F25005A0F9D = { 186 | CreatedOnToolsVersion = 7.2; 187 | LastSwiftMigration = 0800; 188 | }; 189 | }; 190 | }; 191 | buildConfigurationList = 801593E71C996F25005A0F9D /* Build configuration list for PBXProject "PullToMakeSoup" */; 192 | compatibilityVersion = "Xcode 3.2"; 193 | developmentRegion = English; 194 | hasScannedForEncodings = 0; 195 | knownRegions = ( 196 | en, 197 | ); 198 | mainGroup = 801593E31C996F25005A0F9D; 199 | productRefGroup = 801593EE1C996F25005A0F9D /* Products */; 200 | projectDirPath = ""; 201 | projectRoot = ""; 202 | targets = ( 203 | 801593EC1C996F25005A0F9D /* PullToMakeSoup */, 204 | ); 205 | }; 206 | /* End PBXProject section */ 207 | 208 | /* Begin PBXResourcesBuildPhase section */ 209 | 801593EB1C996F25005A0F9D /* Resources */ = { 210 | isa = PBXResourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | 804EC0A41C9971C00012CA27 /* SoupView.xib in Resources */, 214 | 804EC0A01C9971C00012CA27 /* cover-path-only.svg in Resources */, 215 | 804EC0A21C9971C00012CA27 /* pea-from-right-path-only.svg in Resources */, 216 | 804EC0A11C9971C00012CA27 /* pea-from-left-path-only.svg in Resources */, 217 | 804EC09E1C9971C00012CA27 /* carrot-path-only.svg in Resources */, 218 | 804EC0A31C9971C00012CA27 /* potato-path-only.svg in Resources */, 219 | 804EC09F1C9971C00012CA27 /* CookingRefresher.xcassets in Resources */, 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | }; 223 | /* End PBXResourcesBuildPhase section */ 224 | 225 | /* Begin PBXShellScriptBuildPhase section */ 226 | 804EC0A81C99857F0012CA27 /* ShellScript */ = { 227 | isa = PBXShellScriptBuildPhase; 228 | buildActionMask = 2147483647; 229 | files = ( 230 | ); 231 | inputPaths = ( 232 | "$(SRCROOT)/Carthage/Build/iOS/PullToRefresh.framework", 233 | ); 234 | outputPaths = ( 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | shellPath = /bin/sh; 238 | shellScript = "/usr/local/bin/carthage copy-frameworks"; 239 | }; 240 | /* End PBXShellScriptBuildPhase section */ 241 | 242 | /* Begin PBXSourcesBuildPhase section */ 243 | 801593E81C996F25005A0F9D /* Sources */ = { 244 | isa = PBXSourcesBuildPhase; 245 | buildActionMask = 2147483647; 246 | files = ( 247 | 804EC09D1C9971C00012CA27 /* PullToMakeSoup.swift in Sources */, 248 | 804EC09A1C9971C00012CA27 /* PocketSVG+Extension.swift in Sources */, 249 | 804EC09C1C9971C00012CA27 /* PocketSVG.m in Sources */, 250 | 804EC0991C9971C00012CA27 /* CAKeyframeAnimation+Extensions.swift in Sources */, 251 | ); 252 | runOnlyForDeploymentPostprocessing = 0; 253 | }; 254 | /* End PBXSourcesBuildPhase section */ 255 | 256 | /* Begin XCBuildConfiguration section */ 257 | 801593F31C996F25005A0F9D /* Debug */ = { 258 | isa = XCBuildConfiguration; 259 | buildSettings = { 260 | ALWAYS_SEARCH_USER_PATHS = NO; 261 | CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; 262 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 263 | CLANG_CXX_LIBRARY = "libc++"; 264 | CLANG_ENABLE_MODULES = YES; 265 | CLANG_ENABLE_OBJC_ARC = YES; 266 | CLANG_WARN_BOOL_CONVERSION = YES; 267 | CLANG_WARN_CONSTANT_CONVERSION = YES; 268 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 269 | CLANG_WARN_EMPTY_BODY = YES; 270 | CLANG_WARN_ENUM_CONVERSION = YES; 271 | CLANG_WARN_INFINITE_RECURSION = YES; 272 | CLANG_WARN_INT_CONVERSION = YES; 273 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 274 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 275 | CLANG_WARN_UNREACHABLE_CODE = YES; 276 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 277 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 278 | COPY_PHASE_STRIP = NO; 279 | CURRENT_PROJECT_VERSION = 1; 280 | DEBUG_INFORMATION_FORMAT = dwarf; 281 | ENABLE_STRICT_OBJC_MSGSEND = YES; 282 | ENABLE_TESTABILITY = YES; 283 | GCC_C_LANGUAGE_STANDARD = gnu99; 284 | GCC_DYNAMIC_NO_PIC = NO; 285 | GCC_NO_COMMON_BLOCKS = YES; 286 | GCC_OPTIMIZATION_LEVEL = 0; 287 | GCC_PREPROCESSOR_DEFINITIONS = ( 288 | "DEBUG=1", 289 | "$(inherited)", 290 | ); 291 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 292 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 293 | GCC_WARN_UNDECLARED_SELECTOR = YES; 294 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 295 | GCC_WARN_UNUSED_FUNCTION = YES; 296 | GCC_WARN_UNUSED_VARIABLE = YES; 297 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 298 | MTL_ENABLE_DEBUG_INFO = YES; 299 | ONLY_ACTIVE_ARCH = YES; 300 | SDKROOT = iphoneos; 301 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 302 | SWIFT_VERSION = 3.0; 303 | TARGETED_DEVICE_FAMILY = "1,2"; 304 | VERSIONING_SYSTEM = "apple-generic"; 305 | VERSION_INFO_PREFIX = ""; 306 | }; 307 | name = Debug; 308 | }; 309 | 801593F41C996F25005A0F9D /* Release */ = { 310 | isa = XCBuildConfiguration; 311 | buildSettings = { 312 | ALWAYS_SEARCH_USER_PATHS = NO; 313 | CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; 314 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 315 | CLANG_CXX_LIBRARY = "libc++"; 316 | CLANG_ENABLE_MODULES = YES; 317 | CLANG_ENABLE_OBJC_ARC = YES; 318 | CLANG_WARN_BOOL_CONVERSION = YES; 319 | CLANG_WARN_CONSTANT_CONVERSION = YES; 320 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 321 | CLANG_WARN_EMPTY_BODY = YES; 322 | CLANG_WARN_ENUM_CONVERSION = YES; 323 | CLANG_WARN_INFINITE_RECURSION = YES; 324 | CLANG_WARN_INT_CONVERSION = YES; 325 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 326 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 327 | CLANG_WARN_UNREACHABLE_CODE = YES; 328 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 329 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 330 | COPY_PHASE_STRIP = NO; 331 | CURRENT_PROJECT_VERSION = 1; 332 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 333 | ENABLE_NS_ASSERTIONS = NO; 334 | ENABLE_STRICT_OBJC_MSGSEND = YES; 335 | GCC_C_LANGUAGE_STANDARD = gnu99; 336 | GCC_NO_COMMON_BLOCKS = YES; 337 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 338 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 339 | GCC_WARN_UNDECLARED_SELECTOR = YES; 340 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 341 | GCC_WARN_UNUSED_FUNCTION = YES; 342 | GCC_WARN_UNUSED_VARIABLE = YES; 343 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 344 | MTL_ENABLE_DEBUG_INFO = NO; 345 | SDKROOT = iphoneos; 346 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 347 | SWIFT_VERSION = 3.0; 348 | TARGETED_DEVICE_FAMILY = "1,2"; 349 | VALIDATE_PRODUCT = YES; 350 | VERSIONING_SYSTEM = "apple-generic"; 351 | VERSION_INFO_PREFIX = ""; 352 | }; 353 | name = Release; 354 | }; 355 | 801593F61C996F25005A0F9D /* Debug */ = { 356 | isa = XCBuildConfiguration; 357 | buildSettings = { 358 | CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; 359 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 360 | DEFINES_MODULE = YES; 361 | DYLIB_COMPATIBILITY_VERSION = 1; 362 | DYLIB_CURRENT_VERSION = 1; 363 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 364 | FRAMEWORK_SEARCH_PATHS = ( 365 | "$(inherited)", 366 | "$(PROJECT_DIR)/Carthage/Build/iOS", 367 | ); 368 | INFOPLIST_FILE = PullToMakeSoup/Info.plist; 369 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 370 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 371 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 372 | PRODUCT_BUNDLE_IDENTIFIER = yalantis.PullToMakeSoup; 373 | PRODUCT_NAME = "$(TARGET_NAME)"; 374 | SKIP_INSTALL = YES; 375 | SWIFT_VERSION = 3.0; 376 | TARGETED_DEVICE_FAMILY = "1,2"; 377 | }; 378 | name = Debug; 379 | }; 380 | 801593F71C996F25005A0F9D /* Release */ = { 381 | isa = XCBuildConfiguration; 382 | buildSettings = { 383 | CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; 384 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 385 | DEFINES_MODULE = YES; 386 | DYLIB_COMPATIBILITY_VERSION = 1; 387 | DYLIB_CURRENT_VERSION = 1; 388 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 389 | FRAMEWORK_SEARCH_PATHS = ( 390 | "$(inherited)", 391 | "$(PROJECT_DIR)/Carthage/Build/iOS", 392 | ); 393 | INFOPLIST_FILE = PullToMakeSoup/Info.plist; 394 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 395 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 396 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 397 | PRODUCT_BUNDLE_IDENTIFIER = yalantis.PullToMakeSoup; 398 | PRODUCT_NAME = "$(TARGET_NAME)"; 399 | SKIP_INSTALL = YES; 400 | SWIFT_VERSION = 3.0; 401 | TARGETED_DEVICE_FAMILY = "1,2"; 402 | }; 403 | name = Release; 404 | }; 405 | /* End XCBuildConfiguration section */ 406 | 407 | /* Begin XCConfigurationList section */ 408 | 801593E71C996F25005A0F9D /* Build configuration list for PBXProject "PullToMakeSoup" */ = { 409 | isa = XCConfigurationList; 410 | buildConfigurations = ( 411 | 801593F31C996F25005A0F9D /* Debug */, 412 | 801593F41C996F25005A0F9D /* Release */, 413 | ); 414 | defaultConfigurationIsVisible = 0; 415 | defaultConfigurationName = Release; 416 | }; 417 | 801593F51C996F25005A0F9D /* Build configuration list for PBXNativeTarget "PullToMakeSoup" */ = { 418 | isa = XCConfigurationList; 419 | buildConfigurations = ( 420 | 801593F61C996F25005A0F9D /* Debug */, 421 | 801593F71C996F25005A0F9D /* Release */, 422 | ); 423 | defaultConfigurationIsVisible = 0; 424 | defaultConfigurationName = Release; 425 | }; 426 | /* End XCConfigurationList section */ 427 | }; 428 | rootObject = 801593E41C996F25005A0F9D /* Project object */; 429 | } 430 | -------------------------------------------------------------------------------- /PullToMakeSoup.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoup.xcodeproj/xcshareddata/xcschemes/PullToMakeSoup.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /PullToMakeSoup/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "PocketSVG.h" -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup.h: -------------------------------------------------------------------------------- 1 | // 2 | // PullToMakeSoup.h 3 | // PullToMakeSoup 4 | // 5 | // Created by Anastasiya Gorban on 5/22/15. 6 | // Copyright (c) 2015 Yalantis. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for PullToMakeSoup. 12 | FOUNDATION_EXPORT double PullToMakeSoupVersionNumber; 13 | 14 | //! Project version string for PullToMakeSoup. 15 | FOUNDATION_EXPORT const unsigned char PullToMakeSoupVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | #import 20 | 21 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/CAKeyframeAnimation+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Anastasiya Gorban on 4/20/15. 3 | // Copyright (c) 2015 Yalantis. All rights reserved. 4 | // 5 | // Licensed under the MIT license: http://opensource.org/licenses/MIT 6 | // Latest version can be found at https://github.com/Yalantis/PullToMakeSoup 7 | // 8 | 9 | import CoreGraphics 10 | 11 | enum AnimationType: String { 12 | case Rotation = "transform.rotation.z" 13 | case Opacity = "opacity" 14 | case TranslationX = "transform.translation.x" 15 | case TranslationY = "transform.translation.y" 16 | } 17 | 18 | enum TimingFunction { 19 | case linear, easeIn, easeOut, easeInEaseOut 20 | } 21 | 22 | func mediaTimingFunction(_ function: TimingFunction) -> CAMediaTimingFunction { 23 | switch function { 24 | case .linear: return CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 25 | case .easeIn: return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn) 26 | case .easeOut: return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) 27 | case .easeInEaseOut: return CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 28 | } 29 | } 30 | 31 | 32 | extension CAKeyframeAnimation { 33 | class func animationWith( 34 | _ type: AnimationType, 35 | values:[Double], 36 | keyTimes:[Double], 37 | duration: Double, 38 | beginTime: Double) -> CAKeyframeAnimation { 39 | 40 | let animation = CAKeyframeAnimation(keyPath: type.rawValue) 41 | animation.values = values 42 | animation.keyTimes = keyTimes as [NSNumber]? 43 | animation.duration = duration 44 | animation.beginTime = beginTime 45 | animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 46 | 47 | return animation 48 | } 49 | 50 | class func animationPosition(_ path: CGPath, duration: Double, timingFunction: TimingFunction, beginTime: Double) -> CAKeyframeAnimation { 51 | let animation = CAKeyframeAnimation(keyPath: "position") 52 | animation.path = path 53 | animation.duration = duration 54 | animation.beginTime = beginTime 55 | animation.timingFunction = mediaTimingFunction(timingFunction) 56 | return animation 57 | } 58 | } 59 | 60 | extension UIView { 61 | func addAnimation(_ animation: CAKeyframeAnimation) { 62 | layer.add(animation, forKey: description + animation.keyPath!) 63 | layer.speed = 0 64 | } 65 | 66 | func removeAllAnimations() { 67 | layer.removeAllAnimations() 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/PocketSVG/PocketSVG+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Anastasiya Gorban on 4/21/15. 3 | // Copyright (c) 2015 Yalantis. All rights reserved. 4 | // 5 | // Licensed under the MIT license: http://opensource.org/licenses/MIT 6 | // Latest version can be found at https://github.com/Yalantis/PullToMakeSoup 7 | // 8 | 9 | public extension PocketSVG { 10 | 11 | class func pathFromSVGFileNamed( 12 | _ named: String, 13 | origin: CGPoint, 14 | mirrorX: Bool, 15 | mirrorY: Bool, 16 | scale: CGFloat) -> CGPath { 17 | 18 | let path = PocketSVG.path(fromSVGFileNamed: named) 19 | 20 | let bezierPath = UIBezierPath(cgPath: (path?.takeUnretainedValue())!) 21 | 22 | bezierPath.apply(CGAffineTransform(scaleX: scale, y: scale)) 23 | 24 | if mirrorX { 25 | let mirrorOverXOrigin = CGAffineTransform(scaleX: -1.0, y: 1.0) 26 | bezierPath.apply(mirrorOverXOrigin) 27 | } 28 | 29 | if mirrorY { 30 | let mirrorOverYOrigin = CGAffineTransform(scaleX: 1.0, y: -1.0) 31 | bezierPath.apply(mirrorOverYOrigin) 32 | } 33 | 34 | let translate = CGAffineTransform(translationX: origin.x - bezierPath.bounds.origin.x, y: origin.y - bezierPath.bounds.origin.y) 35 | bezierPath.apply(translate) 36 | 37 | return bezierPath.cgPath 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/PocketSVG/PocketSVG.h: -------------------------------------------------------------------------------- 1 | // 2 | // PocketSVG.h 3 | // 4 | // Copyright (c) 2013 Ponderwell, Ariel Elkin, and Contributors 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | @interface PocketSVG : NSObject { 28 | @private 29 | float pathScale; 30 | #if TARGET_OS_IPHONE 31 | UIBezierPath *bezier; 32 | #else 33 | NSBezierPath *bezier; 34 | #endif 35 | CGPoint lastPoint; 36 | CGPoint lastControlPoint; 37 | BOOL validLastControlPoint; 38 | NSCharacterSet *separatorSet; 39 | NSCharacterSet *commandSet; 40 | 41 | NSMutableArray *tokens; 42 | } 43 | #if TARGET_OS_IPHONE 44 | @property(nonatomic, readonly) UIBezierPath *bezier; 45 | #else 46 | @property(nonatomic, readonly) NSBezierPath *bezier; 47 | #endif 48 | 49 | 50 | /*! 51 | * Returns a CGPathRef corresponding to the path represented by a local SVG file's d attribute. 52 | * 53 | * @param nameOfSVG The name of the SVG file. The methods looks for a SVG with the specified in the application's main bundle. 54 | * 55 | * @return A CGPathRef object for the SVG in the specified file, or nil if the object could not be found or could not be parsed. 56 | */ 57 | + (CGPathRef)pathFromSVGFileNamed:(NSString *)nameOfSVG; 58 | 59 | /*! 60 | * Returns a CGPathRef corresponding to the path represented by a local SVG file's D attribute 61 | * 62 | * @param svgFileURL The URL to the file. 63 | * 64 | * @return A CGPathRef object for the SVG in the specified file, or nil if the object could not be found or could not be parsed. 65 | */ 66 | + (CGPathRef)pathFromSVGFileAtURL:(NSURL *)svgFileURL; 67 | 68 | /*! 69 | * Returns a CGPathRef corresponding to the path represented by a string with SVG formatted contents. 70 | * 71 | * @param svgString The string containing the SVG formatted path. 72 | * 73 | * @return A CGPathRef object for the SVG in the string, or nil if no path is found or the string could not be parsed. 74 | */ 75 | + (CGPathRef)pathFromSVGString:(NSString *)svgString; 76 | 77 | /*! 78 | * Returns a CGPathRef corresponding to the path represented by a string with the contents of the d attribute of a path node in an SVG file. 79 | * 80 | * @param dAttribute The string containing the d attribute with the path. 81 | * 82 | * @return A CGPathRef object for the path in the string, or nil if no path is found or the string could not be parsed. 83 | */ 84 | + (CGPathRef)pathFromDAttribute:(NSString *)dAttribute; 85 | 86 | 87 | /*! 88 | * Returns a PocketSVG object initialized with nameOfSVG 89 | * 90 | * @param nameOfSVG The name of the SVG file. The methods looks for a SVG with the specified in the application's main bundle. 91 | * 92 | * @return The PocketSVG object for the specified file, or nil if the object could not be found or could not be parsed. 93 | */ 94 | - (instancetype)initFromSVGFileNamed:(NSString *)nameOfSVG __attribute__((deprecated)); 95 | 96 | /*! 97 | * Returns a PocketSVG object initialized with svgFileURL 98 | * 99 | * @param svgFileURL The URL to the file. 100 | * 101 | * @return The PocketSVG object for the specified file, or nil if the object could not be found or could not be parsed. 102 | */ 103 | - (instancetype)initWithURL:(NSURL *)svgFileURL __attribute__((deprecated)); 104 | 105 | 106 | 107 | #if !TARGET_OS_IPHONE 108 | + (CGPathRef)getCGPathFromNSBezierPath:(NSBezierPath *)quartzPath; 109 | #endif 110 | 111 | @end 112 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/PocketSVG/PocketSVG.m: -------------------------------------------------------------------------------- 1 | // 2 | // PocketSVG.m 3 | // 4 | // Copyright (c) 2013 Ponderwell, Ariel Elkin, and Contributors 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | 26 | #import "PocketSVG.h" 27 | 28 | NSInteger const maxPathComplexity = 1000; 29 | NSInteger const maxParameters = 64; 30 | NSInteger const maxTokenLength = 64; 31 | NSString* const separatorCharString = @"-, CcMmLlHhVvZzqQaAsS"; 32 | NSString* const commandCharString = @"CcMmLlHhVvZzqQaAsS"; 33 | unichar const invalidCommand = '*'; 34 | 35 | 36 | 37 | @interface Token : NSObject { 38 | @private 39 | unichar command; 40 | NSMutableArray *values; 41 | } 42 | 43 | - (id)initWithCommand:(unichar)commandChar; 44 | - (void)addValue:(CGFloat)value; 45 | - (CGFloat)parameter:(NSInteger)index; 46 | - (NSInteger)valence; 47 | @property(nonatomic, assign) unichar command; 48 | @end 49 | 50 | 51 | @implementation Token 52 | 53 | - (id)initWithCommand:(unichar)commandChar { 54 | self = [self init]; 55 | if (self) { 56 | command = commandChar; 57 | values = [[NSMutableArray alloc] initWithCapacity:maxParameters]; 58 | } 59 | return self; 60 | } 61 | 62 | - (void)addValue:(CGFloat)value { 63 | [values addObject:[NSNumber numberWithDouble:value]]; 64 | } 65 | 66 | - (CGFloat)parameter:(NSInteger)index { 67 | return [[values objectAtIndex:index] doubleValue]; 68 | } 69 | 70 | - (NSInteger)valence 71 | { 72 | return [values count]; 73 | } 74 | 75 | 76 | @synthesize command; 77 | 78 | @end 79 | 80 | 81 | @interface PocketSVG () 82 | 83 | - (NSMutableArray *)parsePath:(NSString *)attr; 84 | #if TARGET_OS_IPHONE 85 | - (UIBezierPath *) generateBezier:(NSArray *)tokens; 86 | #else 87 | - (NSBezierPath *) generateBezier:(NSArray *)tokens; 88 | #endif 89 | 90 | - (void)reset; 91 | - (void)appendSVGMCommand:(Token *)token; 92 | - (void)appendSVGLCommand:(Token *)token; 93 | - (void)appendSVGCCommand:(Token *)token; 94 | - (void)appendSVGSCommand:(Token *)token; 95 | 96 | @end 97 | 98 | 99 | @implementation PocketSVG 100 | 101 | @synthesize bezier; 102 | 103 | + (CGPathRef)pathFromSVGFileNamed:(NSString *)nameOfSVG 104 | { 105 | PocketSVG *pocketSVG = [[PocketSVG alloc] initFromSVGPathNodeDAttr:[self parseSVGNamed:nameOfSVG]]; 106 | #if TARGET_OS_IPHONE 107 | return pocketSVG.bezier.CGPath; 108 | #else 109 | return [PocketSVG getCGPathFromNSBezierPath:pocketSVG.bezier]; 110 | #endif 111 | } 112 | 113 | + (CGPathRef)pathFromSVGFileAtURL:(NSURL *)svgFileURL 114 | { 115 | NSString *svgString = [[self class] svgStringAtURL:svgFileURL]; 116 | return [[self class] pathFromSVGString:svgString]; 117 | } 118 | 119 | + (CGPathRef)pathFromSVGString:(NSString *)svgString 120 | { 121 | NSString *dAttribute = [self dStringFromRawSVGString:svgString]; 122 | return [self pathFromDAttribute:dAttribute]; 123 | } 124 | 125 | + (CGPathRef)pathFromDAttribute:(NSString *)dAttribute 126 | { 127 | PocketSVG *pocketSVG = [[PocketSVG alloc] initFromSVGPathNodeDAttr:dAttribute]; 128 | #if TARGET_OS_IPHONE 129 | return pocketSVG.bezier.CGPath; 130 | #else 131 | return [PocketSVG getCGPathFromNSBezierPath:pocketSVG.bezier]; 132 | #endif 133 | } 134 | 135 | - (id)initFromSVGFileNamed:(NSString *)nameOfSVG{ 136 | return [self initFromSVGPathNodeDAttr:[[self class] parseSVGNamed:nameOfSVG]]; 137 | } 138 | 139 | - (id)initWithURL:(NSURL *)svgFileURL 140 | { 141 | NSString *svgString = [[self class] svgStringAtURL:svgFileURL]; 142 | 143 | return [self initFromSVGPathNodeDAttr:[[self class] dStringFromRawSVGString:svgString]]; 144 | } 145 | 146 | + (NSString *)svgStringAtURL:(NSURL *)svgFileURL 147 | { 148 | NSError *error = nil; 149 | 150 | NSString *svgString = [NSString stringWithContentsOfURL:svgFileURL 151 | encoding:NSStringEncodingConversionExternalRepresentation 152 | error:&error]; 153 | if (error) { 154 | NSLog(@"*** PocketSVG Error: Couldn't read contents of SVG file named %@:", svgFileURL); 155 | NSLog(@"%@", error); 156 | return nil; 157 | } 158 | return svgString; 159 | } 160 | 161 | 162 | 163 | /******** 164 | Returns the content of the SVG's d attribute as an NSString 165 | */ 166 | + (NSString *)parseSVGNamed:(NSString *)nameOfSVG{ 167 | NSString *pathOfSVGFile = [[NSBundle bundleForClass:[self class]] pathForResource:nameOfSVG ofType:@"svg"]; 168 | 169 | if(pathOfSVGFile == nil){ 170 | NSLog(@"*** PocketSVG Error: No SVG file named \"%@\".", nameOfSVG); 171 | return nil; 172 | } 173 | 174 | NSError *error = nil; 175 | NSString *mySVGString = [[NSString alloc] initWithContentsOfFile:pathOfSVGFile encoding:NSStringEncodingConversionExternalRepresentation error:&error]; 176 | 177 | if(error != nil){ 178 | NSLog(@"*** PocketSVG Error: Couldn't read contents of SVG file named %@:", nameOfSVG); 179 | NSLog(@"%@", error); 180 | return nil; 181 | } 182 | 183 | return [[self class] dStringFromRawSVGString:mySVGString]; 184 | } 185 | 186 | + (NSString*)dStringFromRawSVGString:(NSString*)svgString{ 187 | //Uncomment the two lines below to print the raw data of the SVG file: 188 | //NSLog(@"*** PocketSVG: Raw SVG data of %@:", nameOfSVG); 189 | //NSLog(@"%@", mySVGString); 190 | 191 | svgString = [svgString stringByReplacingOccurrencesOfString:@"id=" withString:@""]; 192 | 193 | NSArray *components = [svgString componentsSeparatedByString:@"d="]; 194 | 195 | if([components count] < 2){ 196 | NSLog(@"*** PocketSVG Error: No d attribute found in SVG file."); 197 | return nil; 198 | } 199 | 200 | NSString *dString = [components lastObject]; 201 | dString = [dString substringFromIndex:1]; 202 | NSRange d = [dString rangeOfString:@"\""]; 203 | dString = [dString substringToIndex:d.location]; 204 | dString = [dString stringByReplacingOccurrencesOfString:@" " withString:@","]; 205 | 206 | NSArray *dStringWithPossibleWhiteSpace = [dString componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 207 | 208 | dString = [dStringWithPossibleWhiteSpace componentsJoinedByString:@""]; 209 | 210 | //Uncomment the line below to print the raw path data of the SVG file: 211 | //NSLog(@"*** PocketSVG: Path data of %@ is: %@", nameOfSVG, dString); 212 | 213 | return dString; 214 | } 215 | 216 | - (id)initFromSVGPathNodeDAttr:(NSString *)attr 217 | { 218 | self = [super init]; 219 | if (self) { 220 | pathScale = 0; 221 | [self reset]; 222 | separatorSet = [NSCharacterSet characterSetWithCharactersInString:separatorCharString]; 223 | commandSet = [NSCharacterSet characterSetWithCharactersInString:commandCharString]; 224 | tokens = [self parsePath:attr]; 225 | bezier = [self generateBezier:tokens]; 226 | } 227 | return self; 228 | } 229 | 230 | 231 | #pragma mark - Private methods 232 | 233 | /* 234 | Tokenise pseudocode, used in parsePath below 235 | 236 | start a token 237 | eat a character 238 | while more characters to eat 239 | add character to token 240 | while in a token and more characters to eat 241 | eat character 242 | add character to token 243 | add completed token to store 244 | start a new token 245 | throw away empty token 246 | */ 247 | 248 | - (NSMutableArray *)parsePath:(NSString *)attr 249 | { 250 | NSMutableArray *stringTokens = [NSMutableArray arrayWithCapacity: maxPathComplexity]; 251 | 252 | NSInteger index = 0; 253 | while (index < [attr length]) { 254 | unichar charAtIndex = [attr characterAtIndex:index]; 255 | //Jagie:Skip whitespace 256 | if (charAtIndex == 32) { 257 | index ++; 258 | continue; 259 | } 260 | NSMutableString *stringToken = [[NSMutableString alloc] initWithCapacity:maxTokenLength]; 261 | [stringToken setString:@""]; 262 | 263 | if (charAtIndex != ',') { 264 | [stringToken appendString:[NSString stringWithFormat:@"%c", charAtIndex]]; 265 | } 266 | if (![commandSet characterIsMember:charAtIndex] && charAtIndex != ',') { 267 | while ( (++index < [attr length]) && ![separatorSet characterIsMember:(charAtIndex = [attr characterAtIndex:index])] ) { 268 | [stringToken appendString:[NSString stringWithFormat:@"%c", charAtIndex]]; 269 | } 270 | } 271 | else { 272 | index++; 273 | } 274 | 275 | if ([stringToken length]) { 276 | [stringTokens addObject:stringToken]; 277 | } 278 | } 279 | 280 | if ([stringTokens count] == 0) { 281 | NSLog(@"*** PocketSVG Error: Path string is empty of tokens"); 282 | return nil; 283 | } 284 | 285 | // turn the stringTokens array into Tokens, checking validity of tokens as we go 286 | tokens = [[NSMutableArray alloc] initWithCapacity:maxPathComplexity]; 287 | index = 0; 288 | NSString *stringToken = [stringTokens objectAtIndex:index]; 289 | unichar command = [stringToken characterAtIndex:0]; 290 | while (index < [stringTokens count]) { 291 | if (![commandSet characterIsMember:command]) { 292 | NSLog(@"*** PocketSVG Error: Path string parse error: found float where expecting command at token %ld in path %s.", 293 | (long)index, [attr cStringUsingEncoding:NSUTF8StringEncoding]); 294 | return nil; 295 | } 296 | Token *token = [[Token alloc] initWithCommand:command]; 297 | 298 | // There can be any number of floats after a command. Suck them in until the next command. 299 | while ((++index < [stringTokens count]) && ![commandSet characterIsMember: 300 | (command = [(stringToken = [stringTokens objectAtIndex:index]) characterAtIndex:0])]) { 301 | 302 | NSScanner *floatScanner = [NSScanner scannerWithString:stringToken]; 303 | float value; 304 | if (![floatScanner scanFloat:&value]) { 305 | NSLog(@"*** PocketSVG Error: Path string parse error: expected float or command at token %ld (but found %s) in path %s.", 306 | (long)index, [stringToken cStringUsingEncoding:NSUTF8StringEncoding], [attr cStringUsingEncoding:NSUTF8StringEncoding]); 307 | return nil; 308 | } 309 | // Maintain scale. 310 | pathScale = (fabsf(value) > pathScale) ? fabsf(value) : pathScale; 311 | [token addValue:value]; 312 | } 313 | 314 | // now we've reached a command or the end of the stringTokens array 315 | [tokens addObject:token]; 316 | } 317 | //[stringTokens release]; 318 | return tokens; 319 | } 320 | 321 | #if TARGET_OS_IPHONE 322 | - (UIBezierPath *)generateBezier:(NSArray *)inTokens 323 | { 324 | bezier = [[UIBezierPath alloc] init]; 325 | #else 326 | - (NSBezierPath *)generateBezier:(NSArray *)inTokens 327 | { 328 | bezier = [[NSBezierPath alloc] init]; 329 | #endif 330 | 331 | [self reset]; 332 | for (Token *thisToken in inTokens) { 333 | unichar command = [thisToken command]; 334 | switch (command) { 335 | case 'M': 336 | case 'm': 337 | [self appendSVGMCommand:thisToken]; 338 | break; 339 | case 'L': 340 | case 'l': 341 | case 'H': 342 | case 'h': 343 | case 'V': 344 | case 'v': 345 | [self appendSVGLCommand:thisToken]; 346 | break; 347 | case 'C': 348 | case 'c': 349 | [self appendSVGCCommand:thisToken]; 350 | break; 351 | case 'S': 352 | case 's': 353 | [self appendSVGSCommand:thisToken]; 354 | break; 355 | case 'Z': 356 | case 'z': 357 | [bezier closePath]; 358 | break; 359 | default: 360 | NSLog(@"*** PocketSVG Error: Cannot process command : '%c'", command); 361 | break; 362 | } 363 | } 364 | #if !TARGET_OS_IPHONE 365 | 366 | //-(CGAffineTransform)uiKitCTM:( CGRect) bounds 367 | // { 368 | // return CGAffineTransformConcat( CGAffineTransformMakeScale( 1.0f, -1.0f ), CGAffineTransformMakeTranslation( 0.0f, viewBounds.size.height )); 369 | // }; 370 | 371 | // NSAffineTransform* xform = [NSAffineTransform transform]; 372 | // [xform rotateByDegrees:180]; 373 | // [bezier transformUsingAffineTransform:xform]; 374 | 375 | // CGContextRef graphicsContext = [[NSGraphicsContext currentContext] graphicsPort]; 376 | // CGContextSaveGState(graphicsContext); 377 | // CGContextTranslateCTM(graphicsContext, 0.0, bezier.bounds.size.heigth); 378 | // CGContextScaleCTM(graphicsContext, 1.0, -1.0); 379 | // CGContextDrawImage(graphicsContext, bezier, CGRectMake(0, 0, imageWidth, imageHeight)); 380 | // CGContextRestoreGState(graphicsContext); 381 | // [bezier transformUsingAffineTransform:(NSAffineTransform)(CGAffineTransformConcat( CGAffineTransformMakeScale( 1.0f, -1.0f ), CGAffineTransformMakeTranslation( 0.0f, bezier.bounds.size.height )))]; 382 | 383 | #endif 384 | return bezier; 385 | } 386 | 387 | - (void)reset 388 | { 389 | lastPoint = CGPointMake(0, 0); 390 | validLastControlPoint = NO; 391 | } 392 | 393 | - (void)appendSVGMCommand:(Token *)token 394 | { 395 | validLastControlPoint = NO; 396 | NSInteger index = 0; 397 | BOOL first = YES; 398 | while (index < [token valence]) { 399 | CGFloat x = [token parameter:index] + ([token command] == 'm' ? lastPoint.x : 0); 400 | if (++index == [token valence]) { 401 | NSLog(@"*** PocketSVG Error: Invalid parameter count in M style token"); 402 | return; 403 | } 404 | CGFloat y = [token parameter:index] + ([token command] == 'm' ? lastPoint.y : 0); 405 | lastPoint = CGPointMake(x, y); 406 | if (first) { 407 | [bezier moveToPoint:lastPoint]; 408 | first = NO; 409 | } 410 | else { 411 | #if TARGET_OS_IPHONE 412 | [bezier addLineToPoint:lastPoint]; 413 | #else 414 | [bezier lineToPoint:NSPointFromCGPoint(lastPoint)]; 415 | #endif 416 | } 417 | index++; 418 | } 419 | } 420 | 421 | - (void)appendSVGLCommand:(Token *)token 422 | { 423 | validLastControlPoint = NO; 424 | NSInteger index = 0; 425 | while (index < [token valence]) { 426 | CGFloat x = 0; 427 | CGFloat y = 0; 428 | switch ( [token command] ) { 429 | case 'l': 430 | x = lastPoint.x; 431 | y = lastPoint.y; 432 | case 'L': 433 | x += [token parameter:index]; 434 | if (++index == [token valence]) { 435 | NSLog(@"*** PocketSVG Error: Invalid parameter count in L style token"); 436 | return; 437 | } 438 | y += [token parameter:index]; 439 | break; 440 | case 'h' : 441 | x = lastPoint.x; 442 | case 'H' : 443 | x += [token parameter:index]; 444 | y = lastPoint.y; 445 | break; 446 | case 'v' : 447 | y = lastPoint.y; 448 | case 'V' : 449 | y += [token parameter:index]; 450 | x = lastPoint.x; 451 | break; 452 | default: 453 | NSLog(@"*** PocketSVG Error: Unrecognised L style command."); 454 | return; 455 | } 456 | lastPoint = CGPointMake(x, y); 457 | #if TARGET_OS_IPHONE 458 | [bezier addLineToPoint:lastPoint]; 459 | #else 460 | [bezier lineToPoint:NSPointFromCGPoint(lastPoint)]; 461 | #endif 462 | index++; 463 | } 464 | } 465 | 466 | - (void)appendSVGCCommand:(Token *)token 467 | { 468 | NSInteger index = 0; 469 | while ((index + 5) < [token valence]) { // we must have 6 floats here (x1, y1, x2, y2, x, y). 470 | CGFloat x1 = [token parameter:index++] + ([token command] == 'c' ? lastPoint.x : 0); 471 | CGFloat y1 = [token parameter:index++] + ([token command] == 'c' ? lastPoint.y : 0); 472 | CGFloat x2 = [token parameter:index++] + ([token command] == 'c' ? lastPoint.x : 0); 473 | CGFloat y2 = [token parameter:index++] + ([token command] == 'c' ? lastPoint.y : 0); 474 | CGFloat x = [token parameter:index++] + ([token command] == 'c' ? lastPoint.x : 0); 475 | CGFloat y = [token parameter:index++] + ([token command] == 'c' ? lastPoint.y : 0); 476 | lastPoint = CGPointMake(x, y); 477 | #if TARGET_OS_IPHONE 478 | [bezier addCurveToPoint:lastPoint 479 | controlPoint1:CGPointMake(x1,y1) 480 | controlPoint2:CGPointMake(x2, y2)]; 481 | #else 482 | [bezier curveToPoint:NSPointFromCGPoint(lastPoint) 483 | controlPoint1:NSPointFromCGPoint(CGPointMake(x1,y1)) 484 | controlPoint2:NSPointFromCGPoint(CGPointMake(x2, y2))]; 485 | #endif 486 | lastControlPoint = CGPointMake(x2, y2); 487 | validLastControlPoint = YES; 488 | } 489 | if (index == 0) { 490 | NSLog(@"*** PocketSVG Error: Insufficient parameters for C command"); 491 | } 492 | } 493 | 494 | - (void)appendSVGSCommand:(Token *)token 495 | { 496 | if (!validLastControlPoint) { 497 | NSLog(@"*** PocketSVG Error: Invalid last control point in S command"); 498 | } 499 | NSInteger index = 0; 500 | while ((index + 3) < [token valence]) { // we must have 4 floats here (x2, y2, x, y). 501 | CGFloat x1 = lastPoint.x + (lastPoint.x - lastControlPoint.x); // + ([token command] == 's' ? lastPoint.x : 0); 502 | CGFloat y1 = lastPoint.y + (lastPoint.y - lastControlPoint.y); // + ([token command] == 's' ? lastPoint.y : 0); 503 | CGFloat x2 = [token parameter:index++] + ([token command] == 's' ? lastPoint.x : 0); 504 | CGFloat y2 = [token parameter:index++] + ([token command] == 's' ? lastPoint.y : 0); 505 | CGFloat x = [token parameter:index++] + ([token command] == 's' ? lastPoint.x : 0); 506 | CGFloat y = [token parameter:index++] + ([token command] == 's' ? lastPoint.y : 0); 507 | lastPoint = CGPointMake(x, y); 508 | #if TARGET_OS_IPHONE 509 | [bezier addCurveToPoint:lastPoint 510 | controlPoint1:CGPointMake(x1,y1) 511 | controlPoint2:CGPointMake(x2, y2)]; 512 | #else 513 | [bezier curveToPoint:NSPointFromCGPoint(lastPoint) 514 | controlPoint1:NSPointFromCGPoint(CGPointMake(x1,y1)) 515 | controlPoint2:NSPointFromCGPoint(CGPointMake(x2, y2))]; 516 | #endif 517 | lastControlPoint = CGPointMake(x2, y2); 518 | validLastControlPoint = YES; 519 | } 520 | if (index == 0) { 521 | NSLog(@"*** PocketSVG Error: Insufficient parameters for S command"); 522 | } 523 | } 524 | 525 | #if !TARGET_OS_IPHONE 526 | //NSBezierPaths don't have a CGPath property, so we need to fetch their CGPath manually. 527 | //This comes from the "Creating a CGPathRef From an NSBezierPath Object" section of 528 | //https://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CocoaDrawingGuide/Paths/Paths.html 529 | 530 | + (CGPathRef)getCGPathFromNSBezierPath:(NSBezierPath *)quartzPath 531 | { 532 | int i; 533 | NSInteger numElements; 534 | // Need to begin a path here. 535 | CGPathRef immutablePath = NULL; 536 | 537 | // Then draw the path elements. 538 | numElements = [quartzPath elementCount]; 539 | if (numElements > 0) 540 | { 541 | CGMutablePathRef path = CGPathCreateMutable(); 542 | NSPoint points[3]; 543 | BOOL didClosePath = YES; 544 | 545 | for (i = 0; i < numElements; i++) 546 | { 547 | switch ([quartzPath elementAtIndex:i associatedPoints:points]) 548 | { 549 | case NSMoveToBezierPathElement: 550 | CGPathMoveToPoint(path, NULL, points[0].x, points[0].y); 551 | break; 552 | 553 | case NSLineToBezierPathElement: 554 | CGPathAddLineToPoint(path, NULL, points[0].x, points[0].y); 555 | didClosePath = NO; 556 | break; 557 | 558 | case NSCurveToBezierPathElement: 559 | CGPathAddCurveToPoint(path, NULL, points[0].x, points[0].y, 560 | points[1].x, points[1].y, 561 | points[2].x, points[2].y); 562 | didClosePath = NO; 563 | break; 564 | 565 | case NSClosePathBezierPathElement: 566 | CGPathCloseSubpath(path); 567 | didClosePath = YES; 568 | break; 569 | } 570 | } 571 | 572 | immutablePath = CGPathCreateCopy(path); 573 | CGPathRelease(path); 574 | } 575 | 576 | //TODO: 577 | //At this stage, immutablePath is upside down. I'm currently flipping it back using CGAffineTransforms, 578 | //the path rotates fine, but its positioning needs to be fixed. 579 | 580 | CGAffineTransform flip = CGAffineTransformMake(1, 0, 0, -1, 0, CGPathGetBoundingBox(immutablePath).size.height); 581 | CGAffineTransform moveDown = CGAffineTransformMakeTranslation(0, -100); 582 | CGAffineTransform trans = CGAffineTransformConcat(flip, moveDown); 583 | CGPathRef betterPath = CGPathCreateCopyByTransformingPath(immutablePath, &trans); 584 | return betterPath; 585 | } 586 | #endif 587 | 588 | 589 | @end 590 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/PullToMakeSoup.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Anastasiya Gorban on 4/14/15. 3 | // Copyright (c) 2015 Yalantis. All rights reserved. 4 | // 5 | // Licensed under the MIT license: http://opensource.org/licenses/MIT 6 | // Latest version can be found at https://github.com/Yalantis/PullToMakeSoup 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import PullToRefresh 12 | 13 | open class PullToMakeSoup: PullToRefresh { 14 | 15 | public convenience init(at position: Position = .top) { 16 | let refreshView = Bundle(for: type(of: self)).loadNibNamed("SoupView", owner: nil, options: nil)!.first as! SoupView 17 | let animator = SoupAnimator(refreshView: refreshView) 18 | self.init(refreshView: refreshView, animator: animator, height : refreshView.frame.size.height, position : position) 19 | } 20 | } 21 | 22 | class SoupView: UIView { 23 | @IBOutlet 24 | fileprivate var pan: UIImageView! 25 | @IBOutlet 26 | fileprivate var cover: UIImageView! 27 | @IBOutlet 28 | fileprivate var potato: UIImageView! 29 | @IBOutlet 30 | fileprivate var leftPea: UIImageView! 31 | @IBOutlet 32 | fileprivate var rightPea: UIImageView! 33 | @IBOutlet 34 | fileprivate var carrot: UIImageView! 35 | @IBOutlet 36 | fileprivate var circle: UIImageView! 37 | @IBOutlet 38 | fileprivate var water: UIImageView! 39 | @IBOutlet 40 | fileprivate var flame: UIImageView! 41 | @IBOutlet 42 | fileprivate var shadow: UIImageView! 43 | } 44 | 45 | class SoupAnimator: NSObject, RefreshViewAnimator { 46 | 47 | fileprivate let refreshView: SoupView 48 | fileprivate let refreshViewHeight: CGFloat 49 | 50 | fileprivate var bubbleTimer: Timer? 51 | 52 | fileprivate let animationDuration = 0.3 53 | 54 | init(refreshView: SoupView) { 55 | self.refreshView = refreshView 56 | self.refreshViewHeight = refreshView.frame.size.height 57 | } 58 | 59 | public func animate(_ state: State) { 60 | switch state { 61 | case .initial: 62 | initalLayout() 63 | case .releasing(let progress): 64 | releasingAnimation(progress) 65 | case .loading: 66 | startLoading() 67 | case .finished: 68 | bubbleTimer?.invalidate() 69 | } 70 | } 71 | 72 | // MARK: - Helpers 73 | 74 | func initalLayout() { 75 | let centerX = refreshView.frame.size.width / 2 76 | 77 | // Circle 78 | refreshView.circle.center = CGPoint(x: centerX, y: refreshViewHeight / 2) 79 | 80 | // Carrot 81 | refreshView.carrot.removeAllAnimations() 82 | 83 | refreshView.carrot.addAnimation( 84 | CAKeyframeAnimation.animationPosition( 85 | PocketSVG.pathFromSVGFileNamed("carrot-path-only", 86 | origin: CGPoint(x: centerX + 11, y: 10), 87 | mirrorX: true, 88 | mirrorY: false, 89 | scale: 0.5), 90 | duration: animationDuration, 91 | timingFunction:TimingFunction.easeIn, 92 | beginTime:0) 93 | ) 94 | 95 | refreshView.carrot.addAnimation(CAKeyframeAnimation.animationWith( 96 | AnimationType.Rotation, 97 | values: [4.131, 5.149, 6.294], 98 | keyTimes: [0, 0.5, 1], 99 | duration: animationDuration, 100 | beginTime:0)) 101 | refreshView.carrot.addAnimation(CAKeyframeAnimation.animationWith( 102 | AnimationType.Opacity, 103 | values: [0, 1], 104 | keyTimes: [0, 1], 105 | duration: animationDuration, 106 | beginTime: 0)) 107 | 108 | refreshView.carrot.layer.timeOffset = 0.0 109 | 110 | // Pan 111 | refreshView.pan.removeAllAnimations() 112 | 113 | refreshView.pan.center = CGPoint(x: centerX, y: refreshView.pan.center.y) 114 | refreshView.pan.addAnimation(CAKeyframeAnimation.animationWith( 115 | AnimationType.TranslationY, 116 | values: [-200, 0], 117 | keyTimes: [0, 0.5], 118 | duration: animationDuration, 119 | beginTime:0)) 120 | refreshView.shadow.alpha = 0 121 | refreshView.shadow.center = CGPoint(x: centerX + 11, y: refreshView.shadow.center.y) 122 | refreshView.pan.layer.timeOffset = 0.0 123 | 124 | // Water 125 | 126 | refreshView.water.center = CGPoint(x: centerX, y: refreshView.water.center.y) 127 | refreshView.water.layer.anchorPoint = CGPoint(x: 0.5, y: 1.0) 128 | refreshView.water.transform = CGAffineTransform(scaleX: 1, y: 0.00001); 129 | 130 | // Potato 131 | refreshView.potato.removeAllAnimations() 132 | 133 | refreshView.potato.addAnimation( 134 | CAKeyframeAnimation.animationPosition( 135 | PocketSVG.pathFromSVGFileNamed("potato-path-only", 136 | origin: CGPoint(x: centerX - 65, y: 5), 137 | mirrorX: true, 138 | mirrorY: false, 139 | scale: 1), 140 | duration: animationDuration, 141 | timingFunction:TimingFunction.easeIn, 142 | beginTime:0) 143 | ) 144 | 145 | refreshView.potato.addAnimation( 146 | CAKeyframeAnimation.animationWith( 147 | AnimationType.Opacity, 148 | values: [0, 1], 149 | keyTimes: [0, 1], 150 | duration: animationDuration, 151 | beginTime:0) 152 | ) 153 | 154 | refreshView.potato.addAnimation(CAKeyframeAnimation.animationWith( 155 | AnimationType.Rotation, 156 | values: [5.663, 4.836, 3.578], 157 | keyTimes: [0, 0.5, 1], 158 | duration: animationDuration, 159 | beginTime:0)) 160 | 161 | refreshView.potato.layer.timeOffset = 0.0 162 | 163 | // Left pea 164 | refreshView.leftPea.removeAllAnimations() 165 | 166 | refreshView.leftPea.addAnimation( 167 | CAKeyframeAnimation.animationPosition( 168 | PocketSVG.pathFromSVGFileNamed("pea-from-left-path-only", 169 | origin: CGPoint(x: centerX - 80, y: 12), 170 | mirrorX: false, 171 | mirrorY: false, 172 | scale: 1), 173 | duration: animationDuration, 174 | timingFunction:TimingFunction.easeIn, 175 | beginTime:0) 176 | ) 177 | 178 | refreshView.leftPea.addAnimation( 179 | CAKeyframeAnimation.animationWith( 180 | AnimationType.Opacity, 181 | values: [0, 1], 182 | keyTimes: [0, 1], 183 | duration: animationDuration, 184 | beginTime:0) 185 | ) 186 | 187 | refreshView.leftPea.layer.timeOffset = 0.0 188 | 189 | // Right pea 190 | refreshView.rightPea.removeAllAnimations() 191 | 192 | refreshView.rightPea.addAnimation( 193 | CAKeyframeAnimation.animationPosition( 194 | PocketSVG.pathFromSVGFileNamed("pea-from-right-path-only", 195 | origin: CGPoint(x: centerX - 10, y: -13), 196 | mirrorX: true, 197 | mirrorY: false, 198 | scale: 1), 199 | duration: animationDuration, 200 | timingFunction:TimingFunction.easeIn, 201 | beginTime:0) 202 | ) 203 | 204 | refreshView.rightPea.addAnimation( 205 | CAKeyframeAnimation.animationWith( 206 | AnimationType.Opacity, 207 | values: [0, 1], 208 | keyTimes: [0, 1], 209 | duration: animationDuration, 210 | beginTime:0) 211 | ) 212 | 213 | refreshView.rightPea.layer.timeOffset = 0.0 214 | 215 | // Flame 216 | 217 | refreshView.flame.center = CGPoint(x: refreshView.frame.size.width / 2, y: refreshView.flame.center.y) 218 | refreshView.flame.image = nil 219 | refreshView.flame.stopAnimating() 220 | refreshView.flame.animationImages = nil 221 | 222 | // Cover 223 | 224 | refreshView.cover.layer.anchorPoint = CGPoint(x: 1, y: 0.5) 225 | refreshView.cover.center = CGPoint(x: refreshView.frame.size.width / 2 + refreshView.cover.frame.size.width/2, y: refreshView.cover.center.y) 226 | 227 | refreshView.cover.removeAllAnimations() 228 | 229 | refreshView.cover.addAnimation( 230 | CAKeyframeAnimation.animationPosition( 231 | PocketSVG.pathFromSVGFileNamed("cover-path-only", 232 | origin: CGPoint(x: refreshView.pan.center.x + 34, y: -51), 233 | mirrorX: true, 234 | mirrorY: true, 235 | scale: 0.5), 236 | duration: animationDuration, 237 | timingFunction:TimingFunction.easeIn, 238 | beginTime:0) 239 | ) 240 | 241 | refreshView.cover.addAnimation( 242 | CAKeyframeAnimation.animationWith( 243 | AnimationType.Rotation, 244 | values: [2.009, 0], 245 | keyTimes: [0, 1], 246 | duration: animationDuration, 247 | beginTime:0) 248 | ) 249 | 250 | refreshView.cover.layer.timeOffset = 0.0 251 | } 252 | 253 | func startLoading() { 254 | refreshView.circle.center = CGPoint(x: refreshView.frame.size.width / 2, y: refreshView.frame.size.height / 2) 255 | refreshView.carrot.layer.timeOffset = animationDuration 256 | refreshView.pan.layer.timeOffset = animationDuration 257 | refreshView.potato.layer.timeOffset = animationDuration 258 | refreshView.leftPea.layer.timeOffset = animationDuration 259 | refreshView.rightPea.layer.timeOffset = animationDuration 260 | refreshView.cover.layer.timeOffset = animationDuration 261 | 262 | // Water & Cover 263 | refreshView.water.center = CGPoint(x: refreshView.water.center.x, y: refreshView.pan.center.y + 22) 264 | refreshView.water.clipsToBounds = true 265 | 266 | 267 | UIView.animate(withDuration: 1, delay: 0, options: UIViewAnimationOptions(), animations: { 268 | self.refreshView.shadow.alpha = 1 269 | self.refreshView.water.transform = CGAffineTransform(scaleX: 1, y: 1) 270 | }, completion: { completed in 271 | self.refreshView.cover.layer.anchorPoint = CGPoint(x: 0.5, y: 0.5) 272 | self.refreshView.cover.center = CGPoint(x: self.refreshView.cover.center.x - self.refreshView.cover.frame.size.width/2, y: self.refreshView.cover.center.y) 273 | let coverRotationAnimation = CAKeyframeAnimation.animationWith( 274 | AnimationType.Rotation, 275 | values: [0.05, 0, -0.05, 0, 0.07, -0.03, 0], 276 | keyTimes: [0, 0.2, 0.4, 0.6, 0.8, 0.9, 1], 277 | duration: 0.5, 278 | beginTime:0 279 | ) 280 | 281 | let coverPositionAnimation = CAKeyframeAnimation.animationWith( 282 | AnimationType.TranslationY, 283 | values: [-2, 0, -2, 1, -3, 0], 284 | keyTimes: [0, 0.3, 0.5, 0.7, 0.9, 1], 285 | duration: 0.5, 286 | beginTime: 0) 287 | 288 | let animationGroup = CAAnimationGroup() 289 | animationGroup.duration = 1; 290 | animationGroup.repeatCount = Float.greatestFiniteMagnitude; 291 | 292 | animationGroup.animations = [coverRotationAnimation, coverPositionAnimation]; 293 | 294 | self.refreshView.cover.layer.add(animationGroup, forKey: "group") 295 | self.refreshView.cover.layer.speed = 1 296 | }) 297 | 298 | // Bubbles 299 | 300 | bubbleTimer = Timer.scheduledTimer(timeInterval: 0.12, target: self, selector: #selector(SoupAnimator.addBubble), userInfo: nil, repeats: true) 301 | 302 | // Flame 303 | 304 | var lightsImages = [UIImage]() 305 | for i in 1...11 { 306 | let imageName = NSString(format: "Flames%.4d", i) 307 | let image = UIImage(named: imageName as String, in: Bundle(for: type(of: self)), compatibleWith: nil) 308 | lightsImages.append(image!) 309 | } 310 | refreshView.flame.animationImages = lightsImages 311 | refreshView.flame.animationDuration = 0.7 312 | refreshView.flame.startAnimating() 313 | 314 | let delayTime = DispatchTime.now() + Double(Int64(0.7 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) 315 | DispatchQueue.main.asyncAfter(deadline: delayTime) { 316 | var lightsImages = [UIImage]() 317 | for i in 11...68 { 318 | let imageName = NSString(format: "Flames%.4d", i) 319 | let image = UIImage(named: imageName as String, in: Bundle(for: type(of: self)), compatibleWith: nil) 320 | lightsImages.append(image!) 321 | } 322 | 323 | self.refreshView.flame.animationImages = lightsImages 324 | self.refreshView.flame.animationDuration = 2 325 | self.refreshView.flame.animationRepeatCount = 0 326 | self.refreshView.flame.startAnimating() 327 | } 328 | } 329 | 330 | @objc func addBubble() { 331 | let radius: CGFloat = 1 332 | let x = CGFloat(arc4random_uniform(UInt32(self.refreshView.water.frame.size.width))) 333 | let circle = UIView(frame: CGRect(x: x, y: self.refreshView.water.frame.size.height, width: 2*radius, height: 2*radius)) 334 | circle.layer.cornerRadius = radius 335 | circle.layer.borderWidth = 1 336 | circle.layer.masksToBounds = true 337 | circle.layer.borderColor = UIColor.white.cgColor 338 | self.refreshView.water.addSubview(circle) 339 | UIView.animate(withDuration: 1.3, animations: { 340 | let radius:CGFloat = 4 341 | circle.layer.frame = CGRect(x: x, y: -20, width: 2*radius, height: 2*radius) 342 | circle.layer.cornerRadius = radius 343 | }, completion: { _ in 344 | circle.removeFromSuperview() 345 | }) 346 | } 347 | 348 | func releasingAnimation(_ progress: CGFloat) { 349 | let speed: CGFloat = 1.5 350 | 351 | let speededProgress: CGFloat = progress * speed > 1 ? 1 : progress * speed 352 | 353 | refreshView.circle.alpha = progress 354 | refreshView.circle.transform = CGAffineTransform.identity.scaledBy(x: speededProgress, y: speededProgress); 355 | refreshView.circle.center = CGPoint(x: refreshView.frame.size.width / 2, y: refreshViewHeight / 2 + refreshViewHeight - (refreshViewHeight * progress)) 356 | 357 | func progressWithOffset(_ offset: Double, _ progress: Double) -> Double { 358 | return progress < offset ? 0 : (progress - offset) * 1/(1 - offset) 359 | } 360 | 361 | refreshView.pan.alpha = progress 362 | refreshView.pan.layer.timeOffset = Double(speededProgress) * animationDuration 363 | refreshView.cover.layer.timeOffset = animationDuration * progressWithOffset(0.9, Double(progress)) 364 | 365 | refreshView.carrot.layer.timeOffset = animationDuration * progressWithOffset(0.5, Double(progress)) 366 | 367 | refreshView.potato.layer.timeOffset = animationDuration * progressWithOffset(0.8, Double(progress)) 368 | refreshView.leftPea.layer.timeOffset = animationDuration * progressWithOffset(0.5, Double(progress)) 369 | refreshView.rightPea.layer.timeOffset = animationDuration * progressWithOffset(0.8, Double(progress)) 370 | } 371 | } 372 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/carrot.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "carrot@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/carrot.imageset/carrot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/carrot.imageset/carrot@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/circle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "circle@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/circle.imageset/circle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/circle.imageset/circle@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/cover.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "cover@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/cover.imageset/cover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/cover.imageset/cover@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0001.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0001.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0001.imageset/Flames0001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0001.imageset/Flames0001.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0002.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0002.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0002.imageset/Flames0002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0002.imageset/Flames0002.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0003.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0003.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0003.imageset/Flames0003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0003.imageset/Flames0003.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0004.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0004.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0004.imageset/Flames0004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0004.imageset/Flames0004.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0005.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0005.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0005.imageset/Flames0005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0005.imageset/Flames0005.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0006.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0006.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0006.imageset/Flames0006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0006.imageset/Flames0006.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0007.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0007.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0007.imageset/Flames0007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0007.imageset/Flames0007.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0008.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0008.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0008.imageset/Flames0008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0008.imageset/Flames0008.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0009.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0009.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0009.imageset/Flames0009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0009.imageset/Flames0009.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0010.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0010.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0010.imageset/Flames0010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0010.imageset/Flames0010.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0011.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0011.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0011.imageset/Flames0011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0011.imageset/Flames0011.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0012.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0012.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0012.imageset/Flames0012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0012.imageset/Flames0012.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0013.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0013.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0013.imageset/Flames0013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0013.imageset/Flames0013.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0014.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0014.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0014.imageset/Flames0014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0014.imageset/Flames0014.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0015.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0015.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0015.imageset/Flames0015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0015.imageset/Flames0015.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0016.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0016.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0016.imageset/Flames0016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0016.imageset/Flames0016.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0017.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0017.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0017.imageset/Flames0017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0017.imageset/Flames0017.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0018.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0018.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0018.imageset/Flames0018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0018.imageset/Flames0018.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0019.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0019.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0019.imageset/Flames0019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0019.imageset/Flames0019.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0020.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0020.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0020.imageset/Flames0020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0020.imageset/Flames0020.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0021.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0021.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0021.imageset/Flames0021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0021.imageset/Flames0021.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0022.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0022.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0022.imageset/Flames0022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0022.imageset/Flames0022.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0023.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0023.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0023.imageset/Flames0023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0023.imageset/Flames0023.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0024.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0024.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0024.imageset/Flames0024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0024.imageset/Flames0024.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0025.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0025.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0025.imageset/Flames0025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0025.imageset/Flames0025.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0026.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0026.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0026.imageset/Flames0026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0026.imageset/Flames0026.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0027.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0027.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0027.imageset/Flames0027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0027.imageset/Flames0027.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0028.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0028.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0028.imageset/Flames0028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0028.imageset/Flames0028.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0029.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0029.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0029.imageset/Flames0029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0029.imageset/Flames0029.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0030.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0030.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0030.imageset/Flames0030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0030.imageset/Flames0030.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0031.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0031.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0031.imageset/Flames0031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0031.imageset/Flames0031.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0032.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0032.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0032.imageset/Flames0032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0032.imageset/Flames0032.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0033.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0033.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0033.imageset/Flames0033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0033.imageset/Flames0033.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0034.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0034.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0034.imageset/Flames0034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0034.imageset/Flames0034.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0035.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0035.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0035.imageset/Flames0035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0035.imageset/Flames0035.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0036.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0036.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0036.imageset/Flames0036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0036.imageset/Flames0036.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0037.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0037.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0037.imageset/Flames0037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0037.imageset/Flames0037.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0038.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0038.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0038.imageset/Flames0038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0038.imageset/Flames0038.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0039.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0039.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0039.imageset/Flames0039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0039.imageset/Flames0039.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0040.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0040.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0040.imageset/Flames0040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0040.imageset/Flames0040.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0041.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0041.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0041.imageset/Flames0041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0041.imageset/Flames0041.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0042.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0042.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0042.imageset/Flames0042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0042.imageset/Flames0042.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0043.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0043.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0043.imageset/Flames0043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0043.imageset/Flames0043.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0044.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0044.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0044.imageset/Flames0044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0044.imageset/Flames0044.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0045.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0045.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0045.imageset/Flames0045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0045.imageset/Flames0045.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0046.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0046.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0046.imageset/Flames0046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0046.imageset/Flames0046.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0047.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0047.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0047.imageset/Flames0047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0047.imageset/Flames0047.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0048.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0048.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0048.imageset/Flames0048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0048.imageset/Flames0048.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0049.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0049.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0049.imageset/Flames0049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0049.imageset/Flames0049.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0050.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0050.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0050.imageset/Flames0050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0050.imageset/Flames0050.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0051.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0051.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0051.imageset/Flames0051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0051.imageset/Flames0051.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0052.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0052.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0052.imageset/Flames0052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0052.imageset/Flames0052.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0053.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0053.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0053.imageset/Flames0053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0053.imageset/Flames0053.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0054.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0054.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0054.imageset/Flames0054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0054.imageset/Flames0054.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0055.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0055.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0055.imageset/Flames0055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0055.imageset/Flames0055.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0056.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0056.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0056.imageset/Flames0056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0056.imageset/Flames0056.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0057.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0057.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0057.imageset/Flames0057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0057.imageset/Flames0057.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0058.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0058.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0058.imageset/Flames0058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0058.imageset/Flames0058.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0059.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0059.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0059.imageset/Flames0059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0059.imageset/Flames0059.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0060.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0060.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0060.imageset/Flames0060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0060.imageset/Flames0060.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0061.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0061.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0061.imageset/Flames0061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0061.imageset/Flames0061.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0062.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0062.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0062.imageset/Flames0062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0062.imageset/Flames0062.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0063.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0063.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0063.imageset/Flames0063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0063.imageset/Flames0063.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0064.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0064.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0064.imageset/Flames0064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0064.imageset/Flames0064.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0065.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0065.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0065.imageset/Flames0065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0065.imageset/Flames0065.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0066.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0066.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0066.imageset/Flames0066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0066.imageset/Flames0066.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0067.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0067.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0067.imageset/Flames0067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0067.imageset/Flames0067.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0068.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0068.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0068.imageset/Flames0068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0068.imageset/Flames0068.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0069.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0069.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0069.imageset/Flames0069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0069.imageset/Flames0069.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0070.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0070.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0070.imageset/Flames0070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0070.imageset/Flames0070.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0071.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0071.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0071.imageset/Flames0071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0071.imageset/Flames0071.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0072.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0072.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0072.imageset/Flames0072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0072.imageset/Flames0072.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0073.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0073.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0073.imageset/Flames0073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0073.imageset/Flames0073.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0074.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0074.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0074.imageset/Flames0074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0074.imageset/Flames0074.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0075.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0075.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0075.imageset/Flames0075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0075.imageset/Flames0075.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0076.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0076.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0076.imageset/Flames0076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0076.imageset/Flames0076.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0077.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0077.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0077.imageset/Flames0077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0077.imageset/Flames0077.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0078.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "Flames0078.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0078.imageset/Flames0078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/flames/Flames0078.imageset/Flames0078.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pan.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "pan@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pan.imageset/pan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pan.imageset/pan@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pea.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "pea@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pea.imageset/pea@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/pea.imageset/pea@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/potato.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "potato@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/potato.imageset/potato@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/potato.imageset/potato@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/shadow.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "shadow@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/shadow.imageset/shadow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/shadow.imageset/shadow@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/water.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "water@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/water.imageset/water@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoup/PullToMakeSoup/Resources/CookingRefresher.xcassets/water.imageset/water@2x.png -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/SoupView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/carrot-path-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/cover-path-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/pea-from-left-path-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/pea-from-right-path-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoup/PullToMakeSoup/Resources/potato-path-only.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4DDDB1501B0F7E1100DE9D93 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDDB14F1B0F7E1100DE9D93 /* AppDelegate.swift */; }; 11 | 4DDDB1521B0F7E1100DE9D93 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDDB1511B0F7E1100DE9D93 /* ViewController.swift */; }; 12 | 4DDDB1551B0F7E1100DE9D93 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4DDDB1531B0F7E1100DE9D93 /* Main.storyboard */; }; 13 | 4DDDB1571B0F7E1100DE9D93 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4DDDB1561B0F7E1100DE9D93 /* Images.xcassets */; }; 14 | 4DDDB15A1B0F7E1100DE9D93 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4DDDB1581B0F7E1100DE9D93 /* LaunchScreen.xib */; }; 15 | EA1AEEA21218E9FB13C8CF32 /* Pods_PullToMakeSoupDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93111679954DDFBE11DDB44B /* Pods_PullToMakeSoupDemo.framework */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 4DDDB1901B0F7EA500DE9D93 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 4DBC16291B11FC4E001761DA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 33 | 4DC8A6AD1B11EA7900F09CCE /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 34 | 4DDDB14A1B0F7E1100DE9D93 /* PullToMakeSoupDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PullToMakeSoupDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | 4DDDB14E1B0F7E1100DE9D93 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 36 | 4DDDB14F1B0F7E1100DE9D93 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 4DDDB1511B0F7E1100DE9D93 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 38 | 4DDDB1541B0F7E1100DE9D93 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | 4DDDB1561B0F7E1100DE9D93 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 40 | 4DDDB1591B0F7E1100DE9D93 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 41 | 664278C89F4CA4247D1A775F /* Pods-PullToMakeSoupDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PullToMakeSoupDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-PullToMakeSoupDemo/Pods-PullToMakeSoupDemo.release.xcconfig"; sourceTree = ""; }; 42 | 84A91C0F362EE439781E1516 /* Pods-PullToMakeSoupDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PullToMakeSoupDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PullToMakeSoupDemo/Pods-PullToMakeSoupDemo.debug.xcconfig"; sourceTree = ""; }; 43 | 8D8847D90CA1477795D6C323 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 93111679954DDFBE11DDB44B /* Pods_PullToMakeSoupDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PullToMakeSoupDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 4DDDB1471B0F7E1100DE9D93 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | EA1AEEA21218E9FB13C8CF32 /* Pods_PullToMakeSoupDemo.framework in Frameworks */, 53 | ); 54 | runOnlyForDeploymentPostprocessing = 0; 55 | }; 56 | /* End PBXFrameworksBuildPhase section */ 57 | 58 | /* Begin PBXGroup section */ 59 | 4DDDB1411B0F7E1100DE9D93 = { 60 | isa = PBXGroup; 61 | children = ( 62 | 4DDDB14C1B0F7E1100DE9D93 /* PullToMakeSoupDemo */, 63 | 4DDDB14B1B0F7E1100DE9D93 /* Products */, 64 | ACA4BC2C6C97422361925846 /* Frameworks */, 65 | 9EDF817E3B35066C3840C2C9 /* Pods */, 66 | ); 67 | sourceTree = ""; 68 | }; 69 | 4DDDB14B1B0F7E1100DE9D93 /* Products */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 4DDDB14A1B0F7E1100DE9D93 /* PullToMakeSoupDemo.app */, 73 | ); 74 | name = Products; 75 | sourceTree = ""; 76 | }; 77 | 4DDDB14C1B0F7E1100DE9D93 /* PullToMakeSoupDemo */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 4DDDB14F1B0F7E1100DE9D93 /* AppDelegate.swift */, 81 | 4DDDB1511B0F7E1100DE9D93 /* ViewController.swift */, 82 | 4DDDB1531B0F7E1100DE9D93 /* Main.storyboard */, 83 | 4DDDB1561B0F7E1100DE9D93 /* Images.xcassets */, 84 | 4DDDB1581B0F7E1100DE9D93 /* LaunchScreen.xib */, 85 | 4DDDB14D1B0F7E1100DE9D93 /* Supporting Files */, 86 | ); 87 | path = PullToMakeSoupDemo; 88 | sourceTree = ""; 89 | }; 90 | 4DDDB14D1B0F7E1100DE9D93 /* Supporting Files */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 4DDDB14E1B0F7E1100DE9D93 /* Info.plist */, 94 | ); 95 | name = "Supporting Files"; 96 | sourceTree = ""; 97 | }; 98 | 9EDF817E3B35066C3840C2C9 /* Pods */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 84A91C0F362EE439781E1516 /* Pods-PullToMakeSoupDemo.debug.xcconfig */, 102 | 664278C89F4CA4247D1A775F /* Pods-PullToMakeSoupDemo.release.xcconfig */, 103 | ); 104 | name = Pods; 105 | sourceTree = ""; 106 | }; 107 | ACA4BC2C6C97422361925846 /* Frameworks */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 4DBC16291B11FC4E001761DA /* CoreGraphics.framework */, 111 | 4DC8A6AD1B11EA7900F09CCE /* QuartzCore.framework */, 112 | 8D8847D90CA1477795D6C323 /* Pods.framework */, 113 | 93111679954DDFBE11DDB44B /* Pods_PullToMakeSoupDemo.framework */, 114 | ); 115 | name = Frameworks; 116 | sourceTree = ""; 117 | }; 118 | /* End PBXGroup section */ 119 | 120 | /* Begin PBXNativeTarget section */ 121 | 4DDDB1491B0F7E1100DE9D93 /* PullToMakeSoupDemo */ = { 122 | isa = PBXNativeTarget; 123 | buildConfigurationList = 4DDDB1691B0F7E1100DE9D93 /* Build configuration list for PBXNativeTarget "PullToMakeSoupDemo" */; 124 | buildPhases = ( 125 | 54419ACEDE2C607FAAE99645 /* [CP] Check Pods Manifest.lock */, 126 | 4DDDB1461B0F7E1100DE9D93 /* Sources */, 127 | 4DDDB1471B0F7E1100DE9D93 /* Frameworks */, 128 | 4DDDB1481B0F7E1100DE9D93 /* Resources */, 129 | 4DDDB1901B0F7EA500DE9D93 /* Embed Frameworks */, 130 | 4E5E665DF1FBAD34C38FFFC0 /* [CP] Embed Pods Frameworks */, 131 | BEFDBCA240450E0F489E479F /* [CP] Copy Pods Resources */, 132 | ); 133 | buildRules = ( 134 | ); 135 | dependencies = ( 136 | ); 137 | name = PullToMakeSoupDemo; 138 | productName = PullToMakeSoupDemo; 139 | productReference = 4DDDB14A1B0F7E1100DE9D93 /* PullToMakeSoupDemo.app */; 140 | productType = "com.apple.product-type.application"; 141 | }; 142 | /* End PBXNativeTarget section */ 143 | 144 | /* Begin PBXProject section */ 145 | 4DDDB1421B0F7E1100DE9D93 /* Project object */ = { 146 | isa = PBXProject; 147 | attributes = { 148 | LastSwiftMigration = 0700; 149 | LastSwiftUpdateCheck = 0700; 150 | LastUpgradeCheck = 0700; 151 | ORGANIZATIONNAME = Yalantis; 152 | TargetAttributes = { 153 | 4DDDB1491B0F7E1100DE9D93 = { 154 | CreatedOnToolsVersion = 6.3.1; 155 | LastSwiftMigration = 0800; 156 | }; 157 | }; 158 | }; 159 | buildConfigurationList = 4DDDB1451B0F7E1100DE9D93 /* Build configuration list for PBXProject "PullToMakeSoupDemo" */; 160 | compatibilityVersion = "Xcode 3.2"; 161 | developmentRegion = English; 162 | hasScannedForEncodings = 0; 163 | knownRegions = ( 164 | en, 165 | Base, 166 | ); 167 | mainGroup = 4DDDB1411B0F7E1100DE9D93; 168 | productRefGroup = 4DDDB14B1B0F7E1100DE9D93 /* Products */; 169 | projectDirPath = ""; 170 | projectRoot = ""; 171 | targets = ( 172 | 4DDDB1491B0F7E1100DE9D93 /* PullToMakeSoupDemo */, 173 | ); 174 | }; 175 | /* End PBXProject section */ 176 | 177 | /* Begin PBXResourcesBuildPhase section */ 178 | 4DDDB1481B0F7E1100DE9D93 /* Resources */ = { 179 | isa = PBXResourcesBuildPhase; 180 | buildActionMask = 2147483647; 181 | files = ( 182 | 4DDDB1551B0F7E1100DE9D93 /* Main.storyboard in Resources */, 183 | 4DDDB15A1B0F7E1100DE9D93 /* LaunchScreen.xib in Resources */, 184 | 4DDDB1571B0F7E1100DE9D93 /* Images.xcassets in Resources */, 185 | ); 186 | runOnlyForDeploymentPostprocessing = 0; 187 | }; 188 | /* End PBXResourcesBuildPhase section */ 189 | 190 | /* Begin PBXShellScriptBuildPhase section */ 191 | 4E5E665DF1FBAD34C38FFFC0 /* [CP] Embed Pods Frameworks */ = { 192 | isa = PBXShellScriptBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | ); 196 | inputPaths = ( 197 | ); 198 | name = "[CP] Embed Pods Frameworks"; 199 | outputPaths = ( 200 | ); 201 | runOnlyForDeploymentPostprocessing = 0; 202 | shellPath = /bin/sh; 203 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PullToMakeSoupDemo/Pods-PullToMakeSoupDemo-frameworks.sh\"\n"; 204 | showEnvVarsInLog = 0; 205 | }; 206 | 54419ACEDE2C607FAAE99645 /* [CP] Check Pods Manifest.lock */ = { 207 | isa = PBXShellScriptBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | ); 211 | inputPaths = ( 212 | ); 213 | name = "[CP] Check Pods Manifest.lock"; 214 | outputPaths = ( 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | shellPath = /bin/sh; 218 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 219 | showEnvVarsInLog = 0; 220 | }; 221 | BEFDBCA240450E0F489E479F /* [CP] Copy Pods Resources */ = { 222 | isa = PBXShellScriptBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | ); 226 | inputPaths = ( 227 | ); 228 | name = "[CP] Copy Pods Resources"; 229 | outputPaths = ( 230 | ); 231 | runOnlyForDeploymentPostprocessing = 0; 232 | shellPath = /bin/sh; 233 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PullToMakeSoupDemo/Pods-PullToMakeSoupDemo-resources.sh\"\n"; 234 | showEnvVarsInLog = 0; 235 | }; 236 | /* End PBXShellScriptBuildPhase section */ 237 | 238 | /* Begin PBXSourcesBuildPhase section */ 239 | 4DDDB1461B0F7E1100DE9D93 /* Sources */ = { 240 | isa = PBXSourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | 4DDDB1521B0F7E1100DE9D93 /* ViewController.swift in Sources */, 244 | 4DDDB1501B0F7E1100DE9D93 /* AppDelegate.swift in Sources */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | /* End PBXSourcesBuildPhase section */ 249 | 250 | /* Begin PBXVariantGroup section */ 251 | 4DDDB1531B0F7E1100DE9D93 /* Main.storyboard */ = { 252 | isa = PBXVariantGroup; 253 | children = ( 254 | 4DDDB1541B0F7E1100DE9D93 /* Base */, 255 | ); 256 | name = Main.storyboard; 257 | sourceTree = ""; 258 | }; 259 | 4DDDB1581B0F7E1100DE9D93 /* LaunchScreen.xib */ = { 260 | isa = PBXVariantGroup; 261 | children = ( 262 | 4DDDB1591B0F7E1100DE9D93 /* Base */, 263 | ); 264 | name = LaunchScreen.xib; 265 | sourceTree = ""; 266 | }; 267 | /* End PBXVariantGroup section */ 268 | 269 | /* Begin XCBuildConfiguration section */ 270 | 4DDDB1671B0F7E1100DE9D93 /* Debug */ = { 271 | isa = XCBuildConfiguration; 272 | buildSettings = { 273 | ALWAYS_SEARCH_USER_PATHS = NO; 274 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 275 | CLANG_CXX_LIBRARY = "libc++"; 276 | CLANG_ENABLE_MODULES = YES; 277 | CLANG_ENABLE_OBJC_ARC = YES; 278 | CLANG_WARN_BOOL_CONVERSION = YES; 279 | CLANG_WARN_CONSTANT_CONVERSION = YES; 280 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 281 | CLANG_WARN_EMPTY_BODY = YES; 282 | CLANG_WARN_ENUM_CONVERSION = YES; 283 | CLANG_WARN_INT_CONVERSION = YES; 284 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 285 | CLANG_WARN_UNREACHABLE_CODE = YES; 286 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 287 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 288 | COPY_PHASE_STRIP = NO; 289 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 290 | DEFINES_MODULE = NO; 291 | ENABLE_STRICT_OBJC_MSGSEND = YES; 292 | ENABLE_TESTABILITY = YES; 293 | GCC_C_LANGUAGE_STANDARD = gnu99; 294 | GCC_DYNAMIC_NO_PIC = NO; 295 | GCC_NO_COMMON_BLOCKS = YES; 296 | GCC_OPTIMIZATION_LEVEL = 0; 297 | GCC_PREPROCESSOR_DEFINITIONS = ( 298 | "DEBUG=1", 299 | "$(inherited)", 300 | ); 301 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 302 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 303 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 304 | GCC_WARN_UNDECLARED_SELECTOR = YES; 305 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 306 | GCC_WARN_UNUSED_FUNCTION = YES; 307 | GCC_WARN_UNUSED_VARIABLE = YES; 308 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 309 | MTL_ENABLE_DEBUG_INFO = YES; 310 | ONLY_ACTIVE_ARCH = YES; 311 | SDKROOT = iphoneos; 312 | SWIFT_OBJC_BRIDGING_HEADER = ""; 313 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 314 | SWIFT_VERSION = 3.0; 315 | }; 316 | name = Debug; 317 | }; 318 | 4DDDB1681B0F7E1100DE9D93 /* Release */ = { 319 | isa = XCBuildConfiguration; 320 | buildSettings = { 321 | ALWAYS_SEARCH_USER_PATHS = NO; 322 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 323 | CLANG_CXX_LIBRARY = "libc++"; 324 | CLANG_ENABLE_MODULES = YES; 325 | CLANG_ENABLE_OBJC_ARC = YES; 326 | CLANG_WARN_BOOL_CONVERSION = YES; 327 | CLANG_WARN_CONSTANT_CONVERSION = YES; 328 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 329 | CLANG_WARN_EMPTY_BODY = YES; 330 | CLANG_WARN_ENUM_CONVERSION = YES; 331 | CLANG_WARN_INT_CONVERSION = YES; 332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 333 | CLANG_WARN_UNREACHABLE_CODE = YES; 334 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 335 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 336 | COPY_PHASE_STRIP = NO; 337 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 338 | DEFINES_MODULE = NO; 339 | ENABLE_NS_ASSERTIONS = NO; 340 | ENABLE_STRICT_OBJC_MSGSEND = YES; 341 | GCC_C_LANGUAGE_STANDARD = gnu99; 342 | GCC_NO_COMMON_BLOCKS = YES; 343 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 344 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 345 | GCC_WARN_UNDECLARED_SELECTOR = YES; 346 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 347 | GCC_WARN_UNUSED_FUNCTION = YES; 348 | GCC_WARN_UNUSED_VARIABLE = YES; 349 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 350 | MTL_ENABLE_DEBUG_INFO = NO; 351 | ONLY_ACTIVE_ARCH = YES; 352 | SDKROOT = iphoneos; 353 | SWIFT_OBJC_BRIDGING_HEADER = ""; 354 | SWIFT_VERSION = 3.0; 355 | VALIDATE_PRODUCT = YES; 356 | }; 357 | name = Release; 358 | }; 359 | 4DDDB16A1B0F7E1100DE9D93 /* Debug */ = { 360 | isa = XCBuildConfiguration; 361 | baseConfigurationReference = 84A91C0F362EE439781E1516 /* Pods-PullToMakeSoupDemo.debug.xcconfig */; 362 | buildSettings = { 363 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 364 | INFOPLIST_FILE = PullToMakeSoupDemo/Info.plist; 365 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 366 | PRODUCT_BUNDLE_IDENTIFIER = "Yalantis.$(PRODUCT_NAME:rfc1034identifier)"; 367 | PRODUCT_NAME = "$(TARGET_NAME)"; 368 | SWIFT_VERSION = 3.0; 369 | }; 370 | name = Debug; 371 | }; 372 | 4DDDB16B1B0F7E1100DE9D93 /* Release */ = { 373 | isa = XCBuildConfiguration; 374 | baseConfigurationReference = 664278C89F4CA4247D1A775F /* Pods-PullToMakeSoupDemo.release.xcconfig */; 375 | buildSettings = { 376 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 377 | INFOPLIST_FILE = PullToMakeSoupDemo/Info.plist; 378 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 379 | PRODUCT_BUNDLE_IDENTIFIER = "Yalantis.$(PRODUCT_NAME:rfc1034identifier)"; 380 | PRODUCT_NAME = "$(TARGET_NAME)"; 381 | SWIFT_VERSION = 3.0; 382 | }; 383 | name = Release; 384 | }; 385 | /* End XCBuildConfiguration section */ 386 | 387 | /* Begin XCConfigurationList section */ 388 | 4DDDB1451B0F7E1100DE9D93 /* Build configuration list for PBXProject "PullToMakeSoupDemo" */ = { 389 | isa = XCConfigurationList; 390 | buildConfigurations = ( 391 | 4DDDB1671B0F7E1100DE9D93 /* Debug */, 392 | 4DDDB1681B0F7E1100DE9D93 /* Release */, 393 | ); 394 | defaultConfigurationIsVisible = 0; 395 | defaultConfigurationName = Release; 396 | }; 397 | 4DDDB1691B0F7E1100DE9D93 /* Build configuration list for PBXNativeTarget "PullToMakeSoupDemo" */ = { 398 | isa = XCConfigurationList; 399 | buildConfigurations = ( 400 | 4DDDB16A1B0F7E1100DE9D93 /* Debug */, 401 | 4DDDB16B1B0F7E1100DE9D93 /* Release */, 402 | ); 403 | defaultConfigurationIsVisible = 0; 404 | defaultConfigurationName = Release; 405 | }; 406 | /* End XCConfigurationList section */ 407 | }; 408 | rootObject = 4DDDB1421B0F7E1100DE9D93 /* Project object */; 409 | } 410 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo.xcodeproj/project.xcworkspace/xcshareddata/PullToMakeSoupDemo.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 6B2C4DF5-33CE-4F20-9FA7-F16024FB05CC 9 | IDESourceControlProjectName 10 | PullToMakeSoupDemo 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | C4FC8003944830BE28AB71C18F41E3E55C377D87 14 | https://github.com/Yalantis/PullToMakeSoup.git 15 | 16 | IDESourceControlProjectPath 17 | PullToMakeSoupDemo.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | C4FC8003944830BE28AB71C18F41E3E55C377D87 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/Yalantis/PullToMakeSoup.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | C4FC8003944830BE28AB71C18F41E3E55C377D87 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | C4FC8003944830BE28AB71C18F41E3E55C377D87 36 | IDESourceControlWCCName 37 | PullToMakeSoup 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // PullToMakeSoupDemo 4 | // 5 | // Created by Anastasiya Gorban on 5/22/15. 6 | // Copyright (c) 2015 Yalantis. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | } 16 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Images.xcassets/gamburger.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "gamburger@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Images.xcassets/gamburger.imageset/gamburger@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoupDemo/Images.xcassets/gamburger.imageset/gamburger@2x.png -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Images.xcassets/pizza.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "pizza@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Images.xcassets/pizza.imageset/pizza@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoupDemo/Images.xcassets/pizza.imageset/pizza@2x.png -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Resouces/badge_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoupDemo/Resouces/badge_dark.png -------------------------------------------------------------------------------- /PullToMakeSoupDemo/Resouces/recipe-finder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/e9bc103db62fd58952c2cee9695b9cfb165d8676/PullToMakeSoupDemo/Resouces/recipe-finder.gif -------------------------------------------------------------------------------- /PullToMakeSoupDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // PullToMakeSoupDemo 4 | // 5 | // Created by Anastasiya Gorban on 5/22/15. 6 | // Copyright (c) 2015 Yalantis. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import PullToMakeSoup 11 | 12 | class ViewController: UITableViewController { 13 | 14 | override func viewDidAppear(_ animated: Bool) { 15 | super.viewDidAppear(animated) 16 | 17 | tableView.addPullToRefresh(PullToMakeSoup(at: .top)) { 18 | DispatchQueue.main.asyncAfter(deadline: .now() + 5) { 19 | self.tableView.endRefreshing(at: .top) 20 | } 21 | } 22 | } 23 | 24 | @IBAction fileprivate func refresh() { 25 | tableView.startRefreshing(at: .top) 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## PullToMakeSoup [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 3 | 4 | Custom animated pull-to-refresh that can be easily added to UIScrollView 5 | 6 | [![Yalantis](https://raw.githubusercontent.com/Yalantis/PullToMakeSoup/master/PullToMakeSoupDemo/Resouces/badge_dark.png)](https://yalantis.com/?utm_source=github) 7 | 8 | Check this [article on our blog](https://yalantis.com/blog/how-we-built-customizable-pull-to-refresh-pull-to-cook-soup-animation/?utm_source=github) to know more details about animations implementation 9 | 10 | Inspired by [this project on dribble](https://dribbble.com/shots/2074667-Recipe-Finder-v-2) 11 | 12 | 13 | 14 | ## Requirements 15 | - iOS 8.0+ 16 | - Xcode 8 17 | - Swift 3 18 | - Portrait orientation 19 | 20 | #### [Carthage](https://github.com/Carthage/Carthage) 21 | ``` 22 | github "Yalantis/PullToMakeSoup" ~> 2.0 23 | ``` 24 | 25 | ## Installing with [CocoaPods](https://cocoapods.org) 26 | 27 | ```ruby 28 | use_frameworks! 29 | pod 'PullToMakeSoup', '~> 2.0' 30 | ``` 31 | 32 | ## Usage 33 | 34 | At first, import PullToMakeSoup framework: 35 | 36 | ```swift 37 | import PullToMakeSoup 38 | ``` 39 | 40 | Create refresher: 41 | 42 | 43 | ```swift 44 | let refresher = PullToMakeSoup() 45 | ``` 46 | 47 | Add refresher to your UIScrollView subclass in 'viewDidAppear' method and provide action block: 48 | 49 | ```swift 50 | 51 | override func viewDidAppear(animated: Bool) { 52 | super.viewDidAppear(animated) 53 | tableView.addPullToRefresh(refresher) { 54 |      // action to be performed (pull data from some source) 55 | } 56 | } 57 | 58 | ``` 59 | 60 | After the action is completed and you want to hide the refresher: 61 | 62 | ```swift 63 | tableView.endRefreshing() 64 | ``` 65 | 66 | You can also start refreshing programmatically: 67 | 68 | ```swift 69 | tableView.startRefreshing() 70 | ``` 71 | 72 | Component was implemented based on [customizable pull-to-refresh](https://github.com/Yalantis/PullToRefresh) 73 | 74 | ## Let us know! 75 | 76 | We’d be really happy if you sent us links to your projects where you use our component. Just send an email to github@yalantis.com And do let us know if you have any questions or suggestion regarding the animation. 77 | 78 | P.S. We’re going to publish more awesomeness wrapped in code and a tutorial on how to make UI for iOS (Android) better than better. Stay tuned! 79 | 80 | 81 | ## License 82 | 83 | The MIT License (MIT) 84 | 85 | Copyright © 2017 Yalantis 86 | 87 | Permission is hereby granted, free of charge, to any person obtaining a copy 88 | of this software and associated documentation files (the "Software"), to deal 89 | in the Software without restriction, including without limitation the rights 90 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 91 | copies of the Software, and to permit persons to whom the Software is 92 | furnished to do so, subject to the following conditions: 93 | 94 | The above copyright notice and this permission notice shall be included in 95 | all copies or substantial portions of the Software. 96 | 97 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 98 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 99 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 100 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 101 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 102 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 103 | THE SOFTWARE. 104 | --------------------------------------------------------------------------------