Skip to content

Commit

Permalink
Merge pull request #9 from artrmz/feature/snowflakes
Browse files Browse the repository at this point in the history
[FEATURE] Snowflakes animation
  • Loading branch information
artur-ios-dev authored Apr 24, 2018
2 parents 8754a14 + 49e14d9 commit e06ef2c
Show file tree
Hide file tree
Showing 18 changed files with 247 additions and 57 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ playground.xcworkspace
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
Pods/

# Carthage
#
Expand Down
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
language: swift
osx_image: xcode9.3
script: xcodebuild clean build -project Demo/Demo.xcodeproj -sdk iphonesimulator -scheme Demo
before_install:
- gem install cocoapods
- pod install
script: xcodebuild clean build -workspace Demo/Demo.xcworkspace -sdk iphonesimulator -scheme Demo
110 changes: 59 additions & 51 deletions Demo/Demo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,7 @@
0BBBF5F52088A4DB001F0C00 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0BBBF5F32088A4DB001F0C00 /* Main.storyboard */; };
0BBBF5F72088A4DC001F0C00 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BBBF5F62088A4DC001F0C00 /* Assets.xcassets */; };
0BBBF5FA2088A4DC001F0C00 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0BBBF5F82088A4DC001F0C00 /* LaunchScreen.storyboard */; };
0BDA574F2089DFF40037BD2C /* GlassBreakAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDA57492089DFF40037BD2C /* GlassBreakAnimation.swift */; };
0BDA57502089DFF40037BD2C /* GlassPiece.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDA574B2089DFF40037BD2C /* GlassPiece.swift */; };
0BDA57512089DFF40037BD2C /* GridSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDA574C2089DFF40037BD2C /* GridSize.swift */; };
0BDA57522089DFF40037BD2C /* UIViewExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDA574D2089DFF40037BD2C /* UIViewExtensions.swift */; };
0BDA57532089DFF40037BD2C /* ClosedRangeExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDA574E2089DFF40037BD2C /* ClosedRangeExtension.swift */; };
14A6616B208BE2BB0081091A /* ExplosionAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A6616A208BE2BB0081091A /* ExplosionAnimation.swift */; };
14A6616D208BE3160081091A /* ExplosionPiece.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14A6616C208BE3160081091A /* ExplosionPiece.swift */; };
CB0C9AC217021EE753317DAA /* Pods_Demo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5CDB0AFC4DA0FC14477F12D /* Pods_Demo.framework */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
Expand All @@ -29,20 +23,17 @@
0BBBF5F62088A4DC001F0C00 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
0BBBF5F92088A4DC001F0C00 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
0BBBF5FB2088A4DC001F0C00 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
0BDA57492089DFF40037BD2C /* GlassBreakAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlassBreakAnimation.swift; sourceTree = "<group>"; };
0BDA574B2089DFF40037BD2C /* GlassPiece.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GlassPiece.swift; sourceTree = "<group>"; };
0BDA574C2089DFF40037BD2C /* GridSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridSize.swift; sourceTree = "<group>"; };
0BDA574D2089DFF40037BD2C /* UIViewExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewExtensions.swift; sourceTree = "<group>"; };
0BDA574E2089DFF40037BD2C /* ClosedRangeExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ClosedRangeExtension.swift; sourceTree = "<group>"; };
14A6616A208BE2BB0081091A /* ExplosionAnimation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExplosionAnimation.swift; sourceTree = "<group>"; };
14A6616C208BE3160081091A /* ExplosionPiece.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExplosionPiece.swift; sourceTree = "<group>"; };
501CA1BA74B650FC230ECBAA /* Pods-Demo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-Demo/Pods-Demo.debug.xcconfig"; sourceTree = "<group>"; };
759A5F52598B5105D57B2ADA /* Pods-Demo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Demo.release.xcconfig"; path = "../Pods/Target Support Files/Pods-Demo/Pods-Demo.release.xcconfig"; sourceTree = "<group>"; };
A5CDB0AFC4DA0FC14477F12D /* Pods_Demo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Demo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
0BBBF5E92088A4DA001F0C00 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CB0C9AC217021EE753317DAA /* Pods_Demo.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -52,9 +43,10 @@
0BBBF5E32088A4DA001F0C00 = {
isa = PBXGroup;
children = (
0BDA57482089DFF40037BD2C /* Source */,
0BBBF5EE2088A4DA001F0C00 /* Demo */,
0BBBF5ED2088A4DA001F0C00 /* Products */,
6ADDBEB1CA1013AAF4F6DE72 /* Pods */,
F7D9ABAED30CD8E0E240D5BF /* Frameworks */,
);
sourceTree = "<group>";
};
Expand All @@ -79,35 +71,21 @@
path = Demo;
sourceTree = "<group>";
};
0BDA57482089DFF40037BD2C /* Source */ = {
6ADDBEB1CA1013AAF4F6DE72 /* Pods */ = {
isa = PBXGroup;
children = (
14A66169208BE2AA0081091A /* Explosion */,
0BDA574A2089DFF40037BD2C /* GlassBreak */,
0BDA574C2089DFF40037BD2C /* GridSize.swift */,
0BDA574D2089DFF40037BD2C /* UIViewExtensions.swift */,
0BDA574E2089DFF40037BD2C /* ClosedRangeExtension.swift */,
501CA1BA74B650FC230ECBAA /* Pods-Demo.debug.xcconfig */,
759A5F52598B5105D57B2ADA /* Pods-Demo.release.xcconfig */,
);
name = Source;
path = ../Source;
name = Pods;
sourceTree = "<group>";
};
0BDA574A2089DFF40037BD2C /* GlassBreak */ = {
F7D9ABAED30CD8E0E240D5BF /* Frameworks */ = {
isa = PBXGroup;
children = (
0BDA57492089DFF40037BD2C /* GlassBreakAnimation.swift */,
0BDA574B2089DFF40037BD2C /* GlassPiece.swift */,
A5CDB0AFC4DA0FC14477F12D /* Pods_Demo.framework */,
);
path = GlassBreak;
sourceTree = "<group>";
};
14A66169208BE2AA0081091A /* Explosion */ = {
isa = PBXGroup;
children = (
14A6616A208BE2BB0081091A /* ExplosionAnimation.swift */,
14A6616C208BE3160081091A /* ExplosionPiece.swift */,
);
path = Explosion;
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
Expand All @@ -117,9 +95,11 @@
isa = PBXNativeTarget;
buildConfigurationList = 0BBBF5FE2088A4DC001F0C00 /* Build configuration list for PBXNativeTarget "Demo" */;
buildPhases = (
D2D08CE03BA69228149C5EC5 /* [CP] Check Pods Manifest.lock */,
0BBBF5E82088A4DA001F0C00 /* Sources */,
0BBBF5E92088A4DA001F0C00 /* Frameworks */,
0BBBF5EA2088A4DA001F0C00 /* Resources */,
5DF7A84C97E93F92BAF4C651 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
Expand Down Expand Up @@ -176,20 +156,52 @@
};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
5DF7A84C97E93F92BAF4C651 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${SRCROOT}/../Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/VariousViewsEffects/VariousViewsEffects.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/VariousViewsEffects.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/../Pods/Target Support Files/Pods-Demo/Pods-Demo-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
D2D08CE03BA69228149C5EC5 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Demo-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
0BBBF5E82088A4DA001F0C00 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0BDA57532089DFF40037BD2C /* ClosedRangeExtension.swift in Sources */,
0BDA57512089DFF40037BD2C /* GridSize.swift in Sources */,
14A6616D208BE3160081091A /* ExplosionPiece.swift in Sources */,
0BDA57502089DFF40037BD2C /* GlassPiece.swift in Sources */,
0BBBF5F22088A4DB001F0C00 /* ViewController.swift in Sources */,
14A6616B208BE2BB0081091A /* ExplosionAnimation.swift in Sources */,
0BBBF5F02088A4DB001F0C00 /* AppDelegate.swift in Sources */,
0BDA57522089DFF40037BD2C /* UIViewExtensions.swift in Sources */,
0BDA574F2089DFF40037BD2C /* GlassBreakAnimation.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -333,14 +345,12 @@
};
0BBBF5FF2088A4DC001F0C00 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 501CA1BA74B650FC230ECBAA /* Pods-Demo.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = Demo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.artrmz.vieweffects.demo;
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";
Expand All @@ -349,14 +359,12 @@
};
0BBBF6002088A4DC001F0C00 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 759A5F52598B5105D57B2ADA /* Pods-Demo.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
INFOPLIST_FILE = Demo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.artrmz.vieweffects.demo;
PRODUCT_NAME = "$(TARGET_NAME)";
TARGETED_DEVICE_FAMILY = "1,2";
Expand Down
10 changes: 10 additions & 0 deletions Demo/Demo.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Demo/Demo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
20 changes: 16 additions & 4 deletions Demo/Demo/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
Expand All @@ -19,36 +20,47 @@
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" verticalCompressionResistancePriority="749" image="Sample" translatesAutoresizingMaskIntoConstraints="NO" id="W93-LT-woS">
<rect key="frame" x="8" y="50" width="359" height="600"/>
<rect key="frame" x="8" y="200.5" width="359" height="266"/>
<constraints>
<constraint firstAttribute="width" secondItem="W93-LT-woS" secondAttribute="height" multiplier="800:600" constant="4" id="WYa-2U-0nQ"/>
</constraints>
</imageView>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" alignment="center" translatesAutoresizingMaskIntoConstraints="NO" id="bbL-RR-J8Z">
<rect key="frame" x="0.0" y="20" width="375" height="30"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Vfm-57-d8e">
<rect key="frame" x="0.0" y="0.0" width="187.5" height="30"/>
<rect key="frame" x="0.0" y="0.0" width="125" height="30"/>
<state key="normal" title="Break Glass"/>
<connections>
<action selector="breakGlass:" destination="BYZ-38-t0r" eventType="touchUpInside" id="BEI-GO-x1B"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1nr-Li-yaj">
<rect key="frame" x="187.5" y="0.0" width="187.5" height="30"/>
<rect key="frame" x="125" y="0.0" width="125" height="30"/>
<state key="normal" title="Explode"/>
<connections>
<action selector="explode:" destination="BYZ-38-t0r" eventType="touchUpInside" id="eYC-72-ZoQ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lol-E1-qvP">
<rect key="frame" x="250" y="0.0" width="125" height="30"/>
<state key="normal" title="Snowflakes"/>
<connections>
<action selector="showSnowflakes:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7sl-xs-JAu"/>
</connections>
</button>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="bbL-RR-J8Z" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" id="FaH-xc-yAe"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="W93-LT-woS" secondAttribute="trailing" constant="8" id="MOH-NV-eXq"/>
<constraint firstItem="W93-LT-woS" firstAttribute="top" secondItem="bbL-RR-J8Z" secondAttribute="bottom" id="RwN-qd-F2P"/>
<constraint firstItem="W93-LT-woS" firstAttribute="top" relation="greaterThanOrEqual" secondItem="bbL-RR-J8Z" secondAttribute="bottom" id="RwN-qd-F2P"/>
<constraint firstItem="bbL-RR-J8Z" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="m0D-eT-8PK"/>
<constraint firstItem="W93-LT-woS" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="8" id="miy-Eu-FdJ"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="bbL-RR-J8Z" secondAttribute="trailing" id="p01-pc-3Ix"/>
<constraint firstItem="W93-LT-woS" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" id="pmC-9f-JBE"/>
<constraint firstItem="6Tk-OE-BBY" firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="W93-LT-woS" secondAttribute="bottom" constant="8" id="ubu-t4-gpU"/>
</constraints>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
Expand Down
5 changes: 5 additions & 0 deletions Demo/Demo/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

import UIKit
import VariousViewsEffects

class ViewController: UIViewController {
@IBOutlet weak var exampleView: UIView?
Expand All @@ -23,6 +24,10 @@ class ViewController: UIViewController {
})
}

@IBAction func showSnowflakes(_ sender: Any) {
exampleView?.addSnowflakes(amount: 10, speed: .slow)
}

private func reshowImage() {
self.exampleView?.alpha = 0
self.exampleView?.isHidden = false
Expand Down
10 changes: 10 additions & 0 deletions Podfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
platform :ios, '9.0'
workspace 'Demo/Demo.xcworkspace'
project 'Demo/Demo.xcodeproj'

inhibit_all_warnings!
use_frameworks!

target 'Demo' do
pod 'VariousViewsEffects', :path => '.'
end
16 changes: 16 additions & 0 deletions Podfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
PODS:
- VariousViewsEffects (1.1.0)

DEPENDENCIES:
- VariousViewsEffects (from `.`)

EXTERNAL SOURCES:
VariousViewsEffects:
:path: "."

SPEC CHECKSUMS:
VariousViewsEffects: a8d06b29feae2aa6c08e464bbf94980a5d7c9c5f

PODFILE CHECKSUM: cc09ef09ebb358acf12099035f28ac6ef33f5dc0

COCOAPODS: 1.5.0
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ Currently supported animations:

![Example](Resources/explode.gif?raw=true "explode")

- **Snowflakes**

![Example](Resources/snowflakes.gif?raw=true "snowflakes")

## Requirements
- iOS 9.0+
Expand Down
Binary file added Resources/snowflakes.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions Source/ImageHelper.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
//
// ImageHelper.swift
// Pods-Demo
//
// Created by Artur Rymarz on 24.04.2018.
//

import UIKit

internal class ImagesHelper {
static func imageFor(name imageName: String) -> UIImage? {
let bundle = Bundle(for: ImagesHelper.self)

guard let bundleURL = bundle.url(forResource: "VariousViewsEffects", withExtension: "bundle") else {
return nil
}
let imageBundel = Bundle(url: bundleURL)

return UIImage(named: imageName, in: imageBundel, compatibleWith: nil)!
}
}
13 changes: 13 additions & 0 deletions Source/Snowflakes/SnowflakeSpeed.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// SnowflakeSpeed.swift
// Demo
//
// Created by Artur Rymarz on 24.04.2018.
// Copyright © 2018 Artrmz. All rights reserved.
//

import Foundation

public enum SnowflakeSpeed {
case slow, medium
}
Loading

0 comments on commit e06ef2c

Please sign in to comment.