diff --git a/Examples/Hero/Hero.h b/Examples/Hero/Hero.h new file mode 100644 index 00000000..819ea992 --- /dev/null +++ b/Examples/Hero/Hero.h @@ -0,0 +1,19 @@ +// +// Hero.h +// Hero +// +// Created by YiLun Zhao on 2017-01-03. +// Copyright © 2017 Luke Zhao. All rights reserved. +// + +#import + +//! Project version number for Hero. +FOUNDATION_EXPORT double HeroVersionNumber; + +//! Project version string for Hero. +FOUNDATION_EXPORT const unsigned char HeroVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/Examples/Hero/Info.plist b/Examples/Hero/Info.plist new file mode 100644 index 00000000..fbe1e6b3 --- /dev/null +++ b/Examples/Hero/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/Examples/HeroExamples.xcodeproj/project.pbxproj b/Examples/HeroExamples.xcodeproj/project.pbxproj index 2d6f73d0..f5d4044d 100644 --- a/Examples/HeroExamples.xcodeproj/project.pbxproj +++ b/Examples/HeroExamples.xcodeproj/project.pbxproj @@ -10,6 +10,33 @@ 83043017B73BC66DBB920D5C /* Pods_HeroExamples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */; }; A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; }; A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; }; + A306D3B61E1C7A2E00B6C23A /* Hero.h in Headers */ = {isa = PBXBuildFile; fileRef = A306D3B41E1C7A2E00B6C23A /* Hero.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A306D3B91E1C7A2E00B6C23A /* Hero.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; }; + A306D3BB1E1C7A2E00B6C23A /* Hero.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + A306D3D21E1C7A3C00B6C23A /* CALayer+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3BF1E1C7A3C00B6C23A /* CALayer+Hero.swift */; }; + A306D3D31E1C7A3C00B6C23A /* CAMediaTimingFunction+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C01E1C7A3C00B6C23A /* CAMediaTimingFunction+Hero.swift */; }; + A306D3D41E1C7A3C00B6C23A /* CascadePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C11E1C7A3C00B6C23A /* CascadePreprocessor.swift */; }; + A306D3D51E1C7A3C00B6C23A /* CG+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C21E1C7A3C00B6C23A /* CG+Hero.swift */; }; + A306D3D61E1C7A3C00B6C23A /* ClearPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C31E1C7A3C00B6C23A /* ClearPreprocessor.swift */; }; + A306D3D71E1C7A3C00B6C23A /* DispatchQueue+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C41E1C7A3C00B6C23A /* DispatchQueue+Hero.swift */; }; + A306D3D81E1C7A3C00B6C23A /* Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C51E1C7A3C00B6C23A /* Hero.swift */; }; + A306D3D91E1C7A3C00B6C23A /* HeroContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C61E1C7A3C00B6C23A /* HeroContext.swift */; }; + A306D3DA1E1C7A3C00B6C23A /* HeroDebugPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C71E1C7A3C00B6C23A /* HeroDebugPlugin.swift */; }; + A306D3DB1E1C7A3C00B6C23A /* HeroDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C81E1C7A3C00B6C23A /* HeroDebugView.swift */; }; + A306D3DC1E1C7A3C00B6C23A /* HeroDefaultAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C91E1C7A3C00B6C23A /* HeroDefaultAnimator.swift */; }; + A306D3DD1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CA1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewContext.swift */; }; + A306D3DE1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CB1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewState.swift */; }; + A306D3DF1E1C7A3C00B6C23A /* HeroPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CC1E1C7A3C00B6C23A /* HeroPlugin.swift */; }; + A306D3E01E1C7A3C00B6C23A /* HeroTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CD1E1C7A3C00B6C23A /* HeroTypes.swift */; }; + A306D3E11E1C7A3C00B6C23A /* SourceIDPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CE1E1C7A3C00B6C23A /* SourceIDPreprocessor.swift */; }; + A306D3E21E1C7A3C00B6C23A /* UIKit+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3CF1E1C7A3C00B6C23A /* UIKit+Hero.swift */; }; + A306D3E31E1C7A3C00B6C23A /* UIKit+HeroModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3D01E1C7A3C00B6C23A /* UIKit+HeroModifier.swift */; }; + A306D3E41E1C7A3C00B6C23A /* ViewToViewPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3D11E1C7A3C00B6C23A /* ViewToViewPreprocessor.swift */; }; + A306D3E51E1C7A5A00B6C23A /* CG+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C21E1C7A3C00B6C23A /* CG+Hero.swift */; }; + A306D3E71E1C7A6E00B6C23A /* DispatchQueue+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3C41E1C7A3C00B6C23A /* DispatchQueue+Hero.swift */; }; + A306D3F61E1D7A1A00B6C23A /* LiveInjection2ViewControllers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A306D3F51E1D7A1A00B6C23A /* LiveInjection2ViewControllers.swift */; }; + A306D3FB1E1D7A7200B6C23A /* LiveInjection.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A306D3F91E1D7A7200B6C23A /* LiveInjection.storyboard */; }; + A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; }; A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60A41DE761C90065CBD8 /* AppDelegate.swift */; }; A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60A81DE761C90065CBD8 /* Main.storyboard */; }; A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; }; @@ -30,17 +57,66 @@ A35949271E1A384E0095F407 /* ListToGrid.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A35949251E1A384E0095F407 /* ListToGrid.storyboard */; }; A359492A1E1A39B30095F407 /* Debug.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A35949281E1A39B30095F407 /* Debug.storyboard */; }; A359492D1E1A39D00095F407 /* LabelTransform.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A359492B1E1A39D00095F407 /* LabelTransform.storyboard */; }; + A39400B61E1D8749005E5454 /* LiveInjection1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A39400B51E1D8749005E5454 /* LiveInjection1ViewController.swift */; }; B10FDD451E00DD9800B7B66E /* DebugViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10FDD441E00DD9800B7B66E /* DebugViewController.swift */; }; - B15C85D51DF75E8F00586E64 /* CG+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15C85D41DF75E8F00586E64 /* CG+HeroExamples.swift */; }; B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E51DFA6E0C00C3B85D /* ListTableViewController.swift */; }; B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E71DFA6FE200C3B85D /* GridCollectionViewController.swift */; }; B195F5771DFE516F00B1343C /* LabelTransformViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B195F5761DFE516F00B1343C /* LabelTransformViewController.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + A306D3B71E1C7A2E00B6C23A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A33E60991DE761C90065CBD8 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A306D3B11E1C7A2E00B6C23A; + remoteInfo = Hero; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + A306D3BA1E1C7A2E00B6C23A /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + A306D3BB1E1C7A2E00B6C23A /* Hero.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig"; sourceTree = ""; }; A304BF831DF2717900A03345 /* ImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImageViewController.swift; path = ImageGallery/ImageViewController.swift; sourceTree = ""; }; A304BF891DF647FC00A03345 /* ImageCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImageCells.swift; path = ImageGallery/ImageCells.swift; sourceTree = ""; }; + A306D3B21E1C7A2E00B6C23A /* Hero.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Hero.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A306D3B41E1C7A2E00B6C23A /* Hero.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Hero.h; sourceTree = ""; }; + A306D3B51E1C7A2E00B6C23A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A306D3BF1E1C7A3C00B6C23A /* CALayer+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "CALayer+Hero.swift"; path = "../../Hero/CALayer+Hero.swift"; sourceTree = ""; }; + A306D3C01E1C7A3C00B6C23A /* CAMediaTimingFunction+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "CAMediaTimingFunction+Hero.swift"; path = "../../Hero/CAMediaTimingFunction+Hero.swift"; sourceTree = ""; }; + A306D3C11E1C7A3C00B6C23A /* CascadePreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CascadePreprocessor.swift; path = ../../Hero/CascadePreprocessor.swift; sourceTree = ""; }; + A306D3C21E1C7A3C00B6C23A /* CG+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "CG+Hero.swift"; path = "../../Hero/CG+Hero.swift"; sourceTree = ""; }; + A306D3C31E1C7A3C00B6C23A /* ClearPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ClearPreprocessor.swift; path = ../../Hero/ClearPreprocessor.swift; sourceTree = ""; }; + A306D3C41E1C7A3C00B6C23A /* DispatchQueue+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Hero.swift"; path = "../../Hero/DispatchQueue+Hero.swift"; sourceTree = ""; }; + A306D3C51E1C7A3C00B6C23A /* Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Hero.swift; path = ../../Hero/Hero.swift; sourceTree = ""; }; + A306D3C61E1C7A3C00B6C23A /* HeroContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroContext.swift; path = ../../Hero/HeroContext.swift; sourceTree = ""; }; + A306D3C71E1C7A3C00B6C23A /* HeroDebugPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroDebugPlugin.swift; path = ../../Hero/HeroDebugPlugin.swift; sourceTree = ""; }; + A306D3C81E1C7A3C00B6C23A /* HeroDebugView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroDebugView.swift; path = ../../Hero/HeroDebugView.swift; sourceTree = ""; }; + A306D3C91E1C7A3C00B6C23A /* HeroDefaultAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroDefaultAnimator.swift; path = ../../Hero/HeroDefaultAnimator.swift; sourceTree = ""; }; + A306D3CA1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroDefaultAnimatorViewContext.swift; path = ../../Hero/HeroDefaultAnimatorViewContext.swift; sourceTree = ""; }; + A306D3CB1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroDefaultAnimatorViewState.swift; path = ../../Hero/HeroDefaultAnimatorViewState.swift; sourceTree = ""; }; + A306D3CC1E1C7A3C00B6C23A /* HeroPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroPlugin.swift; path = ../../Hero/HeroPlugin.swift; sourceTree = ""; }; + A306D3CD1E1C7A3C00B6C23A /* HeroTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = HeroTypes.swift; path = ../../Hero/HeroTypes.swift; sourceTree = ""; }; + A306D3CE1E1C7A3C00B6C23A /* SourceIDPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SourceIDPreprocessor.swift; path = ../../Hero/SourceIDPreprocessor.swift; sourceTree = ""; }; + A306D3CF1E1C7A3C00B6C23A /* UIKit+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIKit+Hero.swift"; path = "../../Hero/UIKit+Hero.swift"; sourceTree = ""; }; + A306D3D01E1C7A3C00B6C23A /* UIKit+HeroModifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "UIKit+HeroModifier.swift"; path = "../../Hero/UIKit+HeroModifier.swift"; sourceTree = ""; }; + A306D3D11E1C7A3C00B6C23A /* ViewToViewPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewToViewPreprocessor.swift; path = ../../Hero/ViewToViewPreprocessor.swift; sourceTree = ""; }; + A306D3F51E1D7A1A00B6C23A /* LiveInjection2ViewControllers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveInjection2ViewControllers.swift; path = LiveInjection/LiveInjection2ViewControllers.swift; sourceTree = ""; }; + A306D3FA1E1D7A7200B6C23A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = HeroExamples/Base.lproj/LiveInjection.storyboard; sourceTree = SOURCE_ROOT; }; + A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ImageLibrary.swift; path = ImageGallery/ImageLibrary.swift; sourceTree = ""; }; A33E60A11DE761C90065CBD8 /* HeroExamples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HeroExamples.app; sourceTree = BUILT_PRODUCTS_DIR; }; A33E60A41DE761C90065CBD8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; A33E60A91DE761C90065CBD8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; @@ -63,8 +139,8 @@ A35949261E1A384E0095F407 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = HeroExamples/Base.lproj/ListToGrid.storyboard; sourceTree = SOURCE_ROOT; }; A35949291E1A39B30095F407 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Debug.storyboard; sourceTree = ""; }; A359492C1E1A39D00095F407 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LabelTransform.storyboard; sourceTree = ""; }; + A39400B51E1D8749005E5454 /* LiveInjection1ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveInjection1ViewController.swift; path = LiveInjection/LiveInjection1ViewController.swift; sourceTree = ""; }; B10FDD441E00DD9800B7B66E /* DebugViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DebugViewController.swift; path = Debug/DebugViewController.swift; sourceTree = ""; }; - B15C85D41DF75E8F00586E64 /* CG+HeroExamples.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CG+HeroExamples.swift"; sourceTree = ""; }; B185A4E51DFA6E0C00C3B85D /* ListTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ListTableViewController.swift; path = ListToGrid/ListTableViewController.swift; sourceTree = ""; }; B185A4E71DFA6FE200C3B85D /* GridCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GridCollectionViewController.swift; path = ListToGrid/GridCollectionViewController.swift; sourceTree = ""; }; B195F5761DFE516F00B1343C /* LabelTransformViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LabelTransformViewController.swift; path = LabelTransform/LabelTransformViewController.swift; sourceTree = ""; }; @@ -73,10 +149,18 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + A306D3AE1E1C7A2E00B6C23A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A33E609E1DE761C90065CBD8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A306D3B91E1C7A2E00B6C23A /* Hero.framework in Frameworks */, 83043017B73BC66DBB920D5C /* Pods_HeroExamples.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -101,10 +185,81 @@ name = Pods; sourceTree = ""; }; + A306D3B31E1C7A2E00B6C23A /* Hero */ = { + isa = PBXGroup; + children = ( + A306D3C51E1C7A3C00B6C23A /* Hero.swift */, + A306D3C61E1C7A3C00B6C23A /* HeroContext.swift */, + A306D3CC1E1C7A3C00B6C23A /* HeroPlugin.swift */, + A306D3CD1E1C7A3C00B6C23A /* HeroTypes.swift */, + A306D3EA1E1C7A9100B6C23A /* Animator */, + A306D3E91E1C7A8700B6C23A /* DebugPlugin */, + A306D3E81E1C7A7D00B6C23A /* Preprocessors */, + A306D3E61E1C7A6800B6C23A /* Extensions */, + A306D3B41E1C7A2E00B6C23A /* Hero.h */, + A306D3B51E1C7A2E00B6C23A /* Info.plist */, + ); + path = Hero; + sourceTree = ""; + }; + A306D3E61E1C7A6800B6C23A /* Extensions */ = { + isa = PBXGroup; + children = ( + A306D3BF1E1C7A3C00B6C23A /* CALayer+Hero.swift */, + A306D3C01E1C7A3C00B6C23A /* CAMediaTimingFunction+Hero.swift */, + A306D3C41E1C7A3C00B6C23A /* DispatchQueue+Hero.swift */, + A306D3CF1E1C7A3C00B6C23A /* UIKit+Hero.swift */, + A306D3D01E1C7A3C00B6C23A /* UIKit+HeroModifier.swift */, + A306D3C21E1C7A3C00B6C23A /* CG+Hero.swift */, + ); + name = Extensions; + sourceTree = ""; + }; + A306D3E81E1C7A7D00B6C23A /* Preprocessors */ = { + isa = PBXGroup; + children = ( + A306D3C11E1C7A3C00B6C23A /* CascadePreprocessor.swift */, + A306D3C31E1C7A3C00B6C23A /* ClearPreprocessor.swift */, + A306D3CE1E1C7A3C00B6C23A /* SourceIDPreprocessor.swift */, + A306D3D11E1C7A3C00B6C23A /* ViewToViewPreprocessor.swift */, + ); + name = Preprocessors; + sourceTree = ""; + }; + A306D3E91E1C7A8700B6C23A /* DebugPlugin */ = { + isa = PBXGroup; + children = ( + A306D3C71E1C7A3C00B6C23A /* HeroDebugPlugin.swift */, + A306D3C81E1C7A3C00B6C23A /* HeroDebugView.swift */, + ); + name = DebugPlugin; + sourceTree = ""; + }; + A306D3EA1E1C7A9100B6C23A /* Animator */ = { + isa = PBXGroup; + children = ( + A306D3C91E1C7A3C00B6C23A /* HeroDefaultAnimator.swift */, + A306D3CA1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewContext.swift */, + A306D3CB1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewState.swift */, + ); + name = Animator; + sourceTree = ""; + }; + A306D3FC1E1D82AB00B6C23A /* LiveInjection */ = { + isa = PBXGroup; + children = ( + A306D3F91E1D7A7200B6C23A /* LiveInjection.storyboard */, + A39400B51E1D8749005E5454 /* LiveInjection1ViewController.swift */, + A306D3F51E1D7A1A00B6C23A /* LiveInjection2ViewControllers.swift */, + ); + name = LiveInjection; + sourceTree = ""; + }; A33E60981DE761C90065CBD8 = { isa = PBXGroup; children = ( A33E60A31DE761C90065CBD8 /* HeroExamples */, + A306D3B31E1C7A2E00B6C23A /* Hero */, A33E60A21DE761C90065CBD8 /* Products */, 46383DC6A22A87056E5B40EC /* Pods */, 0ED3C727BC790F37EE7BD698 /* Frameworks */, @@ -115,6 +270,7 @@ isa = PBXGroup; children = ( A33E60A11DE761C90065CBD8 /* HeroExamples.app */, + A306D3B21E1C7A2E00B6C23A /* Hero.framework */, ); name = Products; sourceTree = ""; @@ -139,6 +295,7 @@ B185A4E91DFA6FE700C3B85D /* ListToGrid */, A3499D9D1DF202350049B541 /* ImageGallery */, A33E60B81DE7621C0065CBD8 /* CityGuide */, + A306D3FC1E1D82AB00B6C23A /* LiveInjection */, B10FDD461E00DD9D00B7B66E /* Debug */, B195F5781DFE517500B1343C /* LabelTransform */, ); @@ -162,7 +319,6 @@ children = ( A33E60A41DE761C90065CBD8 /* AppDelegate.swift */, A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */, - B15C85D41DF75E8F00586E64 /* CG+HeroExamples.swift */, A33E60AB1DE761C90065CBD8 /* Assets.xcassets */, A33E60AD1DE761C90065CBD8 /* LaunchScreen.storyboard */, A33E60B01DE761C90065CBD8 /* Info.plist */, @@ -177,6 +333,7 @@ A35949221E1A36D00095F407 /* ImageViewer.storyboard */, A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */, A304BF831DF2717900A03345 /* ImageViewController.swift */, + A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */, A304BF891DF647FC00A03345 /* ImageCells.swift */, ); name = ImageGallery; @@ -212,7 +369,36 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + A306D3AF1E1C7A2E00B6C23A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A306D3B61E1C7A2E00B6C23A /* Hero.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ + A306D3B11E1C7A2E00B6C23A /* Hero */ = { + isa = PBXNativeTarget; + buildConfigurationList = A306D3BE1E1C7A2E00B6C23A /* Build configuration list for PBXNativeTarget "Hero" */; + buildPhases = ( + A306D3AD1E1C7A2E00B6C23A /* Sources */, + A306D3AE1E1C7A2E00B6C23A /* Frameworks */, + A306D3AF1E1C7A2E00B6C23A /* Headers */, + A306D3B01E1C7A2E00B6C23A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Hero; + productName = Hero; + productReference = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; + productType = "com.apple.product-type.framework"; + }; A33E60A01DE761C90065CBD8 /* HeroExamples */ = { isa = PBXNativeTarget; buildConfigurationList = A33E60B31DE761C90065CBD8 /* Build configuration list for PBXNativeTarget "HeroExamples" */; @@ -223,10 +409,12 @@ A33E609F1DE761C90065CBD8 /* Resources */, 23B031AF37B3297143AE7376 /* [CP] Embed Pods Frameworks */, B60F2CF0B495F2D785FF29A1 /* [CP] Copy Pods Resources */, + A306D3BA1E1C7A2E00B6C23A /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( + A306D3B81E1C7A2E00B6C23A /* PBXTargetDependency */, ); name = HeroExamples; productName = HeroExamples; @@ -243,6 +431,12 @@ LastUpgradeCheck = 0810; ORGANIZATIONNAME = "Luke Zhao"; TargetAttributes = { + A306D3B11E1C7A2E00B6C23A = { + CreatedOnToolsVersion = 8.2.1; + DevelopmentTeam = 4VSEW78TKT; + LastSwiftMigration = 0820; + ProvisioningStyle = Automatic; + }; A33E60A01DE761C90065CBD8 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = 4VSEW78TKT; @@ -264,11 +458,19 @@ projectRoot = ""; targets = ( A33E60A01DE761C90065CBD8 /* HeroExamples */, + A306D3B11E1C7A2E00B6C23A /* Hero */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + A306D3B01E1C7A2E00B6C23A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; A33E609F1DE761C90065CBD8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -282,6 +484,7 @@ A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */, A35949241E1A36D00095F407 /* ImageViewer.storyboard in Resources */, A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */, + A306D3FB1E1D7A7200B6C23A /* LiveInjection.storyboard in Resources */, A35949131E1A29800095F407 /* Basic.storyboard in Resources */, A35949161E1A2A6A0095F407 /* MusicPlayer.storyboard in Resources */, A359492D1E1A39D00095F407 /* LabelTransform.storyboard in Resources */, @@ -339,31 +542,77 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + A306D3AD1E1C7A2E00B6C23A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A306D3DC1E1C7A3C00B6C23A /* HeroDefaultAnimator.swift in Sources */, + A306D3DB1E1C7A3C00B6C23A /* HeroDebugView.swift in Sources */, + A306D3DF1E1C7A3C00B6C23A /* HeroPlugin.swift in Sources */, + A306D3E41E1C7A3C00B6C23A /* ViewToViewPreprocessor.swift in Sources */, + A306D3D41E1C7A3C00B6C23A /* CascadePreprocessor.swift in Sources */, + A306D3D31E1C7A3C00B6C23A /* CAMediaTimingFunction+Hero.swift in Sources */, + A306D3E21E1C7A3C00B6C23A /* UIKit+Hero.swift in Sources */, + A306D3D21E1C7A3C00B6C23A /* CALayer+Hero.swift in Sources */, + A306D3E01E1C7A3C00B6C23A /* HeroTypes.swift in Sources */, + A306D3DD1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewContext.swift in Sources */, + A306D3DE1E1C7A3C00B6C23A /* HeroDefaultAnimatorViewState.swift in Sources */, + A306D3D51E1C7A3C00B6C23A /* CG+Hero.swift in Sources */, + A306D3E11E1C7A3C00B6C23A /* SourceIDPreprocessor.swift in Sources */, + A306D3D81E1C7A3C00B6C23A /* Hero.swift in Sources */, + A306D3E31E1C7A3C00B6C23A /* UIKit+HeroModifier.swift in Sources */, + A306D3D61E1C7A3C00B6C23A /* ClearPreprocessor.swift in Sources */, + A306D3D71E1C7A3C00B6C23A /* DispatchQueue+Hero.swift in Sources */, + A306D3DA1E1C7A3C00B6C23A /* HeroDebugPlugin.swift in Sources */, + A306D3D91E1C7A3C00B6C23A /* HeroContext.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A33E609D1DE761C90065CBD8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( A35949181E1A2BE60095F407 /* InitialViewController.swift in Sources */, + A306D3E71E1C7A6E00B6C23A /* DispatchQueue+Hero.swift in Sources */, A33E60C01DE7621C0065CBD8 /* CityGuideViewController.swift in Sources */, A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */, A3499D9F1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift in Sources */, - B15C85D51DF75E8F00586E64 /* CG+HeroExamples.swift in Sources */, A33E60BF1DE7621C0065CBD8 /* CityGuideCell.swift in Sources */, A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */, A33E60BE1DE7621C0065CBD8 /* City.swift in Sources */, A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */, + A306D3F61E1D7A1A00B6C23A /* LiveInjection2ViewControllers.swift in Sources */, + A306D3E51E1C7A5A00B6C23A /* CG+Hero.swift in Sources */, B10FDD451E00DD9800B7B66E /* DebugViewController.swift in Sources */, B195F5771DFE516F00B1343C /* LabelTransformViewController.swift in Sources */, B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */, + A39400B61E1D8749005E5454 /* LiveInjection1ViewController.swift in Sources */, A33E60C11DE7621C0065CBD8 /* CityViewController.swift in Sources */, B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */, A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */, + A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + A306D3B81E1C7A2E00B6C23A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A306D3B11E1C7A2E00B6C23A /* Hero */; + targetProxy = A306D3B71E1C7A2E00B6C23A /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ + A306D3F91E1D7A7200B6C23A /* LiveInjection.storyboard */ = { + isa = PBXVariantGroup; + children = ( + A306D3FA1E1D7A7200B6C23A /* Base */, + ); + name = LiveInjection.storyboard; + sourceTree = ""; + }; A33E60A81DE761C90065CBD8 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -460,6 +709,57 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + A306D3BC1E1C7A2E00B6C23A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 4VSEW78TKT; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Hero/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A306D3BD1E1C7A2E00B6C23A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 4VSEW78TKT; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Hero/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; A33E60B11DE761C90065CBD8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -557,7 +857,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = 4VSEW78TKT; INFOPLIST_FILE = HeroExamples/Info.plist; @@ -574,7 +874,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = 4VSEW78TKT; INFOPLIST_FILE = HeroExamples/Info.plist; @@ -590,6 +890,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + A306D3BE1E1C7A2E00B6C23A /* Build configuration list for PBXNativeTarget "Hero" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A306D3BC1E1C7A2E00B6C23A /* Debug */, + A306D3BD1E1C7A2E00B6C23A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A33E609C1DE761C90065CBD8 /* Build configuration list for PBXProject "HeroExamples" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Examples/HeroExamples.xcodeproj/xcshareddata/xcschemes/Hero.xcscheme b/Examples/HeroExamples.xcodeproj/xcshareddata/xcschemes/Hero.xcscheme new file mode 100644 index 00000000..29179cea --- /dev/null +++ b/Examples/HeroExamples.xcodeproj/xcshareddata/xcschemes/Hero.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Contents.json b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Contents.json new file mode 100644 index 00000000..85c9978c --- /dev/null +++ b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Unsplash10.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Unsplash10.jpg b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Unsplash10.jpg new file mode 100644 index 00000000..96f4256e Binary files /dev/null and b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10.imageset/Unsplash10.jpg differ diff --git a/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Contents.json b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Contents.json new file mode 100644 index 00000000..1a805dcb --- /dev/null +++ b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Unsplash10_thumb.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Unsplash10_thumb.jpg b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Unsplash10_thumb.jpg new file mode 100644 index 00000000..e449f30a Binary files /dev/null and b/Examples/HeroExamples/Assets.xcassets/Foods/Unsplash10_thumb.imageset/Unsplash10_thumb.jpg differ diff --git a/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/Contents.json b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/Contents.json new file mode 100644 index 00000000..f3262a56 --- /dev/null +++ b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "ic_input_48pt.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ic_input_48pt_2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ic_input_48pt_3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt.png b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt.png new file mode 100644 index 00000000..ce9e156b Binary files /dev/null and b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt.png differ diff --git a/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_2x.png b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_2x.png new file mode 100644 index 00000000..97ee5c20 Binary files /dev/null and b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_2x.png differ diff --git a/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_3x.png b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_3x.png new file mode 100644 index 00000000..e469cf17 Binary files /dev/null and b/Examples/HeroExamples/Assets.xcassets/ic_input_48pt.imageset/ic_input_48pt_3x.png differ diff --git a/Examples/HeroExamples/Base.lproj/ImageGallery.storyboard b/Examples/HeroExamples/Base.lproj/ImageGallery.storyboard index 7d63d91f..311b8bf2 100644 --- a/Examples/HeroExamples/Base.lproj/ImageGallery.storyboard +++ b/Examples/HeroExamples/Base.lproj/ImageGallery.storyboard @@ -31,14 +31,14 @@ - + - + diff --git a/Examples/HeroExamples/Base.lproj/ImageViewer.storyboard b/Examples/HeroExamples/Base.lproj/ImageViewer.storyboard index 5cebcfa4..d21321cf 100644 --- a/Examples/HeroExamples/Base.lproj/ImageViewer.storyboard +++ b/Examples/HeroExamples/Base.lproj/ImageViewer.storyboard @@ -12,7 +12,6 @@ - @@ -25,7 +24,7 @@ - + @@ -43,6 +42,7 @@ + diff --git a/Examples/HeroExamples/Base.lproj/ListToGrid.storyboard b/Examples/HeroExamples/Base.lproj/ListToGrid.storyboard index 212a6c9b..f302c9f2 100644 --- a/Examples/HeroExamples/Base.lproj/ListToGrid.storyboard +++ b/Examples/HeroExamples/Base.lproj/ListToGrid.storyboard @@ -40,7 +40,7 @@ - + diff --git a/Examples/HeroExamples/Base.lproj/LiveInjection.storyboard b/Examples/HeroExamples/Base.lproj/LiveInjection.storyboard new file mode 100644 index 00000000..ca436a6e --- /dev/null +++ b/Examples/HeroExamples/Base.lproj/LiveInjection.storyboard @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/HeroExamples/Base.lproj/Main.storyboard b/Examples/HeroExamples/Base.lproj/Main.storyboard index 49d4653f..6884c9dd 100644 --- a/Examples/HeroExamples/Base.lproj/Main.storyboard +++ b/Examples/HeroExamples/Base.lproj/Main.storyboard @@ -59,11 +59,6 @@ - - - - - @@ -182,11 +172,6 @@ - - - - - @@ -229,12 +209,6 @@ - - - - - - @@ -275,11 +243,6 @@ - - - - - @@ -316,11 +274,6 @@ - - - - - @@ -357,11 +305,6 @@ - - - - - @@ -383,9 +321,38 @@ - + + + + + + + + + + + + + + + + + + @@ -400,11 +367,6 @@ - - - - - - + @@ -439,11 +396,6 @@ - - - - - @@ -474,7 +421,7 @@ - + @@ -485,6 +432,7 @@ + diff --git a/Examples/HeroExamples/CG+HeroExamples.swift b/Examples/HeroExamples/CG+HeroExamples.swift deleted file mode 100644 index 0fe2506f..00000000 --- a/Examples/HeroExamples/CG+HeroExamples.swift +++ /dev/null @@ -1,90 +0,0 @@ -// The MIT License (MIT) -// -// Copyright (c) 2015 Luke Zhao -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import MetalKit - -internal struct KeySet{ - var dict:[Key:Set] = [:] - internal subscript(key: Key) -> Set { - mutating get { - if dict[key] == nil { - dict[key] = Set() - } - return dict[key]! - } - set { - dict[key] = newValue - } - } -} - -internal extension CGRect{ - internal var center:CGPoint{ - return CGPoint(x: origin.x + size.width/2, y: origin.y + size.height/2) - } - internal var bounds:CGRect{ - return CGRect(origin: CGPoint.zero, size: size) - } - init(center:CGPoint, size:CGSize) { - self.init(x:center.x - size.width/2, y:center.y - size.height/2,width:size.width,height:size.height) - } -} - -extension CGFloat{ - internal func clamp(_ a:CGFloat, _ b:CGFloat) -> CGFloat{ - return self < a ? a : (self > b ? b : self) - } -} -extension CGPoint{ - internal func translate(_ dx:CGFloat, dy:CGFloat) -> CGPoint{ - return CGPoint(x: self.x+dx, y: self.y+dy) - } - - internal func transform(_ t:CGAffineTransform) -> CGPoint{ - return self.applying(t) - } - - internal func distance(_ b:CGPoint)->CGFloat{ - return sqrt(pow(self.x-b.x,2)+pow(self.y-b.y,2)); - } -} -internal func +(left: CGPoint, right: CGPoint) -> CGPoint { - return CGPoint(x: left.x + right.x, y: left.y + right.y) -} -internal func -(left: CGPoint, right: CGPoint) -> CGPoint { - return CGPoint(x: left.x - right.x, y: left.y - right.y) -} -internal func /(left: CGPoint, right: CGFloat) -> CGPoint { - return CGPoint(x: left.x/right, y: left.y/right) -} -internal func *(left: CGPoint, right: CGFloat) -> CGPoint { - return CGPoint(x: left.x*right, y: left.y*right) -} -internal func *(left: CGFloat, right: CGPoint) -> CGPoint { - return right * left -} -internal func *(left: CGPoint, right: CGPoint) -> CGPoint { - return CGPoint(x: left.x*right.x, y: left.y*right.y) -} -internal prefix func -(point:CGPoint) -> CGPoint { - return CGPoint.zero - point -} diff --git a/Examples/HeroExamples/Examples/ImageGallery/ImageCells.swift b/Examples/HeroExamples/Examples/ImageGallery/ImageCells.swift index c5275056..929886b2 100644 --- a/Examples/HeroExamples/Examples/ImageGallery/ImageCells.swift +++ b/Examples/HeroExamples/Examples/ImageGallery/ImageCells.swift @@ -30,6 +30,13 @@ class ScrollingImageCell:UICollectionViewCell{ var imageView:UIImageView! var scrollView:UIScrollView! var dTapGR:UITapGestureRecognizer! + var image:UIImage?{ + get{ return imageView.image } + set{ + imageView.image = newValue + setNeedsLayout() + } + } var topInset:CGFloat = 0{ didSet{ centerIfNeeded() @@ -75,7 +82,12 @@ class ScrollingImageCell:UICollectionViewCell{ override func layoutSubviews() { super.layoutSubviews() scrollView.frame = bounds - let size = CGSize(width: bounds.width, height: bounds.width) + let size:CGSize + if let image = imageView.image{ + size = CGSize(width: bounds.width, height: bounds.width * image.size.height / image.size.width ) + } else { + size = CGSize(width: bounds.width, height: bounds.width) + } imageView.frame = CGRect(origin: .zero, size: size) scrollView.contentSize = size centerIfNeeded() diff --git a/Examples/HeroExamples/Examples/ImageGallery/ImageGalleryCollectionViewController.swift b/Examples/HeroExamples/Examples/ImageGallery/ImageGalleryCollectionViewController.swift index ad54c9e0..75f34248 100644 --- a/Examples/HeroExamples/Examples/ImageGallery/ImageGalleryCollectionViewController.swift +++ b/Examples/HeroExamples/Examples/ImageGallery/ImageGalleryCollectionViewController.swift @@ -52,14 +52,15 @@ extension ImageGalleryViewController:UICollectionViewDataSource{ } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 50 + return ImageLibrary.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let imageCell = collectionView.dequeueReusableCell(withReuseIdentifier: "item", for: indexPath) as! ImageCell - imageCell.imageView.image = UIImage(named: "Unsplash\(indexPath.item % 10)_thumb") - imageCell.heroID = "image_\(indexPath.item)" - imageCell.heroModifiers = "fade translate(0, 150) rotate(-1,0,0) scale(0.8) zPosition(50) zPositionIfMatched(100)" + imageCell.imageView.image = ImageLibrary.thumbnail(index:indexPath.item) + imageCell.imageView.heroID = "image_\(indexPath.item)" + imageCell.imageView.heroModifiers = "zPosition(100)" + imageCell.heroModifiers = "fade translate(0, 150) rotate(-1,0,0) scale(0.8) zPosition(50)" return imageCell } } diff --git a/Examples/HeroExamples/Examples/ImageGallery/ImageLibrary.swift b/Examples/HeroExamples/Examples/ImageGallery/ImageLibrary.swift new file mode 100644 index 00000000..154e6659 --- /dev/null +++ b/Examples/HeroExamples/Examples/ImageGallery/ImageLibrary.swift @@ -0,0 +1,20 @@ +// +// ImageLibrary.swift +// HeroExamples +// +// Created by YiLun Zhao on 2017-01-04. +// Copyright © 2017 Luke Zhao. All rights reserved. +// + +import UIKit + + +class ImageLibrary{ + static var count = 100 + static func thumbnail(index:Int) -> UIImage{ + return UIImage(named: "Unsplash\(index % 11)_thumb")! + } + static func image(index:Int) -> UIImage{ + return UIImage(named: "Unsplash\(index % 11)")! + } +} diff --git a/Examples/HeroExamples/Examples/ImageGallery/ImageViewController.swift b/Examples/HeroExamples/Examples/ImageGallery/ImageViewController.swift index 776d1b43..77bb43d9 100644 --- a/Examples/HeroExamples/Examples/ImageGallery/ImageViewController.swift +++ b/Examples/HeroExamples/Examples/ImageGallery/ImageViewController.swift @@ -80,12 +80,12 @@ class ImageViewController: UICollectionViewController { extension ImageViewController{ override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 50 + return ImageLibrary.count } override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let imageCell = collectionView.dequeueReusableCell(withReuseIdentifier: "item", for: indexPath) as! ScrollingImageCell - imageCell.imageView.image = UIImage(named: "Unsplash\(indexPath.item % 10)") + imageCell.image = ImageLibrary.image(index:indexPath.item) imageCell.imageView.heroID = "image_\(indexPath.item)" imageCell.imageView.heroModifiers = "position(\(view.bounds.width/2), \(view.bounds.height+view.bounds.width/2)) scale(0.6) fade zPositionIfMatched(100)" imageCell.topInset = topLayoutGuide.length diff --git a/Examples/HeroExamples/Examples/ListToGrid/GridCollectionViewController.swift b/Examples/HeroExamples/Examples/ListToGrid/GridCollectionViewController.swift index 22a7d07d..a2152d88 100644 --- a/Examples/HeroExamples/Examples/ListToGrid/GridCollectionViewController.swift +++ b/Examples/HeroExamples/Examples/ListToGrid/GridCollectionViewController.swift @@ -38,7 +38,7 @@ class GridCollectionViewController: UICollectionViewController, UICollectionView } override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 50 + return ImageLibrary.count } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { @@ -48,7 +48,7 @@ class GridCollectionViewController: UICollectionViewController, UICollectionView override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "item", for: indexPath) as! GridImageCell - let image = UIImage(named: "Unsplash\(indexPath.item % 10)")! + let image = ImageLibrary.thumbnail(index:indexPath.item) cell.heroModifiers = "fade translate(0, 20)" cell.imageView?.image = image cell.imageView?.heroID = "image_\(indexPath.item)" diff --git a/Examples/HeroExamples/Examples/ListToGrid/ListTableViewController.swift b/Examples/HeroExamples/Examples/ListToGrid/ListTableViewController.swift index b14c2dba..edf04ef7 100644 --- a/Examples/HeroExamples/Examples/ListToGrid/ListTableViewController.swift +++ b/Examples/HeroExamples/Examples/ListToGrid/ListTableViewController.swift @@ -27,8 +27,9 @@ class ListTableViewCell:UITableViewCell{ override func layoutSubviews() { super.layoutSubviews() imageView?.frame.origin.x = 0 - textLabel?.frame.origin.x -= 15 - detailTextLabel?.frame.origin.x -= 15 + imageView?.frame.size = CGSize(width: bounds.height, height: bounds.height) + textLabel?.frame.origin.x = bounds.height + 10 + detailTextLabel?.frame.origin.x = bounds.height + 10 } } @@ -39,7 +40,7 @@ class ListTableViewController: UITableViewController { } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 50 + return ImageLibrary.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { @@ -48,7 +49,7 @@ class ListTableViewController: UITableViewController { cell.heroModifiers = "fade translate(-100, 0)" cell.imageView?.heroID = "image_\(indexPath.item)" cell.imageView?.heroModifiers = "arc zPosition(10)" - cell.imageView?.image = UIImage(named: "Unsplash\(indexPath.item % 10)") + cell.imageView?.image = ImageLibrary.thumbnail(index:indexPath.item) cell.textLabel?.text = "Item \(indexPath.item)" cell.detailTextLabel?.text = "Description \(indexPath.item)" diff --git a/Examples/HeroExamples/Examples/LiveInjection/LiveInjection1ViewController.swift b/Examples/HeroExamples/Examples/LiveInjection/LiveInjection1ViewController.swift new file mode 100644 index 00000000..b7ae148c --- /dev/null +++ b/Examples/HeroExamples/Examples/LiveInjection/LiveInjection1ViewController.swift @@ -0,0 +1,25 @@ +// +// LiveInjection1ViewController.swift +// HeroExamples +// +// Created by YiLun Zhao on 2017-01-04. +// Copyright © 2017 Luke Zhao. All rights reserved. +// + +import UIKit +import Hero + +class LiveInjection1ViewController: UIViewController { + + @IBOutlet weak var textLabel: UILabel! + @IBOutlet weak var blueView: UIView! + +} + +extension LiveInjection1ViewController:HeroViewControllerDelegate{ + func heroWillStartTransition() { + textLabel.heroModifiers = "translate(500)" + blueView.heroID = "blue" + blueView.heroModifiers = "zPosition(5)" + } +} diff --git a/Examples/HeroExamples/Examples/LiveInjection/LiveInjection2ViewControllers.swift b/Examples/HeroExamples/Examples/LiveInjection/LiveInjection2ViewControllers.swift new file mode 100644 index 00000000..b625fb98 --- /dev/null +++ b/Examples/HeroExamples/Examples/LiveInjection/LiveInjection2ViewControllers.swift @@ -0,0 +1,31 @@ +// +// LiveInjection2ViewController.swift +// HeroExamples +// +// Created by YiLun Zhao on 2017-01-04. +// Copyright © 2017 Luke Zhao. All rights reserved. +// + +import UIKit +import Hero + +class LiveInjection2ViewController: UIViewController { + + @IBOutlet weak var orangeView: UIView! + @IBOutlet weak var greenView: UIView! + @IBOutlet weak var blueView: UIView! + +} + +extension LiveInjection2ViewController:HeroViewControllerDelegate{ + + func heroWillStartTransition() { + orangeView.heroID = "orange" + orangeView.heroModifiers = "scale(0.5)" + greenView.heroID = "green" + greenView.heroModifiers = "scale(0.5)" + blueView.heroID = "blue" + blueView.heroModifiers = "zPosition(5)" + } + +} diff --git a/Examples/HeroExamples/InitialViewController.swift b/Examples/HeroExamples/InitialViewController.swift index 16dd81b1..69172c66 100644 --- a/Examples/HeroExamples/InitialViewController.swift +++ b/Examples/HeroExamples/InitialViewController.swift @@ -14,12 +14,8 @@ class InitialViewController: UITableViewController { [], ["Basic", "MusicPlayer", "Menu"], ["CityGuide", "ImageViewer", "ListToGrid", "ImageGallery"], - ["Debug", "LabelTransform"] + ["LiveInjection", "Debug", "LabelTransform"] ] - override func viewDidLoad() { - super.viewDidLoad() - - } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { if indexPath.item < storyboards[indexPath.section].count{ diff --git a/Examples/HeroExamples/UIKit+HeroExamples.swift b/Examples/HeroExamples/UIKit+HeroExamples.swift index ba74468b..ed91ef17 100644 --- a/Examples/HeroExamples/UIKit+HeroExamples.swift +++ b/Examples/HeroExamples/UIKit+HeroExamples.swift @@ -77,50 +77,8 @@ public extension UIView{ layer.zPosition = newValue } } - @IBInspectable public var anchorPoint: CGPoint { - get { - return layer.anchorPoint - } - - set { - var newPoint = CGPoint(x:bounds.size.width * anchorPoint.x, y:bounds.size.height * anchorPoint.y) - var oldPoint = CGPoint(x:bounds.size.width * layer.anchorPoint.x, y:bounds.size.height * layer.anchorPoint.y) - - newPoint = newValue.applying(transform) - oldPoint = anchorPoint.applying(transform) - - var position = layer.position - position.x -= oldPoint.x - position.x += newPoint.x - - position.y -= oldPoint.y - position.y += newPoint.y - - layer.position = position - layer.anchorPoint = anchorPoint - } - } -} - - -func delay(_ time:Double, execute: @escaping ()->Void){ - DispatchQueue.main.asyncAfter(deadline: .now() + time, execute: execute) } -extension UIViewController{ - @IBInspectable public var timeStay:TimeInterval { - get { - return 0 - } - - set { - delay(newValue) { - self.performSegue(withIdentifier: "next", sender: nil) - } - } - } - - func viewController(forStoryboardName:String) -> UIViewController{ - return UIStoryboard(name: forStoryboardName, bundle: nil).instantiateInitialViewController()! - } +func viewController(forStoryboardName:String) -> UIViewController{ + return UIStoryboard(name: forStoryboardName, bundle: nil).instantiateInitialViewController()! } diff --git a/Examples/Podfile b/Examples/Podfile index fe36a1ba..d7b5e96e 100644 --- a/Examples/Podfile +++ b/Examples/Podfile @@ -2,7 +2,6 @@ platform :ios, '9.0' target 'HeroExamples' do use_frameworks! - pod "Hero", :path=>".." pod "ZCAnimatedLabel" pod 'ChameleonFramework/Swift', :git => 'https://github.com/ViccAlexander/Chameleon.git' end diff --git a/Examples/Podfile.lock b/Examples/Podfile.lock index db106b83..c408938a 100644 --- a/Examples/Podfile.lock +++ b/Examples/Podfile.lock @@ -2,19 +2,15 @@ PODS: - ChameleonFramework/Default (2.1.0) - ChameleonFramework/Swift (2.1.0): - ChameleonFramework/Default - - Hero (0.0.1) - ZCAnimatedLabel (0.0.4) DEPENDENCIES: - ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`) - - Hero (from `..`) - ZCAnimatedLabel EXTERNAL SOURCES: ChameleonFramework: :git: https://github.com/ViccAlexander/Chameleon.git - Hero: - :path: ".." CHECKOUT OPTIONS: ChameleonFramework: @@ -23,9 +19,8 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64 - Hero: c8f6ee8e43aa5dfdf4e0dab8c90c4820d032a665 ZCAnimatedLabel: 519b688bef4403fd356bc785f9b61cdfd8e6472d -PODFILE CHECKSUM: 19514ab9478505fb40da42d51cd280bd1c693fc3 +PODFILE CHECKSUM: 613342ef5c877a23fce065b29fa8f40bbc61c008 COCOAPODS: 1.1.1 diff --git a/Examples/Pods/Manifest.lock b/Examples/Pods/Manifest.lock index db106b83..c408938a 100644 --- a/Examples/Pods/Manifest.lock +++ b/Examples/Pods/Manifest.lock @@ -2,19 +2,15 @@ PODS: - ChameleonFramework/Default (2.1.0) - ChameleonFramework/Swift (2.1.0): - ChameleonFramework/Default - - Hero (0.0.1) - ZCAnimatedLabel (0.0.4) DEPENDENCIES: - ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`) - - Hero (from `..`) - ZCAnimatedLabel EXTERNAL SOURCES: ChameleonFramework: :git: https://github.com/ViccAlexander/Chameleon.git - Hero: - :path: ".." CHECKOUT OPTIONS: ChameleonFramework: @@ -23,9 +19,8 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64 - Hero: c8f6ee8e43aa5dfdf4e0dab8c90c4820d032a665 ZCAnimatedLabel: 519b688bef4403fd356bc785f9b61cdfd8e6472d -PODFILE CHECKSUM: 19514ab9478505fb40da42d51cd280bd1c693fc3 +PODFILE CHECKSUM: 613342ef5c877a23fce065b29fa8f40bbc61c008 COCOAPODS: 1.1.1 diff --git a/Examples/Pods/Pods.xcodeproj/project.pbxproj b/Examples/Pods/Pods.xcodeproj/project.pbxproj index 3d0ac7b7..0f50b690 100644 --- a/Examples/Pods/Pods.xcodeproj/project.pbxproj +++ b/Examples/Pods/Pods.xcodeproj/project.pbxproj @@ -8,130 +8,98 @@ /* Begin PBXBuildFile section */ 03DCD393DF69EE6DE4AD424B1192DD02 /* UIViewController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 303FC65376AD824AF269B17A715AB4D0 /* UIViewController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04118D1B8FDD7E7173670C8B07711589 /* ZCAnimatedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E36AE8CE3D808B3D2BBB747744D39E5 /* ZCAnimatedLabel-dummy.m */; }; - 07FBEEA9B5A846CA380A56E0C4871E70 /* ZCThrownLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B9D36B2F41D2F7FDA079D725D8A9EF5 /* ZCThrownLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 0B60DAA4D34F3C74E1142883A12A8CC2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; 0D7F425CFB628271BFB6FCFF8201BF4F /* UIButton+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A092FCC9003B561AE8D5B50EE5A0AFC /* UIButton+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10786E27C0CE4E3885C4F18686CF6300 /* ZCShapeshiftLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 466CFD0F91016EAA8F1AC59F4CB3C975 /* ZCShapeshiftLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0FAA11918BC2377E39A877BC142D1EEF /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 755FAE73277FCB766461DDF0A4841EC5 /* CoreText.framework */; }; 139A9CEDE5163F58CBB1A3A135DAD6A3 /* UIImage+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = E3000841A63E13E2E2DA9D1C4294C820 /* UIImage+ChameleonPrivate.m */; }; - 192A0E280366B70ECE34DF53AB848141 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; 1B704F3C816C4532F9B7FDFE0625732E /* ChameleonFramework-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F421C1312F9063105A65D64D8C5BE410 /* ChameleonFramework-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BF55DFD1990F68F268B96985726FD34 /* Pods-HeroExamples-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AF34292621395D6290871F5FB22E18 /* Pods-HeroExamples-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1EFA7FF8FA2BF549B4CA3B7056C8A31F /* CG+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9DF90DEF699C530738BF36F7EC08F4A /* CG+Hero.swift */; }; + 1E162B130F202BB758F70ABF7A79FA55 /* ZCAnimatedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE5CC8638DDC6FA930E5F3F2249945F /* ZCAnimatedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 24BE4A3CB29223B7DCC5150F5C08A307 /* ZCSpinLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C580D132560EC3A7BBD0CBD16755E73 /* ZCSpinLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 25CCFF1662CCA3724B76988DD5E6C7DA /* Pods-HeroExamples-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC559FE89B18815721B5D20117D33F86 /* Pods-HeroExamples-dummy.m */; }; 29F74E8A334254C68C6720E3B247CE32 /* NSArray+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E05326F7CD25B55ABD6DD7695EB6391 /* NSArray+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2D10805A1729B26DCB2CAD52F2049BAF /* ZCShapeshiftLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = A0B3C6ED9393F5E55D698B677D8CC5F4 /* ZCShapeshiftLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 2DDDE2C06FB4DCC639CFD100F224D6FD /* UIColor+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 684B3BBEA8FE40B07E0734FFA0F1E808 /* UIColor+Chameleon.m */; }; - 31355E6EC81B820199C659E233B4E9E8 /* ZCSpinLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE69F7F97686AC4F7635939FA46FD4E /* ZCSpinLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36F23BEB8D59F2D7E929B65837955928 /* DispatchQueue+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F7BF54988B62579662B3EBF1570192 /* DispatchQueue+Hero.swift */; }; - 3A2A6EF6E339DA1B12A50A2B0CC24B13 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 755FAE73277FCB766461DDF0A4841EC5 /* CoreText.framework */; }; - 3B7E296D2722377B0EB6FD076A716081 /* SourceIDPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32920F1C14AABE3E6324EB718DB4F22A /* SourceIDPreprocessor.swift */; }; + 2F7F43A4296932FB55CBA489E4D0508C /* ZCDuangLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 149058506A3D7F88DBFFA52312D9CF87 /* ZCDuangLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3B373CC3F8D9135D5422F0E1092CC6C9 /* ZCFlyinLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = B306F35D55098B8275E41406708680C3 /* ZCFlyinLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3D08C4F4E2E65D192D317AED0A8237B3 /* UIColor+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AFCDC269C1B04B7950F108514B9A002 /* UIColor+ChameleonPrivate.m */; }; - 3FF66D2B989569989DA1ECEF022D0911 /* ClearPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DDFB6D7D1D131792D16BCA568C70E07 /* ClearPreprocessor.swift */; }; - 40E1F04D4C2801329BB14841B24C005A /* ZCRevealLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C1E8493C19D7AB4A77A873BC29D979F /* ZCRevealLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 40183767C9BA63FB5F28CFD448568CF7 /* ZCAnimatedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 945885D650D2539467D95A8A5338C137 /* ZCAnimatedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 44117424757A5E62D87B8BF4B41A4207 /* UIColor+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 56565CE08ADACD79CEA130925F0CDE8F /* UIColor+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; 459048ECD9FAA42B77566EC56ECAD793 /* UINavigationController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = F1C22F078BD061D6FC9619141BDA695E /* UINavigationController+Chameleon.m */; }; 4A7F6945FC35DB43E7C78876DD95CB2F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85FDCAA1EADCFD367E1698CDE25DE0DF /* UIKit.framework */; }; - 56989A7BF080012B0F0637436E6EABB0 /* ZCDashLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = A32E96E330F1BE794E0ACA67C394BA33 /* ZCDashLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 598E88F95330D05C0D644897CEF4B469 /* ZCTransparencyLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = BACBC4D8BC433BCFBAE3E48B295C5936 /* ZCTransparencyLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BCC9986918F1504E617CF4EB6650D46 /* Hero-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A95F120A3DF8F7A911658AE7298E614B /* Hero-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4CC5AE1E0D4700767EC56DF7B8E2AE4D /* ZCFallLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B291C4D1C35D63E1383F43604CC8C2F /* ZCFallLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F588C05B1BD6255AC3A7E1759D015B4 /* ZCFlyinLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 10C119B874C2B68D6B332014EFA18131 /* ZCFlyinLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 5EA9F0ED011B06DEFA8542EEE72508C3 /* UIViewController+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = B3B9625BB8675FB84F57FAEC62E860DF /* UIViewController+Chameleon.m */; }; - 5FBDE142FFC1B2E3A8590427B8F1CBA9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85FDCAA1EADCFD367E1698CDE25DE0DF /* UIKit.framework */; }; 604286A8F8A2ACB063BDF97B09D4987C /* UILabel+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 199950B620AFA6023EECBB662A39C21C /* UILabel+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61288CA5CDDA4889540D904296FC9BF1 /* ZCEasingUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F249051A59B13F862BA33EFFEB0367 /* ZCEasingUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6712100A2CCB9B987281A02F6778473C /* NSArray+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 841CB32EB317DF862FADB4C24E3C165D /* NSArray+Chameleon.m */; }; - 6F18AC21D391B19865742F811EC20202 /* ZCTransparencyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2912F6D7A7878B823E4E2C679EBED4BE /* ZCTransparencyLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 704C71A8D826D94BE3F463A1E39DDE08 /* HeroTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90410D05047B40B99B553954960BF82B /* HeroTypes.swift */; }; - 75B4A80CFC3A9C0B7D74139C31F980F1 /* ZCFocusLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA3B00CC9CD7B05A1FCFA3B76888F46 /* ZCFocusLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6AA9E69CCB146EC7728EAF46A3A713AC /* ZCSpinLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE69F7F97686AC4F7635939FA46FD4E /* ZCSpinLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6FE3836B8D9901EB160349215E388DA0 /* ZCFocusLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = AFA3B00CC9CD7B05A1FCFA3B76888F46 /* ZCFocusLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 71F6B456484AFD3E66941D85EBC63AB4 /* ZCEasingUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 806DCB81FA89BA89C35578AC443BC5FC /* ZCEasingUtil.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7339345D8DDEF37E9F9F3BE9BAD6307B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; + 75B759DB544D317A6FC88F4FD62AB5E2 /* ZCFocusLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = BD543212607D8A21C5EEB4811E15E12B /* ZCFocusLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 78281D8673FC507089FCFDC439DEDC16 /* Chameleon_.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB89971EBD65901AAF884B6966F55F4 /* Chameleon_.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AE94C0C7BFD8A9C9530AED794BD0D8E /* ZCDuangLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 09B6FDEB03B25BF401BC87859B831B3E /* ZCDuangLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 7EC18B2353DEF54BB916A4DCCA03F524 /* ZCCoreTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E6564229CDFA3EDECF821FC24BC2FB /* ZCCoreTextLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FBF3BEEC3253A81E1E145C76C89B83A /* ZCThrownLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = DF7172E1472CD5DF0E3B9AA1D3A86108 /* ZCThrownLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 784D05978A3F371754437833B6E3B223 /* ZCThrownLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = DF7172E1472CD5DF0E3B9AA1D3A86108 /* ZCThrownLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CA7C05EB721D0F876A6DAE12821675C /* ZCCoreTextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 12E6564229CDFA3EDECF821FC24BC2FB /* ZCCoreTextLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; 833F15A28A0D562548517BCA8EAF23B6 /* ChameleonShorthand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29ED22738A029D4CFD71910614E10500 /* ChameleonShorthand.swift */; }; 83CFC8F573AD5B75191E162E64C7D039 /* UIButton+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = E730B04E8BAA5CA99E146F2D4FB86682 /* UIButton+Chameleon.m */; }; - 84C802C36B8B0B0B7914F21C63BFA45E /* ZCAnimatedLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 945885D650D2539467D95A8A5338C137 /* ZCAnimatedLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 86F7D970F220974A0E26C3B632C5C74F /* UIImage+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 98A7FA881BD2F0AAE87C7A1383923B1E /* UIImage+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87180A87859AD4B9B5656F52A3E64013 /* HeroContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68F0DA52F9FD4863B90F36540967E1AC /* HeroContext.swift */; }; - 8888D8CD2B70C41CCD55AAEEA4FD25AC /* ZCEasingUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 806DCB81FA89BA89C35578AC443BC5FC /* ZCEasingUtil.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - 8E0CEB2CEE49A5BEE264A8EE54714EA7 /* ZCAnimatedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A315AB85F1FD18E70BB9A101498D6E9 /* ZCAnimatedLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 8ECF929AC5E737EBEB542283886D5E07 /* UIView+ChameleonPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = E11899316E3471F26E15C340B386EE8D /* UIView+ChameleonPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FDC07FBCD8EF555111482A3698ED4F7 /* ZCDuangLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 149058506A3D7F88DBFFA52312D9CF87 /* ZCDuangLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 923369708790774BB768672AA79DCAD4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; - 94F7E046C2602C8C4D634FF684B227F8 /* ZCFallLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D2A3D8C3021B3B3CC33CC0E925CD1ED /* ZCFallLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9405A75288E8E96DACC18A6EEC420432 /* ZCTransparencyLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = BACBC4D8BC433BCFBAE3E48B295C5936 /* ZCTransparencyLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 95E542740750F827BE2EBE3DE6F62D0E /* ChameleonFramework-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0FBC58AD637F7B0A7A1E4E5DF090DB /* ChameleonFramework-dummy.m */; }; - 96ADBD9B612F8A5B2A417A3BCED08B78 /* HeroDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABC44921DBAFE81EDBF72413F25CA66 /* HeroDebugView.swift */; }; - 96E2D91886535313CCBDF853FEB03868 /* ZCShapeshiftLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = A0B3C6ED9393F5E55D698B677D8CC5F4 /* ZCShapeshiftLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 960CCAF77BEB2BADB3EDF2B1D4F163ED /* ZCDashLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = A32E96E330F1BE794E0ACA67C394BA33 /* ZCDashLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9624DC1CBD9DA4A784590FFC193673FA /* Pods-HeroExamples-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AF34292621395D6290871F5FB22E18 /* Pods-HeroExamples-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 9A3EAF15D3C58FD56A552FD703A9154C /* ChameleonConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BA841517A854B30F7AC8B896BE29F62 /* ChameleonConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9ADBC3165E0411E5DFAAFE05C96EDC2D /* UIKit+HeroModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA962E8A0090A3F508472C2A41382DB4 /* UIKit+HeroModifier.swift */; }; 9B6AD39C81FAF37861FC0FEC41022146 /* UIAppearance+Swift.h in Headers */ = {isa = PBXBuildFile; fileRef = 8912F16BF2FEA16A2CE0D547636D8650 /* UIAppearance+Swift.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A37850B41E0B60FC002854A8 /* HeroDefaultAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37850B31E0B60FC002854A8 /* HeroDefaultAnimatorViewContext.swift */; }; - A37850B61E0B619F002854A8 /* HeroDefaultAnimatorViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37850B51E0B619F002854A8 /* HeroDefaultAnimatorViewState.swift */; }; - A37850B91E0B6487002854A8 /* CALayer+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37850B81E0B6487002854A8 /* CALayer+Hero.swift */; }; + A012023B35FBAC0F3BF4A79AB56F5BF8 /* ZCDuangLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 09B6FDEB03B25BF401BC87859B831B3E /* ZCDuangLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; A664D0A12D5F3DBD08A7E8DFE3AE83E2 /* UIView+ChameleonPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = AC11BE14A0EC12C71F91EE5621D4D7FB /* UIView+ChameleonPrivate.m */; }; - A6AC4C9DCE32429CE5D6CF2EAA3C52DE /* UIKit+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA92FDB8DCF56BE10918981146E71D9 /* UIKit+Hero.swift */; }; - A6DA81627CEB670BBFBBAC365EEFBAF8 /* CascadePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A91722A49C98F39B7953A0624D18A0D /* CascadePreprocessor.swift */; }; - A918B9CE3AFC7CFE22502D0EDF36E827 /* ZCFallLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B291C4D1C35D63E1383F43604CC8C2F /* ZCFallLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB80F4B71FE40B7325FE19FE7920BE1A /* ZCFlyinLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = B306F35D55098B8275E41406708680C3 /* ZCFlyinLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACF084933B3CBF65307BBC8484191FA0 /* ZCDashLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = E61802497B0C82082771903678DD88F1 /* ZCDashLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B091706205DBEA2827284B7060E64096 /* ZCCoreTextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 42395ED6C338D1F0111188ECCAC326C9 /* ZCCoreTextLayout.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - B124B4A71E088BA9000F1DF2 /* CAMediaTimingFunction+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B124B4A61E088BA9000F1DF2 /* CAMediaTimingFunction+Hero.swift */; }; + AB38B3EC8E11AAC3E79CCA2055C602DA /* ZCAnimatedLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A315AB85F1FD18E70BB9A101498D6E9 /* ZCAnimatedLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; B26038F91C7C4CC322D7F25C5D16FE9E /* ChameleonConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0164C4141F6109C4519447CEFDCDA6FB /* ChameleonConstants.m */; }; B4EA53699AA19822E674188743266B2B /* ChameleonMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 25530C1B2B3BCE67679DE2C38D8C8C3F /* ChameleonMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9A618F6A32F37FCCB911669072ADAD1 /* HeroDefaultAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009813FF767BFAE2357DA856652EEEE7 /* HeroDefaultAnimator.swift */; }; - BAFF28FB3D799010C983A03EE434F262 /* HeroPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D2EF3BAF433FDE6F713EC6723EF776C /* HeroPlugin.swift */; }; - BBACBB79A5CCE24F3BF31BEFDADD80DA /* ViewToViewPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF1CB44B1532BE35326641A01B38EA5 /* ViewToViewPreprocessor.swift */; }; + B6634AF86577EB63DA3CBEFE68A13573 /* ZCCoreTextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 42395ED6C338D1F0111188ECCAC326C9 /* ZCCoreTextLayout.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BA46D138629B5BEEF5C8CA4F5DA78B6D /* ZCRevealLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C1E8493C19D7AB4A77A873BC29D979F /* ZCRevealLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; BFA97401155C4E14893D9AA1E0D1EC80 /* UINavigationController+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 853F453005035573EC726155007906F9 /* UINavigationController+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; C3C8BB46937DD0BBC7FBE25E298052F8 /* UIAppearance+Swift.m in Sources */ = {isa = PBXBuildFile; fileRef = 309488F2CA6890AD49370D9E0EA62F8B /* UIAppearance+Swift.m */; }; C78AC9DF55C43B62D6851B2F30ADFE0F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9584A1F2D6F127A85944AD33BEA278D /* QuartzCore.framework */; }; - CA19F7D3C407140A4858D71B94EDC523 /* Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ACA52D8C3BB32DE76F65BE7A770A52F /* Hero.swift */; }; - D195064586817A705F5068D1D98BB120 /* ZCFlyinLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 10C119B874C2B68D6B332014EFA18131 /* ZCFlyinLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - D5E5ADEB4403273789A474E1C63E3B40 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; + D108846C0C9F02A453FF05BFE72C4FB9 /* ZCEasingUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F249051A59B13F862BA33EFFEB0367 /* ZCEasingUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; D5FAFC3C89B922BB4FFB6C0516EAF3D2 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29AA6E4C10206C3EE9ADFA1D694F1143 /* CoreGraphics.framework */; }; + D8FB33073243D5B9EABA87B6CAF63577 /* ZCDashLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = E61802497B0C82082771903678DD88F1 /* ZCDashLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; DB5FB611FB6EBF2F2BA7B78FE0CED535 /* UIColor+Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CBEE5386B8B380653B94BEEC01149D8 /* UIColor+Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1022C5C4A3C042F96C462A4B3E8EA21 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */; }; - E20A79E671B33606667295F34A119208 /* ZCRevealLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = A342FA1E8FD5F3163DC753B8A3400FAF /* ZCRevealLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBACA9BDB5867F71DBA6D4B76672E14B /* ZCThrownLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B9D36B2F41D2F7FDA079D725D8A9EF5 /* ZCThrownLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E4CE7C740C5F7853AF4A1BD5A538809A /* ZCTransparencyLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2912F6D7A7878B823E4E2C679EBED4BE /* ZCTransparencyLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; E7FA38FEAF957D69E92153FBAFB3DB40 /* Chameleon_.m in Sources */ = {isa = PBXBuildFile; fileRef = FEEBB0283FFCA5CD75F9CC2C7C125F5B /* Chameleon_.m */; }; - E98CB055BAE498D0F4FF48EC17BD49BD /* ZCFocusLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = BD543212607D8A21C5EEB4811E15E12B /* ZCFocusLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB192542076198CC9C636DDFCCF28D64 /* Hero-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AAB5D7770B86F43276F1BBFAE8E0B8E7 /* Hero-dummy.m */; }; + EA8ED001B68683130409A4E5F037CB41 /* ZCRevealLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = A342FA1E8FD5F3163DC753B8A3400FAF /* ZCRevealLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; EC786817C5CEBCD51A4C9EC9B883ED6F /* ChameleonEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = F61DEE17DAC8E639AEAA3D2E97C85C8F /* ChameleonEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; ED4DBD1E13182AA813DC1237FA6E3A42 /* Chameleon.h in Headers */ = {isa = PBXBuildFile; fileRef = ACC1D3350CBFB86A70E6108AA2C11DBD /* Chameleon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE4A11526BB34938AF78ACAC8287EED6 /* ZCSpinLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C580D132560EC3A7BBD0CBD16755E73 /* ZCSpinLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; - F34ADE4638ABE9E687A005E1B4CCD2A0 /* HeroDebugPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7260E6E6BC54C60E14338D44CDBA0DD9 /* HeroDebugPlugin.swift */; }; - F7F904D5F0888B42AC9D326693754CE0 /* Pods-HeroExamples-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC559FE89B18815721B5D20117D33F86 /* Pods-HeroExamples-dummy.m */; }; - F8B85EC3663D1642EDB609E95E8D6581 /* ZCAnimatedLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AE5CC8638DDC6FA930E5F3F2249945F /* ZCAnimatedLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F19137375616A184266131B0D97BE794 /* ZCFallLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D2A3D8C3021B3B3CC33CC0E925CD1ED /* ZCFallLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F4E466CB3B33261D3255B35C06C8DC95 /* ZCShapeshiftLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 466CFD0F91016EAA8F1AC59F4CB3C975 /* ZCShapeshiftLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F6D9178D7BBB6675E4DDDAE9DD87D325 /* ZCAnimatedLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E36AE8CE3D808B3D2BBB747744D39E5 /* ZCAnimatedLabel-dummy.m */; }; FB82C1293D7DDE0D3E2E6D68CDD5852C /* UILabel+Chameleon.m in Sources */ = {isa = PBXBuildFile; fileRef = 502E8EB2D178C4E9DB21BDFAFADB9130 /* UILabel+Chameleon.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 245352CA6AFF23A62ECC1E35BB9694B8 /* PBXContainerItemProxy */ = { + 09A396E97BB7A660275B043DDC407900 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 76BD4592010354D6C23D6ECCA20D83A8; - remoteInfo = ChameleonFramework; - }; - 7F4216B15DEB10177912225474EB288A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = B436B44CA163743182E74F03DB0B4F59; + remoteGlobalIDString = 490E5E24AF399729C67683ABA7BCA188; remoteInfo = ZCAnimatedLabel; }; - DE1EA60457BEF29998CDCB4A2EF25F52 /* PBXContainerItemProxy */ = { + 77ABD4CB4FB134B9A8C14A7B7F0C50CF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 34CAC580BFE6FB5B89353906FD6A8BDB; - remoteInfo = Hero; + remoteGlobalIDString = 76BD4592010354D6C23D6ECCA20D83A8; + remoteInfo = ChameleonFramework; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 000FFED8AE29139132224FB47C7369A3 /* ChameleonFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 009813FF767BFAE2357DA856652EEEE7 /* HeroDefaultAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroDefaultAnimator.swift; sourceTree = ""; }; 0164C4141F6109C4519447CEFDCDA6FB /* ChameleonConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ChameleonConstants.m; path = "Pod/Classes/Objective-C/ChameleonConstants.m"; sourceTree = ""; }; - 04B4B451E46FE346E8A820607BBA2324 /* Hero.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Hero.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 05D5FC5FA136B6E87C98475AFD6BA61F /* ZCAnimatedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ZCAnimatedLabel.framework; path = ZCAnimatedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 09B6FDEB03B25BF401BC87859B831B3E /* ZCDuangLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCDuangLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCDuangLabel.m; sourceTree = ""; }; 10C119B874C2B68D6B332014EFA18131 /* ZCFlyinLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCFlyinLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFlyinLabel.m; sourceTree = ""; }; 12E6564229CDFA3EDECF821FC24BC2FB /* ZCCoreTextLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCCoreTextLayout.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCCoreTextLayout.h; sourceTree = ""; }; - 13B1997AE73788E0828CFE4A1981F4D2 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ChameleonFramework.modulemap; sourceTree = ""; }; + 13B1997AE73788E0828CFE4A1981F4D2 /* ChameleonFramework.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = ChameleonFramework.modulemap; sourceTree = ""; }; 149058506A3D7F88DBFFA52312D9CF87 /* ZCDuangLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCDuangLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCDuangLabel.h; sourceTree = ""; }; 199950B620AFA6023EECBB662A39C21C /* UILabel+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UILabel+Chameleon.h"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.h"; sourceTree = ""; }; 1B291C4D1C35D63E1383F43604CC8C2F /* ZCFallLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCFallLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFallLabel.h; sourceTree = ""; }; @@ -139,85 +107,63 @@ 249396FDAC8EA68585107165DBA9CB04 /* Pods-HeroExamples-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-HeroExamples-resources.sh"; sourceTree = ""; }; 25530C1B2B3BCE67679DE2C38D8C8C3F /* ChameleonMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonMacros.h; path = "Pod/Classes/Objective-C/ChameleonMacros.h"; sourceTree = ""; }; 25E1EDDCE040959CC53590068A28370F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 25E81D1F1DA468EA8BCC84BFA1C7AFE8 /* Hero.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Hero.xcconfig; sourceTree = ""; }; 2912F6D7A7878B823E4E2C679EBED4BE /* ZCTransparencyLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCTransparencyLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCTransparencyLabel.m; sourceTree = ""; }; 29AA6E4C10206C3EE9ADFA1D694F1143 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; 29ED22738A029D4CFD71910614E10500 /* ChameleonShorthand.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChameleonShorthand.swift; path = Pod/Classes/Swift/ChameleonShorthand.swift; sourceTree = ""; }; - 2AC1EA5EC1766240ED7A07183EE68CDC /* Hero-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Hero-prefix.pch"; sourceTree = ""; }; 2D08E6EF907DC1A59FDCEF6049D41EBB /* Pods-HeroExamples-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-HeroExamples-acknowledgements.plist"; sourceTree = ""; }; 2E05326F7CD25B55ABD6DD7695EB6391 /* NSArray+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+Chameleon.h"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.h"; sourceTree = ""; }; 303FC65376AD824AF269B17A715AB4D0 /* UIViewController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+Chameleon.h"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.h"; sourceTree = ""; }; 309488F2CA6890AD49370D9E0EA62F8B /* UIAppearance+Swift.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAppearance+Swift.m"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.m"; sourceTree = ""; }; 30A48DB1C8052F1B842C0010D6FE3264 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 32920F1C14AABE3E6324EB718DB4F22A /* SourceIDPreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SourceIDPreprocessor.swift; sourceTree = ""; }; 3896DF0A366E247168F1BD9BF0FF7C43 /* ChameleonFramework-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-prefix.pch"; sourceTree = ""; }; 3A092FCC9003B561AE8D5B50EE5A0AFC /* UIButton+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+Chameleon.h"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.h"; sourceTree = ""; }; 3A315AB85F1FD18E70BB9A101498D6E9 /* ZCAnimatedLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCAnimatedLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCAnimatedLabel.m; sourceTree = ""; }; 42395ED6C338D1F0111188ECCAC326C9 /* ZCCoreTextLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCCoreTextLayout.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCCoreTextLayout.m; sourceTree = ""; }; - 42B1EBC88025BDEAEE57374191E3343F /* Pods_HeroExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 466CFD0F91016EAA8F1AC59F4CB3C975 /* ZCShapeshiftLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCShapeshiftLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCShapeshiftLabel.h; sourceTree = ""; }; 4AE5CC8638DDC6FA930E5F3F2249945F /* ZCAnimatedLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZCAnimatedLabel-umbrella.h"; sourceTree = ""; }; 4AFCDC269C1B04B7950F108514B9A002 /* UIColor+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.m"; sourceTree = ""; }; 4E36AE8CE3D808B3D2BBB747744D39E5 /* ZCAnimatedLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZCAnimatedLabel-dummy.m"; sourceTree = ""; }; - 4EA92FDB8DCF56BE10918981146E71D9 /* UIKit+Hero.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIKit+Hero.swift"; sourceTree = ""; }; 502E8EB2D178C4E9DB21BDFAFADB9130 /* UILabel+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UILabel+Chameleon.m"; path = "Pod/Classes/Objective-C/UILabel+Chameleon.m"; sourceTree = ""; }; 517F35FE8BE6A3CBA4B88B1520C74C06 /* Pods-HeroExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HeroExamples.debug.xcconfig"; sourceTree = ""; }; - 53F7BF54988B62579662B3EBF1570192 /* DispatchQueue+Hero.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "DispatchQueue+Hero.swift"; sourceTree = ""; }; + 55CBDB5ADC53AD92DC1BD1FA43BDD7F1 /* ChameleonFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ChameleonFramework.framework; path = ChameleonFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 56565CE08ADACD79CEA130925F0CDE8F /* UIColor+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIColor+ChameleonPrivate.h"; sourceTree = ""; }; 5B9D36B2F41D2F7FDA079D725D8A9EF5 /* ZCThrownLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCThrownLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCThrownLabel.m; sourceTree = ""; }; 684B3BBEA8FE40B07E0734FFA0F1E808 /* UIColor+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Chameleon.m"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.m"; sourceTree = ""; }; - 68F0DA52F9FD4863B90F36540967E1AC /* HeroContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroContext.swift; sourceTree = ""; }; 6BA841517A854B30F7AC8B896BE29F62 /* ChameleonConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonConstants.h; path = "Pod/Classes/Objective-C/ChameleonConstants.h"; sourceTree = ""; }; 6D2A3D8C3021B3B3CC33CC0E925CD1ED /* ZCFallLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCFallLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFallLabel.m; sourceTree = ""; }; 6FB43588D8877F1F909F697476508F4F /* Pods-HeroExamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-HeroExamples.release.xcconfig"; sourceTree = ""; }; - 7260E6E6BC54C60E14338D44CDBA0DD9 /* HeroDebugPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroDebugPlugin.swift; sourceTree = ""; }; 755FAE73277FCB766461DDF0A4841EC5 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/CoreText.framework; sourceTree = DEVELOPER_DIR; }; 7D0FBC58AD637F7B0A7A1E4E5DF090DB /* ChameleonFramework-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ChameleonFramework-dummy.m"; sourceTree = ""; }; - 7DDFB6D7D1D131792D16BCA568C70E07 /* ClearPreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClearPreprocessor.swift; sourceTree = ""; }; 7FE69F7F97686AC4F7635939FA46FD4E /* ZCSpinLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCSpinLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCSpinLabel.h; sourceTree = ""; }; 806DCB81FA89BA89C35578AC443BC5FC /* ZCEasingUtil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCEasingUtil.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCEasingUtil.m; sourceTree = ""; }; 841CB32EB317DF862FADB4C24E3C165D /* NSArray+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+Chameleon.m"; path = "Pod/Classes/Objective-C/NSArray+Chameleon.m"; sourceTree = ""; }; 853F453005035573EC726155007906F9 /* UINavigationController+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Chameleon.h"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.h"; sourceTree = ""; }; 85FDCAA1EADCFD367E1698CDE25DE0DF /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 8912F16BF2FEA16A2CE0D547636D8650 /* UIAppearance+Swift.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAppearance+Swift.h"; path = "Pod/Classes/Objective-C/UIAppearance+Swift.h"; sourceTree = ""; }; - 8A91722A49C98F39B7953A0624D18A0D /* CascadePreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CascadePreprocessor.swift; sourceTree = ""; }; - 8ACA52D8C3BB32DE76F65BE7A770A52F /* Hero.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Hero.swift; sourceTree = ""; }; 8C1E8493C19D7AB4A77A873BC29D979F /* ZCRevealLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCRevealLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCRevealLabel.m; sourceTree = ""; }; - 90410D05047B40B99B553954960BF82B /* HeroTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroTypes.swift; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 945885D650D2539467D95A8A5338C137 /* ZCAnimatedLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCAnimatedLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCAnimatedLabel.h; sourceTree = ""; }; - 96F2151CA6ADD851CD6FFD62A544FFBF /* ZCAnimatedLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZCAnimatedLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 986CEB14912C0A5CC97835230B574521 /* Hero.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Hero.modulemap; sourceTree = ""; }; 98A7FA881BD2F0AAE87C7A1383923B1E /* UIImage+ChameleonPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ChameleonPrivate.h"; path = "Pod/Classes/Objective-C/UIImage+ChameleonPrivate.h"; sourceTree = ""; }; - 9ABC44921DBAFE81EDBF72413F25CA66 /* HeroDebugView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroDebugView.swift; sourceTree = ""; }; 9C580D132560EC3A7BBD0CBD16755E73 /* ZCSpinLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCSpinLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCSpinLabel.m; sourceTree = ""; }; 9CBEE5386B8B380653B94BEEC01149D8 /* UIColor+Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+Chameleon.h"; path = "Pod/Classes/Objective-C/UIColor+Chameleon.h"; sourceTree = ""; }; - 9D2EF3BAF433FDE6F713EC6723EF776C /* HeroPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HeroPlugin.swift; sourceTree = ""; }; A0B3C6ED9393F5E55D698B677D8CC5F4 /* ZCShapeshiftLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCShapeshiftLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCShapeshiftLabel.m; sourceTree = ""; }; A32E96E330F1BE794E0ACA67C394BA33 /* ZCDashLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCDashLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCDashLabel.m; sourceTree = ""; }; A342FA1E8FD5F3163DC753B8A3400FAF /* ZCRevealLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCRevealLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCRevealLabel.h; sourceTree = ""; }; - A37850B31E0B60FC002854A8 /* HeroDefaultAnimatorViewContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeroDefaultAnimatorViewContext.swift; sourceTree = ""; }; - A37850B51E0B619F002854A8 /* HeroDefaultAnimatorViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeroDefaultAnimatorViewState.swift; sourceTree = ""; }; - A37850B81E0B6487002854A8 /* CALayer+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CALayer+Hero.swift"; sourceTree = ""; }; A5484756A421B1C208D66F6701E1925E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A860B4A3090B5CB38F4D6EE2285600A1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A9584A1F2D6F127A85944AD33BEA278D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - A95F120A3DF8F7A911658AE7298E614B /* Hero-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Hero-umbrella.h"; sourceTree = ""; }; - AAB5D7770B86F43276F1BBFAE8E0B8E7 /* Hero-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Hero-dummy.m"; sourceTree = ""; }; AC11BE14A0EC12C71F91EE5621D4D7FB /* UIView+ChameleonPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+ChameleonPrivate.m"; path = "Pod/Classes/Objective-C/UIView+ChameleonPrivate.m"; sourceTree = ""; }; AC559FE89B18815721B5D20117D33F86 /* Pods-HeroExamples-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-HeroExamples-dummy.m"; sourceTree = ""; }; ACC1D3350CBFB86A70E6108AA2C11DBD /* Chameleon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Chameleon.h; path = "Pod/Classes/Objective-C/Chameleon.h"; sourceTree = ""; }; + AF5C12431F9BD2452D57C998BC489B87 /* Pods_HeroExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_HeroExamples.framework; path = "Pods-HeroExamples.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; AFA3B00CC9CD7B05A1FCFA3B76888F46 /* ZCFocusLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ZCFocusLabel.m; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFocusLabel.m; sourceTree = ""; }; - B124B4A61E088BA9000F1DF2 /* CAMediaTimingFunction+Hero.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CAMediaTimingFunction+Hero.swift"; sourceTree = ""; }; B306F35D55098B8275E41406708680C3 /* ZCFlyinLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCFlyinLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFlyinLabel.h; sourceTree = ""; }; B3B9625BB8675FB84F57FAEC62E860DF /* UIViewController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+Chameleon.m"; path = "Pod/Classes/Objective-C/UIViewController+Chameleon.m"; sourceTree = ""; }; B7845278D818AA0933253B32BF79AB28 /* ZCAnimatedLabel.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZCAnimatedLabel.xcconfig; sourceTree = ""; }; BA76828CEBD20FDAA51A6DEB482396DF /* ZCAnimatedLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZCAnimatedLabel-prefix.pch"; sourceTree = ""; }; - BA962E8A0090A3F508472C2A41382DB4 /* UIKit+HeroModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIKit+HeroModifier.swift"; sourceTree = ""; }; BACBC4D8BC433BCFBAE3E48B295C5936 /* ZCTransparencyLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCTransparencyLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCTransparencyLabel.h; sourceTree = ""; }; BD543212607D8A21C5EEB4811E15E12B /* ZCFocusLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCFocusLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCFocusLabel.h; sourceTree = ""; }; CC2CFD70B28BCDBE2960C9BB229C1063 /* Pods-HeroExamples-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-HeroExamples-frameworks.sh"; sourceTree = ""; }; - CE24B0464741DFDE4ADE1C4012D723D6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D163A5D38971FE50288730B3F9E7853E /* Pods-HeroExamples-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-HeroExamples-acknowledgements.markdown"; sourceTree = ""; }; D4AF34292621395D6290871F5FB22E18 /* Pods-HeroExamples-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-HeroExamples-umbrella.h"; sourceTree = ""; }; DF7172E1472CD5DF0E3B9AA1D3A86108 /* ZCThrownLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCThrownLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCThrownLabel.h; sourceTree = ""; }; @@ -227,40 +173,29 @@ E4F249051A59B13F862BA33EFFEB0367 /* ZCEasingUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCEasingUtil.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCEasingUtil.h; sourceTree = ""; }; E61802497B0C82082771903678DD88F1 /* ZCDashLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZCDashLabel.h; path = ZCAnimatedLabel/ZCAnimatedLabel/ZCDashLabel.h; sourceTree = ""; }; E730B04E8BAA5CA99E146F2D4FB86682 /* UIButton+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+Chameleon.m"; path = "Pod/Classes/Objective-C/UIButton+Chameleon.m"; sourceTree = ""; }; - EAF1CB44B1532BE35326641A01B38EA5 /* ViewToViewPreprocessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ViewToViewPreprocessor.swift; sourceTree = ""; }; - EC8209DC44A71100F992B0E93FC1DCED /* Pods-HeroExamples.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-HeroExamples.modulemap"; sourceTree = ""; }; - EE32F908C4EAEBC2AC2FBE19CE93A06F /* ZCAnimatedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = ZCAnimatedLabel.modulemap; sourceTree = ""; }; + EC8209DC44A71100F992B0E93FC1DCED /* Pods-HeroExamples.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-HeroExamples.modulemap"; sourceTree = ""; }; + EE32F908C4EAEBC2AC2FBE19CE93A06F /* ZCAnimatedLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = ZCAnimatedLabel.modulemap; sourceTree = ""; }; F1C22F078BD061D6FC9619141BDA695E /* UINavigationController+Chameleon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Chameleon.m"; path = "Pod/Classes/Objective-C/UINavigationController+Chameleon.m"; sourceTree = ""; }; F421C1312F9063105A65D64D8C5BE410 /* ChameleonFramework-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ChameleonFramework-umbrella.h"; sourceTree = ""; }; F61DEE17DAC8E639AEAA3D2E97C85C8F /* ChameleonEnums.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ChameleonEnums.h; path = "Pod/Classes/Objective-C/ChameleonEnums.h"; sourceTree = ""; }; - F9DF90DEF699C530738BF36F7EC08F4A /* CG+Hero.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CG+Hero.swift"; sourceTree = ""; }; FEEBB0283FFCA5CD75F9CC2C7C125F5B /* Chameleon_.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Chameleon_.m; path = "Pod/Classes/Objective-C/Chameleon_.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 6166ADA80389AD66671E542588B0200F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 192A0E280366B70ECE34DF53AB848141 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7D3CA10DC6DF3B63540C238462F12A0A /* Frameworks */ = { + 56918A26D3EDEB26C2F9B122E03E4A9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3A2A6EF6E339DA1B12A50A2B0CC24B13 /* CoreText.framework in Frameworks */, - D5E5ADEB4403273789A474E1C63E3B40 /* Foundation.framework in Frameworks */, + 0FAA11918BC2377E39A877BC142D1EEF /* CoreText.framework in Frameworks */, + 7339345D8DDEF37E9F9F3BE9BAD6307B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 820E8595182530888B7482019009B2E3 /* Frameworks */ = { + 6C53D9EC51356AF2D5EF37FD114A9C08 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E1022C5C4A3C042F96C462A4B3E8EA21 /* Foundation.framework in Frameworks */, - 5FBDE142FFC1B2E3A8590427B8F1CBA9 /* UIKit.framework in Frameworks */, + 0B60DAA4D34F3C74E1142883A12A8CC2 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -295,6 +230,16 @@ name = Frameworks; sourceTree = ""; }; + 23024C222F96A4C7A30040F108850DAB /* Products */ = { + isa = PBXGroup; + children = ( + 55CBDB5ADC53AD92DC1BD1FA43BDD7F1 /* ChameleonFramework.framework */, + AF5C12431F9BD2452D57C998BC489B87 /* Pods_HeroExamples.framework */, + 05D5FC5FA136B6E87C98475AFD6BA61F /* ZCAnimatedLabel.framework */, + ); + name = Products; + sourceTree = ""; + }; 26D4D8D146F8FF003C9F396BE371507C /* Support Files */ = { isa = PBXGroup; children = ( @@ -309,16 +254,6 @@ path = "../Target Support Files/ZCAnimatedLabel"; sourceTree = ""; }; - 3148AE0190732B0ED0D4A96EC91E2B71 /* Hero */ = { - isa = PBXGroup; - children = ( - B80688D35CCC8E586B9252714D22B0F5 /* Hero */, - A36711A225638A61BA6B6D13C26773F8 /* Support Files */, - ); - name = Hero; - path = ../..; - sourceTree = ""; - }; 5A368960F16AE172AEBEFA66355F1949 /* ZCAnimatedLabel */ = { isa = PBXGroup; children = ( @@ -350,28 +285,17 @@ 2912F6D7A7878B823E4E2C679EBED4BE /* ZCTransparencyLabel.m */, 26D4D8D146F8FF003C9F396BE371507C /* Support Files */, ); + name = ZCAnimatedLabel; path = ZCAnimatedLabel; sourceTree = ""; }; - 7BADC0D894845F24A1D8CEB9B900AF72 /* Products */ = { - isa = PBXGroup; - children = ( - 000FFED8AE29139132224FB47C7369A3 /* ChameleonFramework.framework */, - 04B4B451E46FE346E8A820607BBA2324 /* Hero.framework */, - 42B1EBC88025BDEAEE57374191E3343F /* Pods_HeroExamples.framework */, - 96F2151CA6ADD851CD6FFD62A544FFBF /* ZCAnimatedLabel.framework */, - ); - name = Products; - sourceTree = ""; - }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 96986CABABC609D6641C2A096D230EBB /* Development Pods */, 20B56609144CE204DFA8221F742B2D76 /* Frameworks */, 015645E6E1E42B85671CCD2A977F63CA /* Pods */, - 7BADC0D894845F24A1D8CEB9B900AF72 /* Products */, + 23024C222F96A4C7A30040F108850DAB /* Products */, FEEC84FF8B3525185BE4BC0AC296A884 /* Targets Support Files */, ); sourceTree = ""; @@ -410,71 +334,6 @@ name = Default; sourceTree = ""; }; - 96986CABABC609D6641C2A096D230EBB /* Development Pods */ = { - isa = PBXGroup; - children = ( - 3148AE0190732B0ED0D4A96EC91E2B71 /* Hero */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - A36711A225638A61BA6B6D13C26773F8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 986CEB14912C0A5CC97835230B574521 /* Hero.modulemap */, - 25E81D1F1DA468EA8BCC84BFA1C7AFE8 /* Hero.xcconfig */, - AAB5D7770B86F43276F1BBFAE8E0B8E7 /* Hero-dummy.m */, - 2AC1EA5EC1766240ED7A07183EE68CDC /* Hero-prefix.pch */, - A95F120A3DF8F7A911658AE7298E614B /* Hero-umbrella.h */, - CE24B0464741DFDE4ADE1C4012D723D6 /* Info.plist */, - ); - name = "Support Files"; - path = "Examples/Pods/Target Support Files/Hero"; - sourceTree = ""; - }; - A378508E1E083BC6002854A8 /* Preprocessors */ = { - isa = PBXGroup; - children = ( - 8A91722A49C98F39B7953A0624D18A0D /* CascadePreprocessor.swift */, - 7DDFB6D7D1D131792D16BCA568C70E07 /* ClearPreprocessor.swift */, - 32920F1C14AABE3E6324EB718DB4F22A /* SourceIDPreprocessor.swift */, - EAF1CB44B1532BE35326641A01B38EA5 /* ViewToViewPreprocessor.swift */, - ); - name = Preprocessors; - sourceTree = ""; - }; - A378508F1E083BD3002854A8 /* Extensions */ = { - isa = PBXGroup; - children = ( - F9DF90DEF699C530738BF36F7EC08F4A /* CG+Hero.swift */, - A37850B81E0B6487002854A8 /* CALayer+Hero.swift */, - B124B4A61E088BA9000F1DF2 /* CAMediaTimingFunction+Hero.swift */, - 53F7BF54988B62579662B3EBF1570192 /* DispatchQueue+Hero.swift */, - 4EA92FDB8DCF56BE10918981146E71D9 /* UIKit+Hero.swift */, - BA962E8A0090A3F508472C2A41382DB4 /* UIKit+HeroModifier.swift */, - ); - name = Extensions; - sourceTree = ""; - }; - A37850901E083BDB002854A8 /* DebugPlugin */ = { - isa = PBXGroup; - children = ( - 7260E6E6BC54C60E14338D44CDBA0DD9 /* HeroDebugPlugin.swift */, - 9ABC44921DBAFE81EDBF72413F25CA66 /* HeroDebugView.swift */, - ); - name = DebugPlugin; - sourceTree = ""; - }; - A37850B71E0B61BD002854A8 /* DefaultAnimator */ = { - isa = PBXGroup; - children = ( - 009813FF767BFAE2357DA856652EEEE7 /* HeroDefaultAnimator.swift */, - A37850B31E0B60FC002854A8 /* HeroDefaultAnimatorViewContext.swift */, - A37850B51E0B619F002854A8 /* HeroDefaultAnimatorViewState.swift */, - ); - name = DefaultAnimator; - sourceTree = ""; - }; A59C55F6013CB7643F4B4030B09B2D1E /* Swift */ = { isa = PBXGroup; children = ( @@ -497,21 +356,6 @@ path = "../Target Support Files/ChameleonFramework"; sourceTree = ""; }; - B80688D35CCC8E586B9252714D22B0F5 /* Hero */ = { - isa = PBXGroup; - children = ( - 8ACA52D8C3BB32DE76F65BE7A770A52F /* Hero.swift */, - 68F0DA52F9FD4863B90F36540967E1AC /* HeroContext.swift */, - 90410D05047B40B99B553954960BF82B /* HeroTypes.swift */, - 9D2EF3BAF433FDE6F713EC6723EF776C /* HeroPlugin.swift */, - A37850B71E0B61BD002854A8 /* DefaultAnimator */, - A378508E1E083BC6002854A8 /* Preprocessors */, - A37850901E083BDB002854A8 /* DebugPlugin */, - A378508F1E083BD3002854A8 /* Extensions */, - ); - path = Hero; - sourceTree = ""; - }; CFBD93DDE9A559F9CCDAA6802C5A361F /* ChameleonFramework */ = { isa = PBXGroup; children = ( @@ -519,6 +363,7 @@ B1A39966BD25CFF84C973E5EFF673694 /* Support Files */, A59C55F6013CB7643F4B4030B09B2D1E /* Swift */, ); + name = ChameleonFramework; path = ChameleonFramework; sourceTree = ""; }; @@ -563,19 +408,11 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 442643DF5DCE8AD74B0A77071213873D /* Headers */ = { + 2B7A31EF26BDDE58C8F275653AE7F5DE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 1BF55DFD1990F68F268B96985726FD34 /* Pods-HeroExamples-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 70740454BE247787CF85332D5BB4EC09 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BCC9986918F1504E617CF4EB6650D46 /* Hero-umbrella.h in Headers */, + 9624DC1CBD9DA4A784590FFC193673FA /* Pods-HeroExamples-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -602,65 +439,45 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B69ECC60F9FDF01B3D03B7E968E029FE /* Headers */ = { + CEBB4DB1B1AAD575520A7EA37BA03085 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F8B85EC3663D1642EDB609E95E8D6581 /* ZCAnimatedLabel-umbrella.h in Headers */, - 84C802C36B8B0B0B7914F21C63BFA45E /* ZCAnimatedLabel.h in Headers */, - 7EC18B2353DEF54BB916A4DCCA03F524 /* ZCCoreTextLayout.h in Headers */, - ACF084933B3CBF65307BBC8484191FA0 /* ZCDashLabel.h in Headers */, - 8FDC07FBCD8EF555111482A3698ED4F7 /* ZCDuangLabel.h in Headers */, - 61288CA5CDDA4889540D904296FC9BF1 /* ZCEasingUtil.h in Headers */, - A918B9CE3AFC7CFE22502D0EDF36E827 /* ZCFallLabel.h in Headers */, - AB80F4B71FE40B7325FE19FE7920BE1A /* ZCFlyinLabel.h in Headers */, - E98CB055BAE498D0F4FF48EC17BD49BD /* ZCFocusLabel.h in Headers */, - E20A79E671B33606667295F34A119208 /* ZCRevealLabel.h in Headers */, - 10786E27C0CE4E3885C4F18686CF6300 /* ZCShapeshiftLabel.h in Headers */, - 31355E6EC81B820199C659E233B4E9E8 /* ZCSpinLabel.h in Headers */, - 7FBF3BEEC3253A81E1E145C76C89B83A /* ZCThrownLabel.h in Headers */, - 598E88F95330D05C0D644897CEF4B469 /* ZCTransparencyLabel.h in Headers */, + 1E162B130F202BB758F70ABF7A79FA55 /* ZCAnimatedLabel-umbrella.h in Headers */, + 40183767C9BA63FB5F28CFD448568CF7 /* ZCAnimatedLabel.h in Headers */, + 7CA7C05EB721D0F876A6DAE12821675C /* ZCCoreTextLayout.h in Headers */, + D8FB33073243D5B9EABA87B6CAF63577 /* ZCDashLabel.h in Headers */, + 2F7F43A4296932FB55CBA489E4D0508C /* ZCDuangLabel.h in Headers */, + D108846C0C9F02A453FF05BFE72C4FB9 /* ZCEasingUtil.h in Headers */, + 4CC5AE1E0D4700767EC56DF7B8E2AE4D /* ZCFallLabel.h in Headers */, + 3B373CC3F8D9135D5422F0E1092CC6C9 /* ZCFlyinLabel.h in Headers */, + 75B759DB544D317A6FC88F4FD62AB5E2 /* ZCFocusLabel.h in Headers */, + EA8ED001B68683130409A4E5F037CB41 /* ZCRevealLabel.h in Headers */, + F4E466CB3B33261D3255B35C06C8DC95 /* ZCShapeshiftLabel.h in Headers */, + 6AA9E69CCB146EC7728EAF46A3A713AC /* ZCSpinLabel.h in Headers */, + 784D05978A3F371754437833B6E3B223 /* ZCThrownLabel.h in Headers */, + 9405A75288E8E96DACC18A6EEC420432 /* ZCTransparencyLabel.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 34CAC580BFE6FB5B89353906FD6A8BDB /* Hero */ = { - isa = PBXNativeTarget; - buildConfigurationList = 102BC29D729DCF1BBE09F7B77976A8DD /* Build configuration list for PBXNativeTarget "Hero" */; - buildPhases = ( - 6271C35C5330F1342A0AAABCAEEDC003 /* Sources */, - 820E8595182530888B7482019009B2E3 /* Frameworks */, - 70740454BE247787CF85332D5BB4EC09 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Hero; - productName = Hero; - productReference = 04B4B451E46FE346E8A820607BBA2324 /* Hero.framework */; - productType = "com.apple.product-type.framework"; - }; - 73DBEE8B40A64A4E3B091748C42DD4F7 /* Pods-HeroExamples */ = { + 490E5E24AF399729C67683ABA7BCA188 /* ZCAnimatedLabel */ = { isa = PBXNativeTarget; - buildConfigurationList = 937EE204DDEDB24B8E417B1629347495 /* Build configuration list for PBXNativeTarget "Pods-HeroExamples" */; + buildConfigurationList = 8D934E445C26631D39ED954D1595D699 /* Build configuration list for PBXNativeTarget "ZCAnimatedLabel" */; buildPhases = ( - 548AB60370927E20C25102D9FD05845F /* Sources */, - 6166ADA80389AD66671E542588B0200F /* Frameworks */, - 442643DF5DCE8AD74B0A77071213873D /* Headers */, + E01509A7080DEB56AB53EBE5D3C115B4 /* Sources */, + 56918A26D3EDEB26C2F9B122E03E4A9A /* Frameworks */, + CEBB4DB1B1AAD575520A7EA37BA03085 /* Headers */, ); buildRules = ( ); dependencies = ( - DE3B1B4D9EF473934BBB19396693E09C /* PBXTargetDependency */, - 2EABA1CF962E9506BCD6B12C4067C724 /* PBXTargetDependency */, - FBA54CBC45C0F0CD56172B44E55D7319 /* PBXTargetDependency */, ); - name = "Pods-HeroExamples"; - productName = "Pods-HeroExamples"; - productReference = 42B1EBC88025BDEAEE57374191E3343F /* Pods_HeroExamples.framework */; + name = ZCAnimatedLabel; + productName = ZCAnimatedLabel; + productReference = 05D5FC5FA136B6E87C98475AFD6BA61F /* ZCAnimatedLabel.framework */; productType = "com.apple.product-type.framework"; }; 76BD4592010354D6C23D6ECCA20D83A8 /* ChameleonFramework */ = { @@ -677,24 +494,26 @@ ); name = ChameleonFramework; productName = ChameleonFramework; - productReference = 000FFED8AE29139132224FB47C7369A3 /* ChameleonFramework.framework */; + productReference = 55CBDB5ADC53AD92DC1BD1FA43BDD7F1 /* ChameleonFramework.framework */; productType = "com.apple.product-type.framework"; }; - B436B44CA163743182E74F03DB0B4F59 /* ZCAnimatedLabel */ = { + 7BE367E8CC6B63FE94C2292EBF18B4D9 /* Pods-HeroExamples */ = { isa = PBXNativeTarget; - buildConfigurationList = AC6491958430F1070A2A30EDFC33FEDD /* Build configuration list for PBXNativeTarget "ZCAnimatedLabel" */; + buildConfigurationList = 86E278FFB0C25A792DBD0B3BD9B1F7AB /* Build configuration list for PBXNativeTarget "Pods-HeroExamples" */; buildPhases = ( - 5B618D295F2EF5EBCA49DB555E8C57B7 /* Sources */, - 7D3CA10DC6DF3B63540C238462F12A0A /* Frameworks */, - B69ECC60F9FDF01B3D03B7E968E029FE /* Headers */, + 2C8DA10629A6E8A5ACDB8F3FF6724704 /* Sources */, + 6C53D9EC51356AF2D5EF37FD114A9C08 /* Frameworks */, + 2B7A31EF26BDDE58C8F275653AE7F5DE /* Headers */, ); buildRules = ( ); dependencies = ( + F723CE06F852D2E359BB6B2964BA8679 /* PBXTargetDependency */, + 5F11CE395EB251087A84A872542D41CB /* PBXTargetDependency */, ); - name = ZCAnimatedLabel; - productName = ZCAnimatedLabel; - productReference = 96F2151CA6ADD851CD6FFD62A544FFBF /* ZCAnimatedLabel.framework */; + name = "Pods-HeroExamples"; + productName = "Pods-HeroExamples"; + productReference = AF5C12431F9BD2452D57C998BC489B87 /* Pods_HeroExamples.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -714,72 +533,44 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 7BADC0D894845F24A1D8CEB9B900AF72 /* Products */; + productRefGroup = 23024C222F96A4C7A30040F108850DAB /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 76BD4592010354D6C23D6ECCA20D83A8 /* ChameleonFramework */, - 34CAC580BFE6FB5B89353906FD6A8BDB /* Hero */, - 73DBEE8B40A64A4E3B091748C42DD4F7 /* Pods-HeroExamples */, - B436B44CA163743182E74F03DB0B4F59 /* ZCAnimatedLabel */, + 7BE367E8CC6B63FE94C2292EBF18B4D9 /* Pods-HeroExamples */, + 490E5E24AF399729C67683ABA7BCA188 /* ZCAnimatedLabel */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 548AB60370927E20C25102D9FD05845F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F7F904D5F0888B42AC9D326693754CE0 /* Pods-HeroExamples-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5B618D295F2EF5EBCA49DB555E8C57B7 /* Sources */ = { + 2C8DA10629A6E8A5ACDB8F3FF6724704 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 04118D1B8FDD7E7173670C8B07711589 /* ZCAnimatedLabel-dummy.m in Sources */, - 8E0CEB2CEE49A5BEE264A8EE54714EA7 /* ZCAnimatedLabel.m in Sources */, - B091706205DBEA2827284B7060E64096 /* ZCCoreTextLayout.m in Sources */, - 56989A7BF080012B0F0637436E6EABB0 /* ZCDashLabel.m in Sources */, - 7AE94C0C7BFD8A9C9530AED794BD0D8E /* ZCDuangLabel.m in Sources */, - 8888D8CD2B70C41CCD55AAEEA4FD25AC /* ZCEasingUtil.m in Sources */, - 94F7E046C2602C8C4D634FF684B227F8 /* ZCFallLabel.m in Sources */, - D195064586817A705F5068D1D98BB120 /* ZCFlyinLabel.m in Sources */, - 75B4A80CFC3A9C0B7D74139C31F980F1 /* ZCFocusLabel.m in Sources */, - 40E1F04D4C2801329BB14841B24C005A /* ZCRevealLabel.m in Sources */, - 96E2D91886535313CCBDF853FEB03868 /* ZCShapeshiftLabel.m in Sources */, - EE4A11526BB34938AF78ACAC8287EED6 /* ZCSpinLabel.m in Sources */, - 07FBEEA9B5A846CA380A56E0C4871E70 /* ZCThrownLabel.m in Sources */, - 6F18AC21D391B19865742F811EC20202 /* ZCTransparencyLabel.m in Sources */, + 25CCFF1662CCA3724B76988DD5E6C7DA /* Pods-HeroExamples-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6271C35C5330F1342A0AAABCAEEDC003 /* Sources */ = { + E01509A7080DEB56AB53EBE5D3C115B4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A6DA81627CEB670BBFBBAC365EEFBAF8 /* CascadePreprocessor.swift in Sources */, - 1EFA7FF8FA2BF549B4CA3B7056C8A31F /* CG+Hero.swift in Sources */, - 3FF66D2B989569989DA1ECEF022D0911 /* ClearPreprocessor.swift in Sources */, - 36F23BEB8D59F2D7E929B65837955928 /* DispatchQueue+Hero.swift in Sources */, - EB192542076198CC9C636DDFCCF28D64 /* Hero-dummy.m in Sources */, - CA19F7D3C407140A4858D71B94EDC523 /* Hero.swift in Sources */, - 87180A87859AD4B9B5656F52A3E64013 /* HeroContext.swift in Sources */, - F34ADE4638ABE9E687A005E1B4CCD2A0 /* HeroDebugPlugin.swift in Sources */, - A37850B91E0B6487002854A8 /* CALayer+Hero.swift in Sources */, - 96ADBD9B612F8A5B2A417A3BCED08B78 /* HeroDebugView.swift in Sources */, - B9A618F6A32F37FCCB911669072ADAD1 /* HeroDefaultAnimator.swift in Sources */, - A37850B61E0B619F002854A8 /* HeroDefaultAnimatorViewState.swift in Sources */, - BAFF28FB3D799010C983A03EE434F262 /* HeroPlugin.swift in Sources */, - 704C71A8D826D94BE3F463A1E39DDE08 /* HeroTypes.swift in Sources */, - B124B4A71E088BA9000F1DF2 /* CAMediaTimingFunction+Hero.swift in Sources */, - 3B7E296D2722377B0EB6FD076A716081 /* SourceIDPreprocessor.swift in Sources */, - A6AC4C9DCE32429CE5D6CF2EAA3C52DE /* UIKit+Hero.swift in Sources */, - A37850B41E0B60FC002854A8 /* HeroDefaultAnimatorViewContext.swift in Sources */, - 9ADBC3165E0411E5DFAAFE05C96EDC2D /* UIKit+HeroModifier.swift in Sources */, - BBACBB79A5CCE24F3BF31BEFDADD80DA /* ViewToViewPreprocessor.swift in Sources */, + F6D9178D7BBB6675E4DDDAE9DD87D325 /* ZCAnimatedLabel-dummy.m in Sources */, + AB38B3EC8E11AAC3E79CCA2055C602DA /* ZCAnimatedLabel.m in Sources */, + B6634AF86577EB63DA3CBEFE68A13573 /* ZCCoreTextLayout.m in Sources */, + 960CCAF77BEB2BADB3EDF2B1D4F163ED /* ZCDashLabel.m in Sources */, + A012023B35FBAC0F3BF4A79AB56F5BF8 /* ZCDuangLabel.m in Sources */, + 71F6B456484AFD3E66941D85EBC63AB4 /* ZCEasingUtil.m in Sources */, + F19137375616A184266131B0D97BE794 /* ZCFallLabel.m in Sources */, + 4F588C05B1BD6255AC3A7E1759D015B4 /* ZCFlyinLabel.m in Sources */, + 6FE3836B8D9901EB160349215E388DA0 /* ZCFocusLabel.m in Sources */, + BA46D138629B5BEEF5C8CA4F5DA78B6D /* ZCRevealLabel.m in Sources */, + 2D10805A1729B26DCB2CAD52F2049BAF /* ZCShapeshiftLabel.m in Sources */, + 24BE4A3CB29223B7DCC5150F5C08A307 /* ZCSpinLabel.m in Sources */, + DBACA9BDB5867F71DBA6D4B76672E14B /* ZCThrownLabel.m in Sources */, + E4CE7C740C5F7853AF4A1BD5A538809A /* ZCTransparencyLabel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -807,91 +598,21 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 2EABA1CF962E9506BCD6B12C4067C724 /* PBXTargetDependency */ = { + 5F11CE395EB251087A84A872542D41CB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Hero; - target = 34CAC580BFE6FB5B89353906FD6A8BDB /* Hero */; - targetProxy = DE1EA60457BEF29998CDCB4A2EF25F52 /* PBXContainerItemProxy */; + name = ZCAnimatedLabel; + target = 490E5E24AF399729C67683ABA7BCA188 /* ZCAnimatedLabel */; + targetProxy = 09A396E97BB7A660275B043DDC407900 /* PBXContainerItemProxy */; }; - DE3B1B4D9EF473934BBB19396693E09C /* PBXTargetDependency */ = { + F723CE06F852D2E359BB6B2964BA8679 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = ChameleonFramework; target = 76BD4592010354D6C23D6ECCA20D83A8 /* ChameleonFramework */; - targetProxy = 245352CA6AFF23A62ECC1E35BB9694B8 /* PBXContainerItemProxy */; - }; - FBA54CBC45C0F0CD56172B44E55D7319 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZCAnimatedLabel; - target = B436B44CA163743182E74F03DB0B4F59 /* ZCAnimatedLabel */; - targetProxy = 7F4216B15DEB10177912225474EB288A /* PBXContainerItemProxy */; + targetProxy = 77ABD4CB4FB134B9A8C14A7B7F0C50CF /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 1B87D5BDC7F40D6A656E70058A80457B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 25E81D1F1DA468EA8BCC84BFA1C7AFE8 /* Hero.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Hero/Hero-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Hero/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Hero/Hero.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Hero; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 3B253C0A051B9727DBB1D1D947A215BE /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B7845278D818AA0933253B32BF79AB28 /* ZCAnimatedLabel.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ZCAnimatedLabel/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = ZCAnimatedLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 3E09A745CF2882E71BFC1132C8D8AE7D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1F2E13984F6F5D4A7DD3E870630E454E /* ChameleonFramework.xcconfig */; @@ -924,9 +645,9 @@ }; name = Release; }; - 412DAB257A76F5E015BD6D241990C9D6 /* Debug */ = { + 5307121EE04301CCF222308A830C6660 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 25E81D1F1DA468EA8BCC84BFA1C7AFE8 /* Hero.xcconfig */; + baseConfigurationReference = B7845278D818AA0933253B32BF79AB28 /* ZCAnimatedLabel.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -939,17 +660,16 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/Hero/Hero-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Hero/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZCAnimatedLabel/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Hero/Hero.modulemap"; + MODULEMAP_FILE = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel.modulemap"; MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Hero; + PRODUCT_NAME = ZCAnimatedLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -957,42 +677,6 @@ }; name = Debug; }; - 55806264DAD3E2F9C583D0CA2F43E7C5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 517F35FE8BE6A3CBA4B88B1520C74C06 /* Pods-HeroExamples.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-HeroExamples/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-HeroExamples/Pods-HeroExamples.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_HeroExamples; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 59B042A655B7C20CBAB90E385BF4E4C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1037,41 +721,45 @@ }; name = Debug; }; - 671E841DBAAA02983FB2540A85D2F11A /* Release */ = { + 64628373662DD9ADDD0FBA68D2C83A5C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B7845278D818AA0933253B32BF79AB28 /* ZCAnimatedLabel.xcconfig */; + baseConfigurationReference = 517F35FE8BE6A3CBA4B88B1520C74C06 /* Pods-HeroExamples.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEBUG_INFORMATION_FORMAT = dwarf; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - GCC_PREFIX_HEADER = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ZCAnimatedLabel/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-HeroExamples/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = ZCAnimatedLabel; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-HeroExamples/Pods-HeroExamples.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_HeroExamples; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_VERSION = 3.0; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 6CC8020A764FED9A0EF88A7088C3280A /* Release */ = { + 9387CF5D0FE86B7A6026CFAFCDE9A50C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6FB43588D8877F1F909F697476508F4F /* Pods-HeroExamples.release.xcconfig */; + baseConfigurationReference = B7845278D818AA0933253B32BF79AB28 /* ZCAnimatedLabel.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -1084,20 +772,17 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = "Target Support Files/Pods-HeroExamples/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/ZCAnimatedLabel/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-HeroExamples/Pods-HeroExamples.modulemap"; + MODULEMAP_FILE = "Target Support Files/ZCAnimatedLabel/ZCAnimatedLabel.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_HeroExamples; + PRODUCT_NAME = ZCAnimatedLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -1144,6 +829,41 @@ }; name = Release; }; + E19B98C170398FBF1DDCA5CDDB48B541 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6FB43588D8877F1F909F697476508F4F /* Pods-HeroExamples.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_NO_COMMON_BLOCKS = YES; + INFOPLIST_FILE = "Target Support Files/Pods-HeroExamples/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-HeroExamples/Pods-HeroExamples.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_HeroExamples; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; E3923CE70A641398913B8A3AA0FDBB30 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1F2E13984F6F5D4A7DD3E870630E454E /* ChameleonFramework.xcconfig */; @@ -1189,15 +909,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 102BC29D729DCF1BBE09F7B77976A8DD /* Build configuration list for PBXNativeTarget "Hero" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 412DAB257A76F5E015BD6D241990C9D6 /* Debug */, - 1B87D5BDC7F40D6A656E70058A80457B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1207,20 +918,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 937EE204DDEDB24B8E417B1629347495 /* Build configuration list for PBXNativeTarget "Pods-HeroExamples" */ = { + 86E278FFB0C25A792DBD0B3BD9B1F7AB /* Build configuration list for PBXNativeTarget "Pods-HeroExamples" */ = { isa = XCConfigurationList; buildConfigurations = ( - 55806264DAD3E2F9C583D0CA2F43E7C5 /* Debug */, - 6CC8020A764FED9A0EF88A7088C3280A /* Release */, + 64628373662DD9ADDD0FBA68D2C83A5C /* Debug */, + E19B98C170398FBF1DDCA5CDDB48B541 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AC6491958430F1070A2A30EDFC33FEDD /* Build configuration list for PBXNativeTarget "ZCAnimatedLabel" */ = { + 8D934E445C26631D39ED954D1595D699 /* Build configuration list for PBXNativeTarget "ZCAnimatedLabel" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3B253C0A051B9727DBB1D1D947A215BE /* Debug */, - 671E841DBAAA02983FB2540A85D2F11A /* Release */, + 5307121EE04301CCF222308A830C6660 /* Debug */, + 9387CF5D0FE86B7A6026CFAFCDE9A50C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Examples/Pods/Target Support Files/Hero/Hero-dummy.m b/Examples/Pods/Target Support Files/Hero/Hero-dummy.m deleted file mode 100644 index 22ddcbc1..00000000 --- a/Examples/Pods/Target Support Files/Hero/Hero-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Hero : NSObject -@end -@implementation PodsDummy_Hero -@end diff --git a/Examples/Pods/Target Support Files/Hero/Hero-prefix.pch b/Examples/Pods/Target Support Files/Hero/Hero-prefix.pch deleted file mode 100644 index aa992a4a..00000000 --- a/Examples/Pods/Target Support Files/Hero/Hero-prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - diff --git a/Examples/Pods/Target Support Files/Hero/Hero-umbrella.h b/Examples/Pods/Target Support Files/Hero/Hero-umbrella.h deleted file mode 100644 index 23173351..00000000 --- a/Examples/Pods/Target Support Files/Hero/Hero-umbrella.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - - -FOUNDATION_EXPORT double HeroVersionNumber; -FOUNDATION_EXPORT const unsigned char HeroVersionString[]; - diff --git a/Examples/Pods/Target Support Files/Hero/Hero.modulemap b/Examples/Pods/Target Support Files/Hero/Hero.modulemap deleted file mode 100644 index 1376fbb8..00000000 --- a/Examples/Pods/Target Support Files/Hero/Hero.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Hero { - umbrella header "Hero-umbrella.h" - - export * - module * { export * } -} diff --git a/Examples/Pods/Target Support Files/Hero/Hero.xcconfig b/Examples/Pods/Target Support Files/Hero/Hero.xcconfig deleted file mode 100644 index 6d398f22..00000000 --- a/Examples/Pods/Target Support Files/Hero/Hero.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Hero -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/Examples/Pods/Target Support Files/Hero/Info.plist b/Examples/Pods/Target Support Files/Hero/Info.plist deleted file mode 100644 index cba25855..00000000 --- a/Examples/Pods/Target Support Files/Hero/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.0.1 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.markdown b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.markdown index 5e236720..e62035c8 100644 --- a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.markdown +++ b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.markdown @@ -26,31 +26,6 @@ This application makes use of the following third party libraries: > SOFTWARE. -## Hero - -The MIT License (MIT) - -Copyright (c) 2015 Luke Zhao - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - ## ZCAnimatedLabel The MIT License (MIT) diff --git a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.plist b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.plist index b5260b1c..54211f52 100644 --- a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.plist +++ b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-acknowledgements.plist @@ -47,37 +47,6 @@ FooterText The MIT License (MIT) -Copyright (c) 2015 Luke Zhao <me@lkzhao.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - License - MIT - Title - Hero - Type - PSGroupSpecifier - - - FooterText - The MIT License (MIT) - Copyright (c) 2015 Chen Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh index e62f5cf4..45436ba0 100755 --- a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh +++ b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh @@ -85,11 +85,9 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "$BUILT_PRODUCTS_DIR/ChameleonFramework/ChameleonFramework.framework" - install_framework "$BUILT_PRODUCTS_DIR/Hero/Hero.framework" install_framework "$BUILT_PRODUCTS_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "$BUILT_PRODUCTS_DIR/ChameleonFramework/ChameleonFramework.framework" - install_framework "$BUILT_PRODUCTS_DIR/Hero/Hero.framework" install_framework "$BUILT_PRODUCTS_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework" fi diff --git a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig index 020d589e..f851f1e1 100644 --- a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig +++ b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework" "$PODS_CONFIGURATION_BUILD_DIR/Hero" "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework" "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Hero/Hero.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "ChameleonFramework" -framework "Hero" -framework "ZCAnimatedLabel" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "ChameleonFramework" -framework "ZCAnimatedLabel" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig index 020d589e..f851f1e1 100644 --- a/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig +++ b/Examples/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig @@ -1,10 +1,10 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework" "$PODS_CONFIGURATION_BUILD_DIR/Hero" "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework" "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Hero/Hero.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "ChameleonFramework" -framework "Hero" -framework "ZCAnimatedLabel" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ChameleonFramework/ChameleonFramework.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ZCAnimatedLabel/ZCAnimatedLabel.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "ChameleonFramework" -framework "ZCAnimatedLabel" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Hero.podspec b/Hero.podspec index 1c915e82..0c670e8f 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Hero" - s.version = "0.0.3" + s.version = "0.0.5" s.summary = "Supercharged transition engine for iOS." s.description = <<-DESC diff --git a/Hero/Hero.swift b/Hero/Hero.swift index f0d7c315..2322d35d 100644 --- a/Hero/Hero.swift +++ b/Hero/Hero.swift @@ -97,19 +97,22 @@ internal extension Hero { animators.append(plugin) } - (fromViewController as? HeroViewControllerDelegate)?.heroWillStartAnimatingTo?(viewController: toViewController!) - - if - let navigationController = fromViewController as? UINavigationController, + if let delegate = fromViewController as? HeroViewControllerDelegate { + delegate.heroWillStartTransition?() + delegate.heroWillStartAnimatingTo?(viewController: toViewController!) + } + if let navigationController = fromViewController as? UINavigationController, let delegate = navigationController.topViewController as? HeroViewControllerDelegate { - delegate.heroWillStartAnimatingTo?(viewController: toViewController!) + delegate.heroWillStartTransition?() + delegate.heroWillStartAnimatingTo?(viewController: toViewController!) } - - (toViewController as? HeroViewControllerDelegate)?.heroWillStartAnimatingFrom?(viewController: fromViewController!) - - if - let navigationController = toViewController as? UINavigationController, + if let delegate = toViewController as? HeroViewControllerDelegate { + delegate.heroWillStartTransition?() + delegate.heroWillStartAnimatingFrom?(viewController: fromViewController!) + } + if let navigationController = toViewController as? UINavigationController, let delegate = navigationController.topViewController as? HeroViewControllerDelegate { + delegate.heroWillStartTransition?() delegate.heroWillStartAnimatingFrom?(viewController: fromViewController!) } @@ -163,10 +166,10 @@ internal extension Hero { for (currentFromViews, currentToViews) in self.animatorViews { // auto hide all animated views for v in currentFromViews { - v.isHidden = true + self.context.hide(view: v) } for v in currentToViews { - v.isHidden = true + self.context.hide(view: v) } } @@ -206,11 +209,11 @@ internal extension Hero { guard transitionContainer != nil else { return } for (i, animator) in animators.enumerated(){ animator.clean() - for v in animatorViews[i].0{ - v.isHidden = false + for v in animatorViews[i].0 { + context.unhide(view:v) } - for v in animatorViews[i].1{ - v.isHidden = false + for v in animatorViews[i].1 { + context.unhide(view:v) } } @@ -251,17 +254,21 @@ internal extension Hero { if let delegate = fvc as? HeroViewControllerDelegate { delegate.heroDidEndAnimatingTo?(viewController: tvc) + delegate.heroDidEndTransition?() } if let nc = fvc as? UINavigationController, let delegate = nc.topViewController as? HeroViewControllerDelegate { delegate.heroDidEndAnimatingTo?(viewController: tvc) + delegate.heroDidEndTransition?() } if let delegate = tvc as? HeroViewControllerDelegate { delegate.heroDidEndAnimatingFrom?(viewController: fvc) + delegate.heroDidEndTransition?() } if let nc = tvc as? UINavigationController, let delegate = nc.topViewController as? HeroViewControllerDelegate { delegate.heroDidEndAnimatingFrom?(viewController: fvc) + delegate.heroDidEndTransition?() } } } diff --git a/Hero/HeroContext.swift b/Hero/HeroContext.swift index 9eaee623..adb0c89b 100644 --- a/Hero/HeroContext.swift +++ b/Hero/HeroContext.swift @@ -30,7 +30,9 @@ public class HeroContext { fileprivate var heroIDToSourceView = [String:UIView]() fileprivate var heroIDToDestinationView = [String:UIView]() + fileprivate var snapshotViews = [UIView:UIView]() fileprivate var modifiers = [UIView:HeroModifiers]() + fileprivate var viewAlphas = [UIView:CGFloat]() internal init(container:UIView, fromView:UIView, toView:UIView){ fromViews = HeroContext.processViewTree(view: fromView, container: container, idMap: &heroIDToSourceView, modifierMap: &modifiers) @@ -85,6 +87,69 @@ extension HeroContext{ return nil } + /** + - Returns: a snapshot view for animation + */ + public func snapshotView(for view: UIView) -> UIView { + if let snapshot = snapshotViews[view] { + return snapshot + } + + unhide(view: view) + + // capture a snapshot without cornerRadius + let oldCornerRadius = view.layer.cornerRadius + view.layer.cornerRadius = 0 + let snapshot:UIView + if #available(iOS 9.0, *), let stackView = view as? UIStackView{ + snapshot = stackView.slowSnapshotView() + } else if let imageView = view as? UIImageView{ + let contentView = UIImageView(image: imageView.image) + contentView.frame = imageView.bounds + contentView.contentMode = imageView.contentMode + let snapShotView = UIView() + snapShotView.addSubview(contentView) + snapshot = snapShotView + } else { + snapshot = view.snapshotView(afterScreenUpdates: true)! + } + view.layer.cornerRadius = oldCornerRadius + + // the Snapshot's contentView must have hold the cornerRadius value, + // since the snapshot might not have maskToBounds set + let contentView = snapshot.subviews[0] + contentView.layer.cornerRadius = view.layer.cornerRadius + contentView.layer.masksToBounds = true + + snapshot.layer.cornerRadius = view.layer.cornerRadius + if let zPos = self[view, "zPosition"]?.getCGFloat(0){ + snapshot.layer.zPosition = zPos + } else { + snapshot.layer.zPosition = view.layer.zPosition + } + + snapshot.layer.opacity = view.layer.opacity + snapshot.layer.isOpaque = view.layer.isOpaque + snapshot.layer.anchorPoint = view.layer.anchorPoint + snapshot.layer.masksToBounds = view.layer.masksToBounds + snapshot.layer.borderColor = view.layer.borderColor + snapshot.layer.borderWidth = view.layer.borderWidth + snapshot.layer.transform = view.layer.transform + snapshot.layer.shadowRadius = view.layer.shadowRadius + snapshot.layer.shadowOpacity = view.layer.shadowOpacity + snapshot.layer.shadowColor = view.layer.shadowColor + snapshot.layer.shadowOffset = view.layer.shadowOffset + + snapshot.frame = container.convert(view.bounds, from: view) + snapshot.heroID = view.heroID + + hide(view: view) + + container.addSubview(snapshot) + snapshotViews[view] = snapshot + return snapshot + } + /** - Returns: a list of all the modifier names for a given view */ @@ -162,6 +227,19 @@ extension HeroContext{ // internal extension HeroContext{ + internal func hide(view:UIView) { + if viewAlphas[view] == nil{ + viewAlphas[view] = view.alpha + view.alpha = 0 + } + } + internal func unhide(view:UIView){ + if let oldAlpha = viewAlphas[view]{ + view.alpha = oldAlpha + viewAlphas[view] = nil + } + } + internal static func extractModifiers(modifierString:String) -> HeroModifiers { func matches(for regex: String, text:NSString) -> [NSTextCheckingResult] { do { diff --git a/Hero/HeroDefaultAnimator.swift b/Hero/HeroDefaultAnimator.swift index 9d4c5c2e..6cd1f306 100644 --- a/Hero/HeroDefaultAnimator.swift +++ b/Hero/HeroDefaultAnimator.swift @@ -56,49 +56,6 @@ public class HeroDefaultAnimator:HeroAnimator{ } return false } - - public func takeSnapshot(for v:UIView) -> UIView{ - v.isHidden = false - - // capture a snapshot without cornerRadius - let oldCornerRadius = v.layer.cornerRadius - v.layer.cornerRadius = 0 - let snapshot = v.snapshotView(afterScreenUpdates: true)! - v.layer.cornerRadius = oldCornerRadius - - // the Snapshot's contentView must have hold the cornerRadius value, - // since the snapshot might not have maskToBounds set - let contentView = snapshot.subviews[0] - contentView.layer.cornerRadius = v.layer.cornerRadius - contentView.layer.masksToBounds = true - - snapshot.layer.cornerRadius = v.layer.cornerRadius - if let zPos = context[v, "zPosition"]?.getCGFloat(0){ - snapshot.layer.zPosition = zPos - } else { - snapshot.layer.zPosition = v.layer.zPosition - } - snapshot.layer.opacity = v.layer.opacity - snapshot.layer.isOpaque = v.layer.isOpaque - snapshot.layer.anchorPoint = v.layer.anchorPoint - snapshot.layer.masksToBounds = v.layer.masksToBounds - snapshot.layer.borderColor = v.layer.borderColor - snapshot.layer.borderWidth = v.layer.borderWidth - snapshot.layer.transform = v.layer.transform - snapshot.layer.shadowRadius = v.layer.shadowRadius - snapshot.layer.shadowOpacity = v.layer.shadowOpacity - snapshot.layer.shadowColor = v.layer.shadowColor - snapshot.layer.shadowOffset = v.layer.shadowOffset - - snapshot.frame = context.container.convert(v.bounds, from: v) - snapshot.heroID = v.heroID - - v.isHidden = true - - context.container.addSubview(snapshot) - - return snapshot - } public func animate(context:HeroContext, fromViews:[UIView], toViews:[UIView]) -> TimeInterval{ self.context = context @@ -121,7 +78,7 @@ public class HeroDefaultAnimator:HeroAnimator{ } func animate(view:UIView, appearing:Bool){ - let snapshot = takeSnapshot(for: view) + let snapshot = context.snapshotView(for: view) let viewContext = HeroDefaultAnimatorViewContext(animator:self, view: view, snapshot: snapshot, modifiers: context[view]!, appearing: appearing) viewContexts[view] = viewContext } diff --git a/Hero/HeroDefaultAnimatorViewContext.swift b/Hero/HeroDefaultAnimatorViewContext.swift index f46b51dd..1f995ca6 100644 --- a/Hero/HeroDefaultAnimatorViewContext.swift +++ b/Hero/HeroDefaultAnimatorViewContext.swift @@ -91,7 +91,6 @@ internal class HeroDefaultAnimatorViewContext { let path = CGMutablePath() let maxControl = fromPos.y > toPos.y ? CGPoint(x: toPos.x, y: fromPos.y) : CGPoint(x: fromPos.x, y: toPos.y) let minControl = (toPos - fromPos) / 2 + fromPos - let diff = abs(toPos - fromPos) path.move(to: fromPos) path.addQuadCurve(to: toPos, control: minControl + (maxControl - minControl) * arcIntensity) @@ -125,7 +124,7 @@ internal class HeroDefaultAnimatorViewContext { } // return the completion duration of the animation (duration + initial delay, not counting the beginTime) - func addAnimation(key:String, beginTime:TimeInterval, fromValue:Any?, toValue:Any?) -> TimeInterval{ + @discardableResult func addAnimation(key:String, beginTime:TimeInterval, fromValue:Any?, toValue:Any?) -> TimeInterval{ let anim = getAnimation(key: key, beginTime:beginTime, fromValue: fromValue, toValue: toValue) snapshot.layer.add(anim, forKey: key) @@ -188,7 +187,7 @@ internal class HeroDefaultAnimatorViewContext { let realFromSize = fromSize.transform(fromTransform) let realToSize = toSize.transform(toTransform) - var movePoints = (realFromPos.distance(realToPos) + realFromSize.point.distance(realToSize.point)) + let movePoints = (realFromPos.distance(realToPos) + realFromSize.point.distance(realToSize.point)) // duration is 0.2 @ 0 to 0.375 @ 500 defaultDuration = 0.208 + Double(movePoints.clamp(0, 500)) / 3000 @@ -208,7 +207,7 @@ internal class HeroDefaultAnimatorViewContext { let targetState = viewState(for: view, with: modifiers) for (key, targetValue) in targetState{ if state[key] == nil{ - let currentValue = snapshot.layer.value(forKeyPath: key) + let currentValue = snapshot.layer.value(forKeyPath: key)! state[key] = (currentValue, currentValue) } addAnimation(key: key, beginTime: 0, fromValue: targetValue, toValue: targetValue) @@ -217,12 +216,12 @@ internal class HeroDefaultAnimatorViewContext { func resume(timePassed:TimeInterval, reverse:Bool){ for (key, (fromValue, toValue)) in state{ - var realToValue = !reverse ? toValue : fromValue - var realFromValue = (snapshot.layer.presentation() ?? snapshot.layer).value(forKeyPath: key) + let realToValue = !reverse ? toValue : fromValue + let realFromValue = (snapshot.layer.presentation() ?? snapshot.layer).value(forKeyPath: key)! state[key] = (realFromValue, realToValue) } - var realDelay = max(0, baseDelay - timePassed) + let realDelay = max(0, baseDelay - timePassed) animate(delay: realDelay) } @@ -268,7 +267,7 @@ internal class HeroDefaultAnimatorViewContext { let disappeared = viewState(for: view, with: modifiers) for (key, disappearedState) in disappeared{ - let appearingState = snapshot.layer.value(forKeyPath: key) + let appearingState = snapshot.layer.value(forKeyPath: key)! let toValue = appearing ? appearingState : disappearedState let fromValue = !appearing ? appearingState : disappearedState state[key] = (fromValue, toValue) diff --git a/Hero/HeroPlugin.swift b/Hero/HeroPlugin.swift index 7ffd1243..19b83940 100644 --- a/Hero/HeroPlugin.swift +++ b/Hero/HeroPlugin.swift @@ -113,7 +113,7 @@ open class HeroPlugin: HeroPreprocessor, HeroAnimator{ /** Plugin which wants to handle the transition interactively should return true. And also keep a reference to the context object to control the transition. - - Returns: true if the plugin wants interacive start. + - Returns: true if the plugin wants interactive start. - Parameters: - context: object which the plugin can use to control the interactive transition */ diff --git a/Hero/HeroTypes.swift b/Hero/HeroTypes.swift index 307ff312..4e5be426 100644 --- a/Hero/HeroTypes.swift +++ b/Hero/HeroTypes.swift @@ -52,7 +52,10 @@ public protocol HeroAnimator { @objc optional func heroWillStartAnimatingFrom(viewController:UIViewController) @objc optional func heroDidEndAnimatingFrom(viewController:UIViewController) - + + @objc optional func heroWillStartTransition() + @objc optional func heroDidEndTransition() + @objc optional func heroWillStartAnimatingTo(viewController:UIViewController) @objc optional func heroDidEndAnimatingTo(viewController:UIViewController) } diff --git a/Hero/UIKit+Hero.swift b/Hero/UIKit+Hero.swift index 1137cf8a..db501d45 100644 --- a/Hero/UIKit+Hero.swift +++ b/Hero/UIKit+Hero.swift @@ -56,6 +56,20 @@ public extension UIView{ ) } } + + func slowSnapshotView() -> UIView{ + UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) + layer.render(in: UIGraphicsGetCurrentContext()!) +// drawHierarchy(in: bounds, afterScreenUpdates: true) + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + let imageView = UIImageView(image: image) + imageView.frame = bounds + let snapshotView = UIView(frame:bounds) + snapshotView.addSubview(imageView) + return snapshotView + } } public extension UIViewController{ diff --git a/README.md b/README.md index 08d10f0e..353096ea 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,59 @@ -Supercharged transition engine for iOS. Build your custom view transitions with few lines of code or even no code at all. Inspired by Polymer's [neon-animated-pages](https://elements.polymer-project.org/elements/neon-animation) and Keynote's `Magic Move`. - +[![Carthage compatible](https://img.shields.io/badge/Carthage-Compatible-brightgreen.svg?style=flat)](https://github.com/Carthage/Carthage) [![Version](https://img.shields.io/cocoapods/v/Hero.svg?style=flat)](http://cocoapods.org/pods/Hero) [![License](https://img.shields.io/cocoapods/l/Hero.svg?style=flat)](https://github.com/lkzhao/Hero/blob/master/LICENSE?raw=true) -![Xcode 8.0+](https://img.shields.io/badge/Xcode-8.0%2B-blue.svg) +![Xcode 8.2+](https://img.shields.io/badge/Xcode-8.2%2B-blue.svg) ![iOS 8.0+](https://img.shields.io/badge/iOS-8.0%2B-blue.svg) ![Swift 3.0+](https://img.shields.io/badge/Swift-3.0%2B-orange.svg) -## Video Demo -**[View here](https://youtu.be/-6L79or6Iq8)** - -## Usage Guide -**[Read here](https://github.com/lkzhao/Hero/wiki/Usage-Guide)** - ## Introduction -**Hero** is a library for building iOS view controller transitions. It provides an layer on top of the UIKit's cumbersome transition APIs. Making custom transitions an easy task for developers. +**Hero** is a library for building iOS view controller transitions. It provides a layer on top of the UIKit's cumbersome transition APIs. Making custom transitions an easy task for developers. ### Features - + + #### With Hero, you can easily mix & match these effects to build your own custom transition. -At its core, Hero provides a automatic transition similar to Keynote's `Magic Move`. It checks the `heroID` property on all source and destinations views. Every matched view pairs are then automatically transitioned from it's old state to it's new state. +At its core, Hero is similar to Keynote's **Magic Move**. It checks the `heroID` property on all source and destinations views. Every matched view pairs are then automatically transitioned from it's old state to it's new state. -Hero can also construct animations for unmatched views. It is easy to define these animations via the `heroModifiers` property. Hero will run these animations alongside the `Magic Move` animations. All of these can by interactive, too. +Hero can also construct animations for unmatched views. It is easy to define these animations via the `heroModifiers` property. Hero will run these animations alongside the **Magic Move** animations. All of these can be interactive, too. -Hero does not make any assumption about how the view is built or structured. It will not modify any of your views' states other than hidding them during the animation. This means that it works with autolayout, programmatic layout, UICollectionView, UITableView, UINavigationController etc... +By default, Hero provides **dynamic duration & easing** based on the [Material Design Motion Guide](https://material.io/guidelines/motion/duration-easing.html). The duration is determined by the distance and size change. The easing curve is selected base on whether or not the view is entering or exiting the screen. It save you the hassle while providing consistent and delightful animations. -### This library is completely new and under heavy development. Might not be stable for production use, but there will be more things to come. -##### NOTE: Hero won't work on iPhone 7 Simulators due to a [bug](https://forums.developer.apple.com/thread/63438) by Apple. Try using other simulators or a real device when working with Hero. +Hero does not make any assumption about how the view is built or structured. It will not modify any of your views' states other than hiding them during the animation. This means that it works with **autolayout**, **programmatic layout**, **UICollectionView**(without modifing its layout object), **UITableView**, **UINavigationController**, **UITabBarController**, etc... + +## Video Demos +The following videos give you a general idea of what you can do with **Hero** -## A Simple Tutorial +1. Video overview of the **example project**. +2. Video overview of the **built-in debugger** that display timeline, arc curve, and 3d informations. +3. Video overview of the usage with [Injection App](http://johnholdsworth.com/injection.html) to provide **dynamic modifications** in realtime. Changing `HeroID` or `HeroModifiers` **without** recompiling! - + + + -#### To achieve the transition above (3 steps) -1. **Setup the view controllers and construct the view hierarchy** +## Installation & Usage Guide +Hero is available on Carthage & Cocoapods. See the **[usage guide](https://github.com/lkzhao/Hero/wiki/Usage-Guide)** for instructions. - +##### NOTE: Hero won't work on iPhone 7 Simulators due to a [bug](https://forums.developer.apple.com/thread/63438) by Apple. Try using other simulators or a real device when working with Hero. -2. **Using either the StoryBoard's Identity Inspector or by code, set views' heroID** +## Simple Usage Examples - + - or + - ```swift - blueView.heroID = "blue" - ``` - - **Remember to set `heroID` to both the source view and the destination view** +You can do these in the storyboard too! -3. **Enable Hero Transition to the destination view controller (ViewController2) and UINavigationController if you are using a UINavigationController stack** + - - - or - - ```swift - viewController2.isHeroEnabled = true - ``` +## Contribute -For detailed explaination about how **Hero ID**, **Hero Modifiers**, and supported animations, read the **[Usage Guide](https://github.com/lkzhao/Hero/wiki/Usage-Guide)**, or download the **[Source Code](http://github.com/lkzhao/Hero/zipball/master/)**. +We welcome any contributions. Please read the [Contribution Guide](https://github.com/lkzhao/Hero/wiki/Contribution-Guide). ## License diff --git a/Resources/advance.svg b/Resources/advance.svg new file mode 100644 index 00000000..1af72b62 --- /dev/null +++ b/Resources/advance.svg @@ -0,0 +1,520 @@ + + + + advance + Created with Sketch. + + + + + + + + + + + + self. + isHeroEnabled + = + true + + greyView. + heroID + = + “bar” + + // collectionView is the parent + view of all red cells + + collectionView. + heroModifiers + = + + “cascade(0.02)” + for cell in redCells{ + cell. + heroModifiers + = + + “fade scale(0.5)” + } + + + + View Controller 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + greyView. + heroID + = + “bar” + + + View Controller 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/basic.svg b/Resources/basic.svg index 3397f9c6..2ae08477 100644 --- a/Resources/basic.svg +++ b/Resources/basic.svg @@ -71,6 +71,8 @@ L10,25.0007413 Z;" dur="1s" repeatCount="indefinite" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" fill="freeze" /> @@ -127,6 +129,8 @@ C23.581722,88 20,84.4092877 20,80 L20,80 Z;" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" repeatCount="indefinite" fill="freeze" /> @@ -147,6 +151,8 @@ attributeName="x" values="19;10;10;19;19" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -154,13 +160,8 @@ attributeName="y" values="48;39;39;48;48" dur="1s" - begin="0.25s" - repeatCount="indefinite" - fill="freeze" /> - @@ -168,6 +169,8 @@ attributeName="width" values="18; 36; 36; 18; 18" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -175,6 +178,8 @@ attributeName="height" values="18; 36; 36; 18; 18" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -182,6 +187,8 @@ attributeName="fill" values="white; #3A97FC; #3A97FC; white; white" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -191,6 +198,8 @@ attributeName="width" values="18; 36; 36; 18; 18" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -198,6 +207,8 @@ attributeName="x" values="19;10;10;19;19" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -205,6 +216,8 @@ attributeName="y" values="38;21;21;38;38" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.25s" repeatCount="indefinite" fill="freeze" /> @@ -226,6 +239,8 @@ attributeName="x" values="-50; 10; 10; -50; -50;" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.5s" repeatCount="indefinite" fill="freeze" /> @@ -235,6 +250,8 @@ attributeName="width" values="18; 36; 36; 18; 18" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.5s" repeatCount="indefinite" fill="freeze" /> @@ -242,6 +259,8 @@ attributeName="x" values="19;10;10;19;19" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.5s" repeatCount="indefinite" fill="freeze" /> @@ -249,6 +268,8 @@ attributeName="y" values="38;21;21;38;38" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.5s" repeatCount="indefinite" fill="freeze" /> @@ -270,17 +291,21 @@ attributeName="x" values="-50; 10; 10; -50; -50;" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.75s" repeatCount="indefinite" fill="freeze" /> @@ -288,6 +313,8 @@ attributeName="width" values="18; 36; 36; 18; 18" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.75s" repeatCount="indefinite" fill="freeze" /> @@ -295,6 +322,8 @@ attributeName="x" values="19;10;10;19;19" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.75s" repeatCount="indefinite" fill="freeze" /> @@ -302,6 +331,8 @@ attributeName="y" values="38;21;21;38;38" dur="1s" + calcMode="spline" + keySplines="0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1;0.4,0,0.2,1" begin="0.75s" repeatCount="indefinite" fill="freeze" /> diff --git a/Resources/debugger.png b/Resources/debugger.png new file mode 100644 index 00000000..286dd565 Binary files /dev/null and b/Resources/debugger.png differ diff --git a/Resources/effects.svg b/Resources/effects.svg new file mode 100644 index 00000000..52d57d60 --- /dev/null +++ b/Resources/effects.svg @@ -0,0 +1,223 @@ + + + + + + + + + + + + + Arc + + + + + + + + + + + + + + + + + + Cascade + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Interactive + + + + + + + + + + + + + + + + + + + + + + + Dynamic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/liveInjection.png b/Resources/liveInjection.png new file mode 100644 index 00000000..f83fcd40 Binary files /dev/null and b/Resources/liveInjection.png differ diff --git a/Resources/overview.png b/Resources/overview.png new file mode 100644 index 00000000..12dfd717 Binary files /dev/null and b/Resources/overview.png differ diff --git a/Resources/scaleTutorial.svg b/Resources/scaleTutorial.svg new file mode 100644 index 00000000..7797d1b1 --- /dev/null +++ b/Resources/scaleTutorial.svg @@ -0,0 +1,166 @@ + + + + scaleTutorial + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + greyLabel + + + + + + + + + + + + + + + + fade translate(0,100) scale(0.5) + + + + + + Storyboard + + + + + + + \ No newline at end of file diff --git a/Resources/simple.svg b/Resources/simple.svg new file mode 100644 index 00000000..0e037215 --- /dev/null +++ b/Resources/simple.svg @@ -0,0 +1,180 @@ + + + + simple + Created with Sketch. + + + + + + + + + + + + self. + isHeroEnabled + = + true + + redView. + heroID + = + “foo” + + greyView. + heroID + = + “bar” + + greenView. + heroModifiers + = + “translate(0,100) scale(0.5)” + + + View Controller 2 + + + + + + + + + + + + + + + + + redView. + heroID + = + “foo” + + greyView. + heroID + = + “bar” + + + View Controller 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/simpleTutorial.svg b/Resources/simpleTutorial.svg new file mode 100644 index 00000000..d1ff4ca8 --- /dev/null +++ b/Resources/simpleTutorial.svg @@ -0,0 +1,189 @@ + + + + Tutorial + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + redSquare + + + + + + + + + + + + + + + + greyButton + + + + + + Storyboard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Resources/storyboardView.png b/Resources/storyboardView.png new file mode 100644 index 00000000..72f815cc Binary files /dev/null and b/Resources/storyboardView.png differ diff --git a/Resources/storyboardViewController.png b/Resources/storyboardViewController.png new file mode 100644 index 00000000..f86a8821 Binary files /dev/null and b/Resources/storyboardViewController.png differ