diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8858389
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+*.mode1
+*.mode1v3
+*.mode2v3
+*.perspective
+*.perspectivev3
+*.pbxuser
+*.xccheckout
+xcuserdata
+build/
+*.o
+*.LinkFileList
+*.hmap
+*~.nib/
+*.swp
+*~
+*.dat
+*.dep
diff --git a/README.md b/README.md
index 4c846ea..4758cc0 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
-Adds performant animated GIF support to UIKit, without subclassing `UIImageView`. Check out the __[demo](#demo-app)__. If you're looking for the Japanese prefecture, click [here](https://goo.gl/maps/CCeAc).
+Adds performant animated GIF support to UIKit, without subclassing `UIImageView`. If you're looking for the Japanese prefecture, click [here](https://goo.gl/maps/CCeAc).
#### Why?
@@ -17,7 +17,7 @@ The figure below summarizes how this works in practice. Given an image
containing 10 frames, Gifu will load the current frame (red), pre-load the next two frames in this example (orange),
and nullify all the other frames to free up memory (gray):
-
+
#### Usage
@@ -42,9 +42,7 @@ The `isAnimating()` method returns the current animation state of the view.
#### Demo App
-For an example, check out the demo app [here](https://github.com/kaishin/gifu/tree/demo) (requires Xcode 6).
-
-
+
#### Compatibility
diff --git a/demo/Images.xcassets/AppIcon.appiconset/Contents.json b/demo/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..171085b
--- /dev/null
+++ b/demo/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,26 @@
+{
+ "images" : [
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "New icon-Small@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "New icon-Small-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "New icon-60@2x.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/demo/Images.xcassets/AppIcon.appiconset/New icon-60@2x.png b/demo/Images.xcassets/AppIcon.appiconset/New icon-60@2x.png
new file mode 100644
index 0000000..e63b93d
Binary files /dev/null and b/demo/Images.xcassets/AppIcon.appiconset/New icon-60@2x.png differ
diff --git a/demo/Images.xcassets/AppIcon.appiconset/New icon-Small-40@2x.png b/demo/Images.xcassets/AppIcon.appiconset/New icon-Small-40@2x.png
new file mode 100644
index 0000000..b589c73
Binary files /dev/null and b/demo/Images.xcassets/AppIcon.appiconset/New icon-Small-40@2x.png differ
diff --git a/demo/Images.xcassets/AppIcon.appiconset/New icon-Small@2x.png b/demo/Images.xcassets/AppIcon.appiconset/New icon-Small@2x.png
new file mode 100644
index 0000000..e96abd5
Binary files /dev/null and b/demo/Images.xcassets/AppIcon.appiconset/New icon-Small@2x.png differ
diff --git a/demo/Images.xcassets/LaunchImage.launchimage/Contents.json b/demo/Images.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..c79ebd3
--- /dev/null
+++ b/demo/Images.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "subtype" : "retina4",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/demo/Info.plist b/demo/Info.plist
new file mode 100644
index 0000000..8506ad1
--- /dev/null
+++ b/demo/Info.plist
@@ -0,0 +1,40 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ co.kaishin.$(PRODUCT_NAME:rfc1034identifier)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ UIViewControllerBasedStatusBarAppearance
+
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UIMainStoryboardFile
+ Main
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/demo/Main.storyboard b/demo/Main.storyboard
new file mode 100644
index 0000000..93307c3
--- /dev/null
+++ b/demo/Main.storyboard
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/classes/AppDelegate.swift b/demo/classes/AppDelegate.swift
new file mode 100644
index 0000000..f9d74e6
--- /dev/null
+++ b/demo/classes/AppDelegate.swift
@@ -0,0 +1,12 @@
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+ return true
+ }
+}
+
diff --git a/demo/classes/FlatButton.swift b/demo/classes/FlatButton.swift
new file mode 100644
index 0000000..f9af111
--- /dev/null
+++ b/demo/classes/FlatButton.swift
@@ -0,0 +1,48 @@
+import UIKit
+
+class FlatButton: UIButton {
+
+ let horizontalPadding: CGFloat = 14.0
+
+ var buttonColor: UIColor?
+
+ override init(frame: CGRect) {
+ super.init(frame: frame)
+ customizeAppearance()
+ }
+
+ required init(coder aDecoder: NSCoder) {
+ super.init(coder: aDecoder)
+ customizeAppearance()
+ }
+
+ override func drawRect(rect: CGRect) {
+ layer.borderColor = tintColor.CGColor
+ setTitleColor(tintColor, forState: UIControlState.Normal)
+ setTitleColor(UIColor.whiteColor(), forState: UIControlState.Selected)
+ }
+
+ func customizeAppearance() {
+ let containsEdgeInsets = !UIEdgeInsetsEqualToEdgeInsets(contentEdgeInsets, UIEdgeInsetsZero)
+ contentEdgeInsets = containsEdgeInsets ? contentEdgeInsets : UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
+ layer.borderWidth = 2.0
+ layer.borderColor = tintColor.CGColor
+ layer.cornerRadius = frame.size.height / 2.0
+ layer.masksToBounds = true
+ }
+
+ override var tintColor: UIColor! {
+ get {
+ if let color = buttonColor {
+ return color
+ } else {
+ return super.tintColor
+ }
+ }
+
+ set {
+ super.tintColor = newValue
+ buttonColor = newValue
+ }
+ }
+}
\ No newline at end of file
diff --git a/demo/classes/ViewController.swift b/demo/classes/ViewController.swift
new file mode 100644
index 0000000..cd13883
--- /dev/null
+++ b/demo/classes/ViewController.swift
@@ -0,0 +1,27 @@
+import UIKit
+
+class ViewController: UIViewController {
+
+ @IBOutlet weak var imageView: UIImageView!
+ @IBOutlet weak var button: FlatButton!
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ imageView.setAnimatableImage(named: "mugen.gif")
+ imageView.startAnimating()
+ UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: false)
+ }
+
+ @IBAction func toggleAnimation(button: UIButton) {
+ if imageView.isAnimating {
+ imageView.stopAnimating()
+ button.layer.backgroundColor = UIColor.whiteColor().CGColor
+ button.setTitleColor(UIColor.blackColor(), forState: .Normal)
+ } else {
+ imageView.startAnimating()
+ button.layer.backgroundColor = UIColor.clearColor().CGColor
+ button.setTitleColor(UIColor.whiteColor(), forState: .Normal)
+ }
+ }
+}
+
diff --git a/demo/mugen.gif b/demo/mugen.gif
new file mode 100644
index 0000000..da7622f
Binary files /dev/null and b/demo/mugen.gif differ
diff --git a/figure.gif b/figure.gif
deleted file mode 100644
index 28cbf19..0000000
Binary files a/figure.gif and /dev/null differ
diff --git a/gifu-demo.xcodeproj/project.pbxproj b/gifu-demo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..1afb566
--- /dev/null
+++ b/gifu-demo.xcodeproj/project.pbxproj
@@ -0,0 +1,304 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 9D25870819BCCB0F00A55A18 /* mugen.gif in Resources */ = {isa = PBXBuildFile; fileRef = 9D25870619BCCB0F00A55A18 /* mugen.gif */; };
+ 9D25870C19BD16FC00A55A18 /* Gifu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D25870919BD16FC00A55A18 /* Gifu.swift */; };
+ 9D25870D19BD16FC00A55A18 /* ImageSourceHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D25870A19BD16FC00A55A18 /* ImageSourceHelpers.swift */; };
+ 9D25870E19BD16FC00A55A18 /* UIImageView+Gifu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D25870B19BD16FC00A55A18 /* UIImageView+Gifu.swift */; };
+ 9D98823D19BC69CA00B790C6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D98823C19BC69CA00B790C6 /* AppDelegate.swift */; };
+ 9D98823F19BC69CA00B790C6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D98823E19BC69CA00B790C6 /* ViewController.swift */; };
+ 9D98824419BC69CA00B790C6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9D98824319BC69CA00B790C6 /* Images.xcassets */; };
+ 9D98825A19BC69F600B790C6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9D98825919BC69F600B790C6 /* Main.storyboard */; };
+ 9D98826719BC874C00B790C6 /* FlatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D98826619BC874C00B790C6 /* FlatButton.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 9D25870519BCCB0F00A55A18 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 9D25870619BCCB0F00A55A18 /* mugen.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = mugen.gif; sourceTree = ""; };
+ 9D25870919BD16FC00A55A18 /* Gifu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Gifu.swift; sourceTree = ""; };
+ 9D25870A19BD16FC00A55A18 /* ImageSourceHelpers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageSourceHelpers.swift; sourceTree = ""; };
+ 9D25870B19BD16FC00A55A18 /* UIImageView+Gifu.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImageView+Gifu.swift"; sourceTree = ""; };
+ 9D98823719BC69CA00B790C6 /* gifu-demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "gifu-demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9D98823C19BC69CA00B790C6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = classes/AppDelegate.swift; sourceTree = ""; };
+ 9D98823E19BC69CA00B790C6 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = classes/ViewController.swift; sourceTree = ""; };
+ 9D98824319BC69CA00B790C6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
+ 9D98825919BC69F600B790C6 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; };
+ 9D98826619BC874C00B790C6 /* FlatButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FlatButton.swift; path = classes/FlatButton.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 9D98823419BC69CA00B790C6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9D98822E19BC69CA00B790C6 = {
+ isa = PBXGroup;
+ children = (
+ 9D98823919BC69CA00B790C6 /* gifu-demo */,
+ 9D98823819BC69CA00B790C6 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 9D98823819BC69CA00B790C6 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 9D98823719BC69CA00B790C6 /* gifu-demo.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 9D98823919BC69CA00B790C6 /* gifu-demo */ = {
+ isa = PBXGroup;
+ children = (
+ 9D98826119BC6A9700B790C6 /* Gifu */,
+ 9D98823C19BC69CA00B790C6 /* AppDelegate.swift */,
+ 9D98823E19BC69CA00B790C6 /* ViewController.swift */,
+ 9D98826619BC874C00B790C6 /* FlatButton.swift */,
+ 9D98825919BC69F600B790C6 /* Main.storyboard */,
+ 9D98824319BC69CA00B790C6 /* Images.xcassets */,
+ 9D98823A19BC69CA00B790C6 /* Supporting Files */,
+ );
+ name = "gifu-demo";
+ path = demo;
+ sourceTree = "";
+ };
+ 9D98823A19BC69CA00B790C6 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 9D25870519BCCB0F00A55A18 /* Info.plist */,
+ 9D25870619BCCB0F00A55A18 /* mugen.gif */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ 9D98826119BC6A9700B790C6 /* Gifu */ = {
+ isa = PBXGroup;
+ children = (
+ 9D25870919BD16FC00A55A18 /* Gifu.swift */,
+ 9D25870A19BD16FC00A55A18 /* ImageSourceHelpers.swift */,
+ 9D25870B19BD16FC00A55A18 /* UIImageView+Gifu.swift */,
+ );
+ name = Gifu;
+ path = ../source;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 9D98823619BC69CA00B790C6 /* gifu-demo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 9D98825319BC69CA00B790C6 /* Build configuration list for PBXNativeTarget "gifu-demo" */;
+ buildPhases = (
+ 9D98823319BC69CA00B790C6 /* Sources */,
+ 9D98823419BC69CA00B790C6 /* Frameworks */,
+ 9D98823519BC69CA00B790C6 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "gifu-demo";
+ productName = "gifu-demo";
+ productReference = 9D98823719BC69CA00B790C6 /* gifu-demo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 9D98822F19BC69CA00B790C6 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0600;
+ ORGANIZATIONNAME = "Kaishin & Co";
+ TargetAttributes = {
+ 9D98823619BC69CA00B790C6 = {
+ CreatedOnToolsVersion = 6.0;
+ };
+ };
+ };
+ buildConfigurationList = 9D98823219BC69CA00B790C6 /* Build configuration list for PBXProject "gifu-demo" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 9D98822E19BC69CA00B790C6;
+ productRefGroup = 9D98823819BC69CA00B790C6 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 9D98823619BC69CA00B790C6 /* gifu-demo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 9D98823519BC69CA00B790C6 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9D98824419BC69CA00B790C6 /* Images.xcassets in Resources */,
+ 9D25870819BCCB0F00A55A18 /* mugen.gif in Resources */,
+ 9D98825A19BC69F600B790C6 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 9D98823319BC69CA00B790C6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9D25870C19BD16FC00A55A18 /* Gifu.swift in Sources */,
+ 9D25870D19BD16FC00A55A18 /* ImageSourceHelpers.swift in Sources */,
+ 9D98823F19BC69CA00B790C6 /* ViewController.swift in Sources */,
+ 9D25870E19BD16FC00A55A18 /* UIImageView+Gifu.swift in Sources */,
+ 9D98823D19BC69CA00B790C6 /* AppDelegate.swift in Sources */,
+ 9D98826719BC874C00B790C6 /* FlatButton.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 9D98825119BC69CA00B790C6 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 9D98825219BC69CA00B790C6 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 9D98825419BC69CA00B790C6 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ INFOPLIST_FILE = demo/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.1;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 9D98825519BC69CA00B790C6 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ INFOPLIST_FILE = demo/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 7.1;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 9D98823219BC69CA00B790C6 /* Build configuration list for PBXProject "gifu-demo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9D98825119BC69CA00B790C6 /* Debug */,
+ 9D98825219BC69CA00B790C6 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 9D98825319BC69CA00B790C6 /* Build configuration list for PBXNativeTarget "gifu-demo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9D98825419BC69CA00B790C6 /* Debug */,
+ 9D98825519BC69CA00B790C6 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 9D98822F19BC69CA00B790C6 /* Project object */;
+}
diff --git a/gifu-demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/gifu-demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..8e593f5
--- /dev/null
+++ b/gifu-demo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/gifu-demo.xcodeproj/project.xcworkspace/xcshareddata/gifu-demo.xccheckout b/gifu-demo.xcodeproj/project.xcworkspace/xcshareddata/gifu-demo.xccheckout
new file mode 100644
index 0000000..d5bcfd3
--- /dev/null
+++ b/gifu-demo.xcodeproj/project.xcworkspace/xcshareddata/gifu-demo.xccheckout
@@ -0,0 +1,53 @@
+
+
+
+
+ IDESourceControlProjectFavoriteDictionaryKey
+
+ IDESourceControlProjectIdentifier
+ 6D75083F-F54B-476A-805A-7C4AECACA1D4
+ IDESourceControlProjectName
+ gifu-demo
+ IDESourceControlProjectOriginsDictionary
+
+ 4F201322DFCBE25D8D43B7E20BE17D99A7146515
+ /Users/reda/Developer/iOS/gifu
+ EA0259997B7ABC22E2A236D9C38DE21665A9128B
+ github.com:kaishin/gifu-demo.git
+
+ IDESourceControlProjectPath
+ gifu-demo.xcodeproj
+ IDESourceControlProjectRelativeInstallPathDictionary
+
+ 4F201322DFCBE25D8D43B7E20BE17D99A7146515
+ ../../../gifu
+ EA0259997B7ABC22E2A236D9C38DE21665A9128B
+ ../..
+
+ IDESourceControlProjectURL
+ github.com:kaishin/gifu-demo.git
+ IDESourceControlProjectVersion
+ 111
+ IDESourceControlProjectWCCIdentifier
+ EA0259997B7ABC22E2A236D9C38DE21665A9128B
+ IDESourceControlProjectWCConfigurations
+
+
+ IDESourceControlRepositoryExtensionIdentifierKey
+ public.vcs.git
+ IDESourceControlWCCIdentifierKey
+ 4F201322DFCBE25D8D43B7E20BE17D99A7146515
+ IDESourceControlWCCName
+ gifu
+
+
+ IDESourceControlRepositoryExtensionIdentifierKey
+ public.vcs.git
+ IDESourceControlWCCIdentifierKey
+ EA0259997B7ABC22E2A236D9C38DE21665A9128B
+ IDESourceControlWCCName
+ gifu-demo
+
+
+
+
diff --git a/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/gifu-demo.xcscheme b/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/gifu-demo.xcscheme
new file mode 100644
index 0000000..668b760
--- /dev/null
+++ b/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/gifu-demo.xcscheme
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/xcschememanagement.plist b/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..fc5689b
--- /dev/null
+++ b/gifu-demo.xcodeproj/xcuserdata/reda.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,27 @@
+
+
+
+
+ SchemeUserState
+
+ gifu-demo.xcscheme
+
+ orderHint
+ 0
+
+
+ SuppressBuildableAutocreation
+
+ 9D98823619BC69CA00B790C6
+
+ primary
+
+
+ 9D98824819BC69CA00B790C6
+
+ primary
+
+
+
+
+
diff --git a/logo.svg b/logo.svg
deleted file mode 100644
index 40c7902..0000000
--- a/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-