├── .gitignore
├── .gitmodules
├── Cartfile
├── Cartfile.private
├── Cartfile.resolved
├── LICENSE.md
├── README.md
├── ReactiveAnimation.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcshareddata
│ └── xcschemes
│ ├── ReactiveAnimation Mac.xcscheme
│ └── ReactiveAnimation iOS.xcscheme
├── ReactiveAnimation.xcworkspace
└── contents.xcworkspacedata
├── ReactiveAnimation
├── Animation.swift
├── Info.plist
├── ReactiveAnimation.h
└── View.swift
└── ReactiveAnimationTests
├── Info.plist
├── ReactiveAnimationTests-Bridging-Header.h
├── ReactiveAnimationTests.m
└── SwiftJunk.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | build/
4 | *.pbxuser
5 | !default.pbxuser
6 | *.mode1v3
7 | !default.mode1v3
8 | *.mode2v3
9 | !default.mode2v3
10 | *.perspectivev3
11 | !default.perspectivev3
12 | xcuserdata
13 | *.xccheckout
14 | *.moved-aside
15 | DerivedData
16 | *.hmap
17 | *.ipa
18 | *.xcuserstate
19 |
20 | # CocoaPods
21 | #
22 | # We recommend against adding the Pods directory to your .gitignore. However
23 | # you should judge for yourself, the pros and cons are mentioned at:
24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
25 | #
26 | # Pods/
27 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "Carthage/Checkouts/LlamaKit"]
2 | path = Carthage/Checkouts/LlamaKit
3 | url = https://github.com/LlamaKit/LlamaKit.git
4 | [submodule "Carthage/Checkouts/xcconfigs"]
5 | path = Carthage/Checkouts/xcconfigs
6 | url = https://github.com/jspahrsummers/xcconfigs.git
7 | [submodule "Carthage/Checkouts/ReactiveCocoa"]
8 | path = Carthage/Checkouts/ReactiveCocoa
9 | url = https://github.com/ReactiveCocoa/ReactiveCocoa.git
10 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "ReactiveCocoa/ReactiveCocoa" "v3.0-alpha.3"
2 |
--------------------------------------------------------------------------------
/Cartfile.private:
--------------------------------------------------------------------------------
1 | github "jspahrsummers/xcconfigs"
2 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "LlamaKit/LlamaKit" "v0.6.0"
2 | github "jspahrsummers/xcconfigs" "0.7.2"
3 | github "ReactiveCocoa/ReactiveCocoa" "ad02d8356b43e2c38f3d4d87ea0127c5f8572668"
4 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | **The MIT License (MIT)**
2 | Copyright (c) ReactiveAnimation contributors
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining a copy
5 | of this software and associated documentation files (the "Software"), to deal
6 | in the Software without restriction, including without limitation the rights
7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the Software is
9 | furnished to do so, subject to the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be included in all
12 | copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 | SOFTWARE.
21 |
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ReactiveAnimation [](https://github.com/Carthage/Carthage)
2 |
3 | Declarative animations using [ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa) signals. See the [Mac
4 | demo](https://github.com/ReactiveCocoa/ReactiveAnimation-MacDemo) for an example
5 | of how the library works.
6 |
7 | ReactiveAnimation is released under the [MIT license](LICENSE.md).
8 |
9 | ### Getting Started
10 |
11 | To import the ReactiveAnimation framework, add `ReactiveAnimation.xcodeproj` as
12 | a subproject and add the appropriate framework target to your application.
13 |
14 | Alternatively, you can use [Carthage](https://github.com/Carthage/Carthage) to
15 | build the framework for you.
16 |
--------------------------------------------------------------------------------
/ReactiveAnimation.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | D04EE1F01ABFB9AD00AC8E65 /* ReactiveAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D04EE1EF1ABFB9AD00AC8E65 /* ReactiveAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; };
11 | D04EE1F61ABFB9AD00AC8E65 /* ReactiveAnimation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE1EA1ABFB9AD00AC8E65 /* ReactiveAnimation.framework */; };
12 | D04EE1FD1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D04EE1FC1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m */; };
13 | D04EE22E1ABFBA1E00AC8E65 /* ReactiveAnimation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE2231ABFBA1E00AC8E65 /* ReactiveAnimation.framework */; };
14 | D04EE2461ABFBB0200AC8E65 /* ReactiveAnimationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D04EE1FC1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m */; };
15 | D04EE2471ABFBB0400AC8E65 /* ReactiveAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D04EE1EF1ABFB9AD00AC8E65 /* ReactiveAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; };
16 | D04EE24E1ABFBB6900AC8E65 /* LlamaKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */; };
17 | D04EE24F1ABFBB6900AC8E65 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */; };
18 | D04EE2501ABFBB8500AC8E65 /* LlamaKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */; };
19 | D04EE2511ABFBB8500AC8E65 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */; };
20 | D04EE2521ABFBB8900AC8E65 /* LlamaKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */; };
21 | D04EE2531ABFBB8900AC8E65 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */; };
22 | D04EE2541ABFBB9100AC8E65 /* LlamaKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */; };
23 | D04EE2551ABFBB9100AC8E65 /* ReactiveCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */; };
24 | D04EE2571ABFBBB100AC8E65 /* LlamaKit.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
25 | D04EE2581ABFBBB100AC8E65 /* ReactiveCocoa.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
26 | D04EE25C1ABFBBDF00AC8E65 /* SwiftJunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE25B1ABFBBDF00AC8E65 /* SwiftJunk.swift */; };
27 | D04EE25D1ABFBBDF00AC8E65 /* SwiftJunk.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE25B1ABFBBDF00AC8E65 /* SwiftJunk.swift */; };
28 | D04EE2601ABFBD9100AC8E65 /* Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE25F1ABFBD9100AC8E65 /* Animation.swift */; };
29 | D04EE2611ABFBD9100AC8E65 /* Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE25F1ABFBD9100AC8E65 /* Animation.swift */; };
30 | D04EE2671ABFC79200AC8E65 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE2661ABFC79200AC8E65 /* View.swift */; };
31 | D04EE2681ABFC79200AC8E65 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = D04EE2661ABFC79200AC8E65 /* View.swift */; };
32 | /* End PBXBuildFile section */
33 |
34 | /* Begin PBXContainerItemProxy section */
35 | D04EE1F71ABFB9AD00AC8E65 /* PBXContainerItemProxy */ = {
36 | isa = PBXContainerItemProxy;
37 | containerPortal = D04EE1E11ABFB9AD00AC8E65 /* Project object */;
38 | proxyType = 1;
39 | remoteGlobalIDString = D04EE1E91ABFB9AD00AC8E65;
40 | remoteInfo = ReactiveAnimation;
41 | };
42 | D04EE22F1ABFBA1E00AC8E65 /* PBXContainerItemProxy */ = {
43 | isa = PBXContainerItemProxy;
44 | containerPortal = D04EE1E11ABFB9AD00AC8E65 /* Project object */;
45 | proxyType = 1;
46 | remoteGlobalIDString = D04EE2221ABFBA1E00AC8E65;
47 | remoteInfo = ReactiveAnimation;
48 | };
49 | /* End PBXContainerItemProxy section */
50 |
51 | /* Begin PBXCopyFilesBuildPhase section */
52 | D04EE2561ABFBBA900AC8E65 /* Copy Frameworks */ = {
53 | isa = PBXCopyFilesBuildPhase;
54 | buildActionMask = 2147483647;
55 | dstPath = "";
56 | dstSubfolderSpec = 10;
57 | files = (
58 | D04EE2571ABFBBB100AC8E65 /* LlamaKit.framework in Copy Frameworks */,
59 | D04EE2581ABFBBB100AC8E65 /* ReactiveCocoa.framework in Copy Frameworks */,
60 | );
61 | name = "Copy Frameworks";
62 | runOnlyForDeploymentPostprocessing = 0;
63 | };
64 | /* End PBXCopyFilesBuildPhase section */
65 |
66 | /* Begin PBXFileReference section */
67 | D04EE1EA1ABFB9AD00AC8E65 /* ReactiveAnimation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveAnimation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
68 | D04EE1EE1ABFB9AD00AC8E65 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
69 | D04EE1EF1ABFB9AD00AC8E65 /* ReactiveAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReactiveAnimation.h; sourceTree = ""; };
70 | D04EE1F51ABFB9AD00AC8E65 /* ReactiveAnimation-MacTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReactiveAnimation-MacTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
71 | D04EE1FB1ABFB9AD00AC8E65 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
72 | D04EE1FC1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactiveAnimationTests.m; sourceTree = ""; };
73 | D04EE2081ABFB9E100AC8E65 /* Common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Common.xcconfig; sourceTree = ""; };
74 | D04EE20A1ABFB9E100AC8E65 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
75 | D04EE20B1ABFB9E100AC8E65 /* Profile.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Profile.xcconfig; sourceTree = ""; };
76 | D04EE20C1ABFB9E100AC8E65 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
77 | D04EE20D1ABFB9E100AC8E65 /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = ""; };
78 | D04EE20F1ABFB9E100AC8E65 /* Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Application.xcconfig; sourceTree = ""; };
79 | D04EE2101ABFB9E100AC8E65 /* Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Framework.xcconfig; sourceTree = ""; };
80 | D04EE2111ABFB9E100AC8E65 /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = ""; };
81 | D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Application.xcconfig"; sourceTree = ""; };
82 | D04EE2141ABFB9E100AC8E65 /* iOS-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Base.xcconfig"; sourceTree = ""; };
83 | D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-Framework.xcconfig"; sourceTree = ""; };
84 | D04EE2161ABFB9E100AC8E65 /* iOS-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "iOS-StaticLibrary.xcconfig"; sourceTree = ""; };
85 | D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Application.xcconfig"; sourceTree = ""; };
86 | D04EE2191ABFB9E100AC8E65 /* Mac-Base.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Base.xcconfig"; sourceTree = ""; };
87 | D04EE21A1ABFB9E100AC8E65 /* Mac-DynamicLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-DynamicLibrary.xcconfig"; sourceTree = ""; };
88 | D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-Framework.xcconfig"; sourceTree = ""; };
89 | D04EE21C1ABFB9E100AC8E65 /* Mac-StaticLibrary.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Mac-StaticLibrary.xcconfig"; sourceTree = ""; };
90 | D04EE21D1ABFB9E100AC8E65 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
91 | D04EE2231ABFBA1E00AC8E65 /* ReactiveAnimation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactiveAnimation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
92 | D04EE22D1ABFBA1E00AC8E65 /* ReactiveAnimation-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ReactiveAnimation-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
93 | D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = LlamaKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
94 | D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ReactiveCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; };
95 | D04EE2591ABFBBDE00AC8E65 /* ReactiveAnimationTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactiveAnimationTests-Bridging-Header.h"; sourceTree = ""; };
96 | D04EE25B1ABFBBDF00AC8E65 /* SwiftJunk.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftJunk.swift; sourceTree = ""; };
97 | D04EE25F1ABFBD9100AC8E65 /* Animation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Animation.swift; sourceTree = ""; };
98 | D04EE2661ABFC79200AC8E65 /* View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = ""; };
99 | /* End PBXFileReference section */
100 |
101 | /* Begin PBXFrameworksBuildPhase section */
102 | D04EE1E61ABFB9AD00AC8E65 /* Frameworks */ = {
103 | isa = PBXFrameworksBuildPhase;
104 | buildActionMask = 2147483647;
105 | files = (
106 | D04EE24E1ABFBB6900AC8E65 /* LlamaKit.framework in Frameworks */,
107 | D04EE24F1ABFBB6900AC8E65 /* ReactiveCocoa.framework in Frameworks */,
108 | );
109 | runOnlyForDeploymentPostprocessing = 0;
110 | };
111 | D04EE1F21ABFB9AD00AC8E65 /* Frameworks */ = {
112 | isa = PBXFrameworksBuildPhase;
113 | buildActionMask = 2147483647;
114 | files = (
115 | D04EE1F61ABFB9AD00AC8E65 /* ReactiveAnimation.framework in Frameworks */,
116 | D04EE2501ABFBB8500AC8E65 /* LlamaKit.framework in Frameworks */,
117 | D04EE2511ABFBB8500AC8E65 /* ReactiveCocoa.framework in Frameworks */,
118 | );
119 | runOnlyForDeploymentPostprocessing = 0;
120 | };
121 | D04EE21F1ABFBA1E00AC8E65 /* Frameworks */ = {
122 | isa = PBXFrameworksBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | D04EE2521ABFBB8900AC8E65 /* LlamaKit.framework in Frameworks */,
126 | D04EE2531ABFBB8900AC8E65 /* ReactiveCocoa.framework in Frameworks */,
127 | );
128 | runOnlyForDeploymentPostprocessing = 0;
129 | };
130 | D04EE22A1ABFBA1E00AC8E65 /* Frameworks */ = {
131 | isa = PBXFrameworksBuildPhase;
132 | buildActionMask = 2147483647;
133 | files = (
134 | D04EE22E1ABFBA1E00AC8E65 /* ReactiveAnimation.framework in Frameworks */,
135 | D04EE2541ABFBB9100AC8E65 /* LlamaKit.framework in Frameworks */,
136 | D04EE2551ABFBB9100AC8E65 /* ReactiveCocoa.framework in Frameworks */,
137 | );
138 | runOnlyForDeploymentPostprocessing = 0;
139 | };
140 | /* End PBXFrameworksBuildPhase section */
141 |
142 | /* Begin PBXGroup section */
143 | D04EE1E01ABFB9AD00AC8E65 = {
144 | isa = PBXGroup;
145 | children = (
146 | D04EE1EC1ABFB9AD00AC8E65 /* ReactiveAnimation */,
147 | D04EE1F91ABFB9AD00AC8E65 /* ReactiveAnimationTests */,
148 | D04EE2061ABFB9E100AC8E65 /* Configuration */,
149 | D04EE1EB1ABFB9AD00AC8E65 /* Products */,
150 | );
151 | sourceTree = "";
152 | };
153 | D04EE1EB1ABFB9AD00AC8E65 /* Products */ = {
154 | isa = PBXGroup;
155 | children = (
156 | D04EE1EA1ABFB9AD00AC8E65 /* ReactiveAnimation.framework */,
157 | D04EE1F51ABFB9AD00AC8E65 /* ReactiveAnimation-MacTests.xctest */,
158 | D04EE2231ABFBA1E00AC8E65 /* ReactiveAnimation.framework */,
159 | D04EE22D1ABFBA1E00AC8E65 /* ReactiveAnimation-iOSTests.xctest */,
160 | );
161 | name = Products;
162 | sourceTree = "";
163 | };
164 | D04EE1EC1ABFB9AD00AC8E65 /* ReactiveAnimation */ = {
165 | isa = PBXGroup;
166 | children = (
167 | D04EE1EF1ABFB9AD00AC8E65 /* ReactiveAnimation.h */,
168 | D04EE2621ABFC2F500AC8E65 /* Cross-Platform */,
169 | D04EE1ED1ABFB9AD00AC8E65 /* Supporting Files */,
170 | );
171 | path = ReactiveAnimation;
172 | sourceTree = "";
173 | };
174 | D04EE1ED1ABFB9AD00AC8E65 /* Supporting Files */ = {
175 | isa = PBXGroup;
176 | children = (
177 | D04EE24C1ABFBB6900AC8E65 /* LlamaKit.framework */,
178 | D04EE24D1ABFBB6900AC8E65 /* ReactiveCocoa.framework */,
179 | D04EE1EE1ABFB9AD00AC8E65 /* Info.plist */,
180 | );
181 | name = "Supporting Files";
182 | sourceTree = "";
183 | };
184 | D04EE1F91ABFB9AD00AC8E65 /* ReactiveAnimationTests */ = {
185 | isa = PBXGroup;
186 | children = (
187 | D04EE1FC1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m */,
188 | D04EE1FA1ABFB9AD00AC8E65 /* Supporting Files */,
189 | );
190 | path = ReactiveAnimationTests;
191 | sourceTree = "";
192 | };
193 | D04EE1FA1ABFB9AD00AC8E65 /* Supporting Files */ = {
194 | isa = PBXGroup;
195 | children = (
196 | D04EE1FB1ABFB9AD00AC8E65 /* Info.plist */,
197 | D04EE25B1ABFBBDF00AC8E65 /* SwiftJunk.swift */,
198 | D04EE2591ABFBBDE00AC8E65 /* ReactiveAnimationTests-Bridging-Header.h */,
199 | );
200 | name = "Supporting Files";
201 | sourceTree = "";
202 | };
203 | D04EE2061ABFB9E100AC8E65 /* Configuration */ = {
204 | isa = PBXGroup;
205 | children = (
206 | D04EE2071ABFB9E100AC8E65 /* Base */,
207 | D04EE2121ABFB9E100AC8E65 /* iOS */,
208 | D04EE2171ABFB9E100AC8E65 /* Mac OS X */,
209 | D04EE21D1ABFB9E100AC8E65 /* README.md */,
210 | );
211 | name = Configuration;
212 | path = Carthage/Checkouts/xcconfigs;
213 | sourceTree = "";
214 | };
215 | D04EE2071ABFB9E100AC8E65 /* Base */ = {
216 | isa = PBXGroup;
217 | children = (
218 | D04EE2081ABFB9E100AC8E65 /* Common.xcconfig */,
219 | D04EE2091ABFB9E100AC8E65 /* Configurations */,
220 | D04EE20E1ABFB9E100AC8E65 /* Targets */,
221 | );
222 | path = Base;
223 | sourceTree = "";
224 | };
225 | D04EE2091ABFB9E100AC8E65 /* Configurations */ = {
226 | isa = PBXGroup;
227 | children = (
228 | D04EE20A1ABFB9E100AC8E65 /* Debug.xcconfig */,
229 | D04EE20B1ABFB9E100AC8E65 /* Profile.xcconfig */,
230 | D04EE20C1ABFB9E100AC8E65 /* Release.xcconfig */,
231 | D04EE20D1ABFB9E100AC8E65 /* Test.xcconfig */,
232 | );
233 | path = Configurations;
234 | sourceTree = "";
235 | };
236 | D04EE20E1ABFB9E100AC8E65 /* Targets */ = {
237 | isa = PBXGroup;
238 | children = (
239 | D04EE20F1ABFB9E100AC8E65 /* Application.xcconfig */,
240 | D04EE2101ABFB9E100AC8E65 /* Framework.xcconfig */,
241 | D04EE2111ABFB9E100AC8E65 /* StaticLibrary.xcconfig */,
242 | );
243 | path = Targets;
244 | sourceTree = "";
245 | };
246 | D04EE2121ABFB9E100AC8E65 /* iOS */ = {
247 | isa = PBXGroup;
248 | children = (
249 | D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */,
250 | D04EE2141ABFB9E100AC8E65 /* iOS-Base.xcconfig */,
251 | D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */,
252 | D04EE2161ABFB9E100AC8E65 /* iOS-StaticLibrary.xcconfig */,
253 | );
254 | path = iOS;
255 | sourceTree = "";
256 | };
257 | D04EE2171ABFB9E100AC8E65 /* Mac OS X */ = {
258 | isa = PBXGroup;
259 | children = (
260 | D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */,
261 | D04EE2191ABFB9E100AC8E65 /* Mac-Base.xcconfig */,
262 | D04EE21A1ABFB9E100AC8E65 /* Mac-DynamicLibrary.xcconfig */,
263 | D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */,
264 | D04EE21C1ABFB9E100AC8E65 /* Mac-StaticLibrary.xcconfig */,
265 | );
266 | path = "Mac OS X";
267 | sourceTree = "";
268 | };
269 | D04EE2621ABFC2F500AC8E65 /* Cross-Platform */ = {
270 | isa = PBXGroup;
271 | children = (
272 | D04EE25F1ABFBD9100AC8E65 /* Animation.swift */,
273 | D04EE2661ABFC79200AC8E65 /* View.swift */,
274 | );
275 | name = "Cross-Platform";
276 | sourceTree = "";
277 | };
278 | /* End PBXGroup section */
279 |
280 | /* Begin PBXHeadersBuildPhase section */
281 | D04EE1E71ABFB9AD00AC8E65 /* Headers */ = {
282 | isa = PBXHeadersBuildPhase;
283 | buildActionMask = 2147483647;
284 | files = (
285 | D04EE1F01ABFB9AD00AC8E65 /* ReactiveAnimation.h in Headers */,
286 | );
287 | runOnlyForDeploymentPostprocessing = 0;
288 | };
289 | D04EE2201ABFBA1E00AC8E65 /* Headers */ = {
290 | isa = PBXHeadersBuildPhase;
291 | buildActionMask = 2147483647;
292 | files = (
293 | D04EE2471ABFBB0400AC8E65 /* ReactiveAnimation.h in Headers */,
294 | );
295 | runOnlyForDeploymentPostprocessing = 0;
296 | };
297 | /* End PBXHeadersBuildPhase section */
298 |
299 | /* Begin PBXNativeTarget section */
300 | D04EE1E91ABFB9AD00AC8E65 /* ReactiveAnimation-Mac */ = {
301 | isa = PBXNativeTarget;
302 | buildConfigurationList = D04EE2001ABFB9AD00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-Mac" */;
303 | buildPhases = (
304 | D04EE1E51ABFB9AD00AC8E65 /* Sources */,
305 | D04EE1E61ABFB9AD00AC8E65 /* Frameworks */,
306 | D04EE1E71ABFB9AD00AC8E65 /* Headers */,
307 | D04EE1E81ABFB9AD00AC8E65 /* Resources */,
308 | );
309 | buildRules = (
310 | );
311 | dependencies = (
312 | );
313 | name = "ReactiveAnimation-Mac";
314 | productName = ReactiveAnimation;
315 | productReference = D04EE1EA1ABFB9AD00AC8E65 /* ReactiveAnimation.framework */;
316 | productType = "com.apple.product-type.framework";
317 | };
318 | D04EE1F41ABFB9AD00AC8E65 /* ReactiveAnimation-MacTests */ = {
319 | isa = PBXNativeTarget;
320 | buildConfigurationList = D04EE2031ABFB9AD00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-MacTests" */;
321 | buildPhases = (
322 | D04EE1F11ABFB9AD00AC8E65 /* Sources */,
323 | D04EE1F21ABFB9AD00AC8E65 /* Frameworks */,
324 | D04EE1F31ABFB9AD00AC8E65 /* Resources */,
325 | D04EE2561ABFBBA900AC8E65 /* Copy Frameworks */,
326 | );
327 | buildRules = (
328 | );
329 | dependencies = (
330 | D04EE1F81ABFB9AD00AC8E65 /* PBXTargetDependency */,
331 | );
332 | name = "ReactiveAnimation-MacTests";
333 | productName = ReactiveAnimationTests;
334 | productReference = D04EE1F51ABFB9AD00AC8E65 /* ReactiveAnimation-MacTests.xctest */;
335 | productType = "com.apple.product-type.bundle.unit-test";
336 | };
337 | D04EE2221ABFBA1E00AC8E65 /* ReactiveAnimation-iOS */ = {
338 | isa = PBXNativeTarget;
339 | buildConfigurationList = D04EE2361ABFBA1E00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-iOS" */;
340 | buildPhases = (
341 | D04EE21E1ABFBA1E00AC8E65 /* Sources */,
342 | D04EE21F1ABFBA1E00AC8E65 /* Frameworks */,
343 | D04EE2201ABFBA1E00AC8E65 /* Headers */,
344 | D04EE2211ABFBA1E00AC8E65 /* Resources */,
345 | );
346 | buildRules = (
347 | );
348 | dependencies = (
349 | );
350 | name = "ReactiveAnimation-iOS";
351 | productName = ReactiveAnimation;
352 | productReference = D04EE2231ABFBA1E00AC8E65 /* ReactiveAnimation.framework */;
353 | productType = "com.apple.product-type.framework";
354 | };
355 | D04EE22C1ABFBA1E00AC8E65 /* ReactiveAnimation-iOSTests */ = {
356 | isa = PBXNativeTarget;
357 | buildConfigurationList = D04EE2391ABFBA1E00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-iOSTests" */;
358 | buildPhases = (
359 | D04EE2291ABFBA1E00AC8E65 /* Sources */,
360 | D04EE22A1ABFBA1E00AC8E65 /* Frameworks */,
361 | D04EE22B1ABFBA1E00AC8E65 /* Resources */,
362 | );
363 | buildRules = (
364 | );
365 | dependencies = (
366 | D04EE2301ABFBA1E00AC8E65 /* PBXTargetDependency */,
367 | );
368 | name = "ReactiveAnimation-iOSTests";
369 | productName = ReactiveAnimationTests;
370 | productReference = D04EE22D1ABFBA1E00AC8E65 /* ReactiveAnimation-iOSTests.xctest */;
371 | productType = "com.apple.product-type.bundle.unit-test";
372 | };
373 | /* End PBXNativeTarget section */
374 |
375 | /* Begin PBXProject section */
376 | D04EE1E11ABFB9AD00AC8E65 /* Project object */ = {
377 | isa = PBXProject;
378 | attributes = {
379 | CLASSPREFIX = RAN;
380 | LastUpgradeCheck = 0630;
381 | ORGANIZATIONNAME = ReactiveCocoa;
382 | TargetAttributes = {
383 | D04EE1E91ABFB9AD00AC8E65 = {
384 | CreatedOnToolsVersion = 6.3;
385 | };
386 | D04EE1F41ABFB9AD00AC8E65 = {
387 | CreatedOnToolsVersion = 6.3;
388 | };
389 | D04EE2221ABFBA1E00AC8E65 = {
390 | CreatedOnToolsVersion = 6.3;
391 | };
392 | D04EE22C1ABFBA1E00AC8E65 = {
393 | CreatedOnToolsVersion = 6.3;
394 | };
395 | };
396 | };
397 | buildConfigurationList = D04EE1E41ABFB9AD00AC8E65 /* Build configuration list for PBXProject "ReactiveAnimation" */;
398 | compatibilityVersion = "Xcode 3.2";
399 | developmentRegion = English;
400 | hasScannedForEncodings = 0;
401 | knownRegions = (
402 | en,
403 | );
404 | mainGroup = D04EE1E01ABFB9AD00AC8E65;
405 | productRefGroup = D04EE1EB1ABFB9AD00AC8E65 /* Products */;
406 | projectDirPath = "";
407 | projectRoot = "";
408 | targets = (
409 | D04EE1E91ABFB9AD00AC8E65 /* ReactiveAnimation-Mac */,
410 | D04EE1F41ABFB9AD00AC8E65 /* ReactiveAnimation-MacTests */,
411 | D04EE2221ABFBA1E00AC8E65 /* ReactiveAnimation-iOS */,
412 | D04EE22C1ABFBA1E00AC8E65 /* ReactiveAnimation-iOSTests */,
413 | );
414 | };
415 | /* End PBXProject section */
416 |
417 | /* Begin PBXResourcesBuildPhase section */
418 | D04EE1E81ABFB9AD00AC8E65 /* Resources */ = {
419 | isa = PBXResourcesBuildPhase;
420 | buildActionMask = 2147483647;
421 | files = (
422 | );
423 | runOnlyForDeploymentPostprocessing = 0;
424 | };
425 | D04EE1F31ABFB9AD00AC8E65 /* Resources */ = {
426 | isa = PBXResourcesBuildPhase;
427 | buildActionMask = 2147483647;
428 | files = (
429 | );
430 | runOnlyForDeploymentPostprocessing = 0;
431 | };
432 | D04EE2211ABFBA1E00AC8E65 /* Resources */ = {
433 | isa = PBXResourcesBuildPhase;
434 | buildActionMask = 2147483647;
435 | files = (
436 | );
437 | runOnlyForDeploymentPostprocessing = 0;
438 | };
439 | D04EE22B1ABFBA1E00AC8E65 /* Resources */ = {
440 | isa = PBXResourcesBuildPhase;
441 | buildActionMask = 2147483647;
442 | files = (
443 | );
444 | runOnlyForDeploymentPostprocessing = 0;
445 | };
446 | /* End PBXResourcesBuildPhase section */
447 |
448 | /* Begin PBXSourcesBuildPhase section */
449 | D04EE1E51ABFB9AD00AC8E65 /* Sources */ = {
450 | isa = PBXSourcesBuildPhase;
451 | buildActionMask = 2147483647;
452 | files = (
453 | D04EE2671ABFC79200AC8E65 /* View.swift in Sources */,
454 | D04EE2601ABFBD9100AC8E65 /* Animation.swift in Sources */,
455 | );
456 | runOnlyForDeploymentPostprocessing = 0;
457 | };
458 | D04EE1F11ABFB9AD00AC8E65 /* Sources */ = {
459 | isa = PBXSourcesBuildPhase;
460 | buildActionMask = 2147483647;
461 | files = (
462 | D04EE1FD1ABFB9AD00AC8E65 /* ReactiveAnimationTests.m in Sources */,
463 | D04EE25C1ABFBBDF00AC8E65 /* SwiftJunk.swift in Sources */,
464 | );
465 | runOnlyForDeploymentPostprocessing = 0;
466 | };
467 | D04EE21E1ABFBA1E00AC8E65 /* Sources */ = {
468 | isa = PBXSourcesBuildPhase;
469 | buildActionMask = 2147483647;
470 | files = (
471 | D04EE2681ABFC79200AC8E65 /* View.swift in Sources */,
472 | D04EE2611ABFBD9100AC8E65 /* Animation.swift in Sources */,
473 | );
474 | runOnlyForDeploymentPostprocessing = 0;
475 | };
476 | D04EE2291ABFBA1E00AC8E65 /* Sources */ = {
477 | isa = PBXSourcesBuildPhase;
478 | buildActionMask = 2147483647;
479 | files = (
480 | D04EE2461ABFBB0200AC8E65 /* ReactiveAnimationTests.m in Sources */,
481 | D04EE25D1ABFBBDF00AC8E65 /* SwiftJunk.swift in Sources */,
482 | );
483 | runOnlyForDeploymentPostprocessing = 0;
484 | };
485 | /* End PBXSourcesBuildPhase section */
486 |
487 | /* Begin PBXTargetDependency section */
488 | D04EE1F81ABFB9AD00AC8E65 /* PBXTargetDependency */ = {
489 | isa = PBXTargetDependency;
490 | target = D04EE1E91ABFB9AD00AC8E65 /* ReactiveAnimation-Mac */;
491 | targetProxy = D04EE1F71ABFB9AD00AC8E65 /* PBXContainerItemProxy */;
492 | };
493 | D04EE2301ABFBA1E00AC8E65 /* PBXTargetDependency */ = {
494 | isa = PBXTargetDependency;
495 | target = D04EE2221ABFBA1E00AC8E65 /* ReactiveAnimation-iOS */;
496 | targetProxy = D04EE22F1ABFBA1E00AC8E65 /* PBXContainerItemProxy */;
497 | };
498 | /* End PBXTargetDependency section */
499 |
500 | /* Begin XCBuildConfiguration section */
501 | D04EE1FE1ABFB9AD00AC8E65 /* Debug */ = {
502 | isa = XCBuildConfiguration;
503 | baseConfigurationReference = D04EE20A1ABFB9E100AC8E65 /* Debug.xcconfig */;
504 | buildSettings = {
505 | CURRENT_PROJECT_VERSION = 1;
506 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
507 | MACOSX_DEPLOYMENT_TARGET = 10.9;
508 | PRODUCT_NAME = "$(PROJECT_NAME)";
509 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
510 | TARGETED_DEVICE_FAMILY = "1,2";
511 | VERSIONING_SYSTEM = "apple-generic";
512 | VERSION_INFO_PREFIX = "";
513 | };
514 | name = Debug;
515 | };
516 | D04EE1FF1ABFB9AD00AC8E65 /* Release */ = {
517 | isa = XCBuildConfiguration;
518 | baseConfigurationReference = D04EE20C1ABFB9E100AC8E65 /* Release.xcconfig */;
519 | buildSettings = {
520 | CURRENT_PROJECT_VERSION = 1;
521 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
522 | MACOSX_DEPLOYMENT_TARGET = 10.9;
523 | PRODUCT_NAME = "$(PROJECT_NAME)";
524 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
525 | TARGETED_DEVICE_FAMILY = "1,2";
526 | VERSIONING_SYSTEM = "apple-generic";
527 | VERSION_INFO_PREFIX = "";
528 | };
529 | name = Release;
530 | };
531 | D04EE2011ABFB9AD00AC8E65 /* Debug */ = {
532 | isa = XCBuildConfiguration;
533 | baseConfigurationReference = D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */;
534 | buildSettings = {
535 | DYLIB_COMPATIBILITY_VERSION = 1;
536 | DYLIB_CURRENT_VERSION = 1;
537 | FRAMEWORK_VERSION = A;
538 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
539 | };
540 | name = Debug;
541 | };
542 | D04EE2021ABFB9AD00AC8E65 /* Release */ = {
543 | isa = XCBuildConfiguration;
544 | baseConfigurationReference = D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */;
545 | buildSettings = {
546 | DYLIB_COMPATIBILITY_VERSION = 1;
547 | DYLIB_CURRENT_VERSION = 1;
548 | FRAMEWORK_VERSION = A;
549 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
550 | };
551 | name = Release;
552 | };
553 | D04EE2041ABFB9AD00AC8E65 /* Debug */ = {
554 | isa = XCBuildConfiguration;
555 | baseConfigurationReference = D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */;
556 | buildSettings = {
557 | FRAMEWORK_SEARCH_PATHS = (
558 | "$(DEVELOPER_FRAMEWORKS_DIR)",
559 | "$(inherited)",
560 | );
561 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
562 | PRODUCT_NAME = "$(TARGET_NAME)";
563 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
564 | };
565 | name = Debug;
566 | };
567 | D04EE2051ABFB9AD00AC8E65 /* Release */ = {
568 | isa = XCBuildConfiguration;
569 | baseConfigurationReference = D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */;
570 | buildSettings = {
571 | FRAMEWORK_SEARCH_PATHS = (
572 | "$(DEVELOPER_FRAMEWORKS_DIR)",
573 | "$(inherited)",
574 | );
575 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
576 | PRODUCT_NAME = "$(TARGET_NAME)";
577 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
578 | };
579 | name = Release;
580 | };
581 | D04EE2371ABFBA1E00AC8E65 /* Debug */ = {
582 | isa = XCBuildConfiguration;
583 | baseConfigurationReference = D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */;
584 | buildSettings = {
585 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
586 | DYLIB_COMPATIBILITY_VERSION = 1;
587 | DYLIB_CURRENT_VERSION = 1;
588 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
589 | };
590 | name = Debug;
591 | };
592 | D04EE2381ABFBA1E00AC8E65 /* Release */ = {
593 | isa = XCBuildConfiguration;
594 | baseConfigurationReference = D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */;
595 | buildSettings = {
596 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
597 | DYLIB_COMPATIBILITY_VERSION = 1;
598 | DYLIB_CURRENT_VERSION = 1;
599 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
600 | };
601 | name = Release;
602 | };
603 | D04EE23A1ABFBA1E00AC8E65 /* Debug */ = {
604 | isa = XCBuildConfiguration;
605 | baseConfigurationReference = D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */;
606 | buildSettings = {
607 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
608 | FRAMEWORK_SEARCH_PATHS = (
609 | "$(SDKROOT)/Developer/Library/Frameworks",
610 | "$(inherited)",
611 | );
612 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
613 | PRODUCT_NAME = "$(TARGET_NAME)";
614 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
615 | };
616 | name = Debug;
617 | };
618 | D04EE23B1ABFBA1E00AC8E65 /* Release */ = {
619 | isa = XCBuildConfiguration;
620 | baseConfigurationReference = D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */;
621 | buildSettings = {
622 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
623 | FRAMEWORK_SEARCH_PATHS = (
624 | "$(SDKROOT)/Developer/Library/Frameworks",
625 | "$(inherited)",
626 | );
627 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
628 | PRODUCT_NAME = "$(TARGET_NAME)";
629 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
630 | };
631 | name = Release;
632 | };
633 | D04EE23C1ABFBA8800AC8E65 /* Profile */ = {
634 | isa = XCBuildConfiguration;
635 | baseConfigurationReference = D04EE20B1ABFB9E100AC8E65 /* Profile.xcconfig */;
636 | buildSettings = {
637 | CURRENT_PROJECT_VERSION = 1;
638 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
639 | MACOSX_DEPLOYMENT_TARGET = 10.9;
640 | PRODUCT_NAME = "$(PROJECT_NAME)";
641 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
642 | TARGETED_DEVICE_FAMILY = "1,2";
643 | VERSIONING_SYSTEM = "apple-generic";
644 | VERSION_INFO_PREFIX = "";
645 | };
646 | name = Profile;
647 | };
648 | D04EE23D1ABFBA8800AC8E65 /* Profile */ = {
649 | isa = XCBuildConfiguration;
650 | baseConfigurationReference = D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */;
651 | buildSettings = {
652 | DYLIB_COMPATIBILITY_VERSION = 1;
653 | DYLIB_CURRENT_VERSION = 1;
654 | FRAMEWORK_VERSION = A;
655 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
656 | };
657 | name = Profile;
658 | };
659 | D04EE23E1ABFBA8800AC8E65 /* Profile */ = {
660 | isa = XCBuildConfiguration;
661 | baseConfigurationReference = D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */;
662 | buildSettings = {
663 | FRAMEWORK_SEARCH_PATHS = (
664 | "$(DEVELOPER_FRAMEWORKS_DIR)",
665 | "$(inherited)",
666 | );
667 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
668 | PRODUCT_NAME = "$(TARGET_NAME)";
669 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
670 | };
671 | name = Profile;
672 | };
673 | D04EE23F1ABFBA8800AC8E65 /* Profile */ = {
674 | isa = XCBuildConfiguration;
675 | baseConfigurationReference = D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */;
676 | buildSettings = {
677 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
678 | DYLIB_COMPATIBILITY_VERSION = 1;
679 | DYLIB_CURRENT_VERSION = 1;
680 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
681 | };
682 | name = Profile;
683 | };
684 | D04EE2401ABFBA8800AC8E65 /* Profile */ = {
685 | isa = XCBuildConfiguration;
686 | baseConfigurationReference = D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */;
687 | buildSettings = {
688 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
689 | FRAMEWORK_SEARCH_PATHS = (
690 | "$(SDKROOT)/Developer/Library/Frameworks",
691 | "$(inherited)",
692 | );
693 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
694 | PRODUCT_NAME = "$(TARGET_NAME)";
695 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
696 | };
697 | name = Profile;
698 | };
699 | D04EE2411ABFBA8D00AC8E65 /* Test */ = {
700 | isa = XCBuildConfiguration;
701 | baseConfigurationReference = D04EE20D1ABFB9E100AC8E65 /* Test.xcconfig */;
702 | buildSettings = {
703 | CURRENT_PROJECT_VERSION = 1;
704 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
705 | MACOSX_DEPLOYMENT_TARGET = 10.9;
706 | PRODUCT_NAME = "$(PROJECT_NAME)";
707 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
708 | TARGETED_DEVICE_FAMILY = "1,2";
709 | VERSIONING_SYSTEM = "apple-generic";
710 | VERSION_INFO_PREFIX = "";
711 | };
712 | name = Test;
713 | };
714 | D04EE2421ABFBA8D00AC8E65 /* Test */ = {
715 | isa = XCBuildConfiguration;
716 | baseConfigurationReference = D04EE21B1ABFB9E100AC8E65 /* Mac-Framework.xcconfig */;
717 | buildSettings = {
718 | DYLIB_COMPATIBILITY_VERSION = 1;
719 | DYLIB_CURRENT_VERSION = 1;
720 | FRAMEWORK_VERSION = A;
721 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
722 | };
723 | name = Test;
724 | };
725 | D04EE2431ABFBA8D00AC8E65 /* Test */ = {
726 | isa = XCBuildConfiguration;
727 | baseConfigurationReference = D04EE2181ABFB9E100AC8E65 /* Mac-Application.xcconfig */;
728 | buildSettings = {
729 | FRAMEWORK_SEARCH_PATHS = (
730 | "$(DEVELOPER_FRAMEWORKS_DIR)",
731 | "$(inherited)",
732 | );
733 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
734 | PRODUCT_NAME = "$(TARGET_NAME)";
735 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
736 | };
737 | name = Test;
738 | };
739 | D04EE2441ABFBA8D00AC8E65 /* Test */ = {
740 | isa = XCBuildConfiguration;
741 | baseConfigurationReference = D04EE2151ABFB9E100AC8E65 /* iOS-Framework.xcconfig */;
742 | buildSettings = {
743 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
744 | DYLIB_COMPATIBILITY_VERSION = 1;
745 | DYLIB_CURRENT_VERSION = 1;
746 | INFOPLIST_FILE = ReactiveAnimation/Info.plist;
747 | };
748 | name = Test;
749 | };
750 | D04EE2451ABFBA8D00AC8E65 /* Test */ = {
751 | isa = XCBuildConfiguration;
752 | baseConfigurationReference = D04EE2131ABFB9E100AC8E65 /* iOS-Application.xcconfig */;
753 | buildSettings = {
754 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
755 | FRAMEWORK_SEARCH_PATHS = (
756 | "$(SDKROOT)/Developer/Library/Frameworks",
757 | "$(inherited)",
758 | );
759 | INFOPLIST_FILE = ReactiveAnimationTests/Info.plist;
760 | PRODUCT_NAME = "$(TARGET_NAME)";
761 | SWIFT_OBJC_BRIDGING_HEADER = "ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h";
762 | };
763 | name = Test;
764 | };
765 | /* End XCBuildConfiguration section */
766 |
767 | /* Begin XCConfigurationList section */
768 | D04EE1E41ABFB9AD00AC8E65 /* Build configuration list for PBXProject "ReactiveAnimation" */ = {
769 | isa = XCConfigurationList;
770 | buildConfigurations = (
771 | D04EE1FE1ABFB9AD00AC8E65 /* Debug */,
772 | D04EE2411ABFBA8D00AC8E65 /* Test */,
773 | D04EE1FF1ABFB9AD00AC8E65 /* Release */,
774 | D04EE23C1ABFBA8800AC8E65 /* Profile */,
775 | );
776 | defaultConfigurationIsVisible = 0;
777 | defaultConfigurationName = Release;
778 | };
779 | D04EE2001ABFB9AD00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-Mac" */ = {
780 | isa = XCConfigurationList;
781 | buildConfigurations = (
782 | D04EE2011ABFB9AD00AC8E65 /* Debug */,
783 | D04EE2421ABFBA8D00AC8E65 /* Test */,
784 | D04EE2021ABFB9AD00AC8E65 /* Release */,
785 | D04EE23D1ABFBA8800AC8E65 /* Profile */,
786 | );
787 | defaultConfigurationIsVisible = 0;
788 | defaultConfigurationName = Release;
789 | };
790 | D04EE2031ABFB9AD00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-MacTests" */ = {
791 | isa = XCConfigurationList;
792 | buildConfigurations = (
793 | D04EE2041ABFB9AD00AC8E65 /* Debug */,
794 | D04EE2431ABFBA8D00AC8E65 /* Test */,
795 | D04EE2051ABFB9AD00AC8E65 /* Release */,
796 | D04EE23E1ABFBA8800AC8E65 /* Profile */,
797 | );
798 | defaultConfigurationIsVisible = 0;
799 | defaultConfigurationName = Release;
800 | };
801 | D04EE2361ABFBA1E00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-iOS" */ = {
802 | isa = XCConfigurationList;
803 | buildConfigurations = (
804 | D04EE2371ABFBA1E00AC8E65 /* Debug */,
805 | D04EE2441ABFBA8D00AC8E65 /* Test */,
806 | D04EE2381ABFBA1E00AC8E65 /* Release */,
807 | D04EE23F1ABFBA8800AC8E65 /* Profile */,
808 | );
809 | defaultConfigurationIsVisible = 0;
810 | };
811 | D04EE2391ABFBA1E00AC8E65 /* Build configuration list for PBXNativeTarget "ReactiveAnimation-iOSTests" */ = {
812 | isa = XCConfigurationList;
813 | buildConfigurations = (
814 | D04EE23A1ABFBA1E00AC8E65 /* Debug */,
815 | D04EE2451ABFBA8D00AC8E65 /* Test */,
816 | D04EE23B1ABFBA1E00AC8E65 /* Release */,
817 | D04EE2401ABFBA8800AC8E65 /* Profile */,
818 | );
819 | defaultConfigurationIsVisible = 0;
820 | };
821 | /* End XCConfigurationList section */
822 | };
823 | rootObject = D04EE1E11ABFB9AD00AC8E65 /* Project object */;
824 | }
825 |
--------------------------------------------------------------------------------
/ReactiveAnimation.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ReactiveAnimation.xcodeproj/xcshareddata/xcschemes/ReactiveAnimation Mac.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/ReactiveAnimation.xcodeproj/xcshareddata/xcschemes/ReactiveAnimation iOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/ReactiveAnimation.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/ReactiveAnimation/Animation.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Animation.swift
3 | // ReactiveAnimation
4 | //
5 | // Created by Justin Spahr-Summers on 2015-03-22.
6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved.
7 | //
8 |
9 | #if os(OSX)
10 | import AppKit
11 |
12 | public typealias AnimationCurveRawValue = Int
13 | #elseif os(iOS)
14 | import UIKit
15 |
16 | public typealias AnimationCurveRawValue = UIViewAnimationCurve.RawValue
17 | #endif
18 |
19 | import ReactiveCocoa
20 |
21 | /// Creates an animated SignalProducer for each value that arrives on
22 | /// `producer`.
23 | ///
24 | /// The `JoinStrategy` used on the inner producers will hint to
25 | /// ReactiveAnimation whether the animations should be interruptible:
26 | ///
27 | /// - `Concat` will result in new animations only beginning after all previous
28 | /// animations have completed.
29 | /// - `Merge` or `Latest` will start new animations as soon as possible, and
30 | /// use the current (in progress) UI state for animating.
31 | ///
32 | /// These animation behaviors are only a hint, and the framework may not be able
33 | /// to satisfy them.
34 | ///
35 | /// However the inner producers are joined, binding the resulting stream of
36 | /// values to a view property will result in those value changes being
37 | /// automatically animated.
38 | ///
39 | /// To delay an animation, use delay() or throttle() _before_ this function.
40 | /// Because the aforementioned operators delay delivery of `Next` events,
41 | /// applying them _after_ this function may cause values to be delivered outside
42 | /// of any animation block.
43 | ///
44 | /// Examples
45 | ///
46 | /// RAN(self.textField).alpha <~ alphaValues
47 | /// |> animateEach(duration: 0.2)
48 | /// /* Animate alpha without interruption. */
49 | /// |> join(.Concat)
50 | ///
51 | /// RAN(self.button).alpha <~ alphaValues
52 | /// /* Delay animations by 0.1 seconds. */
53 | /// |> delay(0.1)
54 | /// |> animateEach(curve: .Linear)
55 | /// /* Animate alpha, and interrupt for new animations. */
56 | /// |> join(.Latest)
57 | ///
58 | /// Returns a producer of producers, where each inner producer sends one `next`
59 | /// that corresponds to a value from the receiver, then completes when the
60 | /// animation corresponding to that value has finished. Deferring the events of
61 | /// the returned producer or having them delivered on another thread is considered
62 | /// undefined behavior.
63 | public func animateEach(duration: NSTimeInterval? = nil, curve: AnimationCurve = .Default)(producer: SignalProducer) -> SignalProducer, Error> {
64 | return producer |> map { value in
65 | return SignalProducer { observer, disposable in
66 | OSAtomicIncrement32(&runningInAnimationCount)
67 | disposable.addDisposable {
68 | OSAtomicDecrement32(&runningInAnimationCount)
69 | }
70 |
71 | #if os(OSX)
72 | NSAnimationContext.runAnimationGroup({ context in
73 | if let duration = duration {
74 | context.duration = duration
75 | }
76 |
77 | if curve != .Default {
78 | context.timingFunction = CAMediaTimingFunction(name: curve.mediaTimingFunction)
79 | }
80 |
81 | sendNext(observer, value)
82 | }, completionHandler: {
83 | // Avoids weird AppKit deadlocks when interrupting an
84 | // existing animation.
85 | UIScheduler().schedule {
86 | sendCompleted(observer)
87 | }
88 | })
89 | #elseif os(iOS)
90 | var options = UIViewAnimationOptions(UInt(curve.rawValue))
91 | options |= UIViewAnimationOptions.LayoutSubviews
92 | options |= UIViewAnimationOptions.BeginFromCurrentState
93 | if curve != .Default {
94 | options |= UIViewAnimationOptions.OverrideInheritedCurve
95 | }
96 |
97 | UIView.animateWithDuration(duration ?? 0.2, delay: 0, options: options, animations: {
98 | sendNext(observer, value)
99 | }, completion: { finished in
100 | if finished {
101 | sendCompleted(observer)
102 | } else {
103 | sendInterrupted(observer)
104 | }
105 | })
106 | #endif
107 | }
108 | }
109 | }
110 |
111 | /// The number of animated signals in the call stack.
112 | ///
113 | /// This variable should be manipulated with OSAtomic functions.
114 | private var runningInAnimationCount: Int32 = 0
115 |
116 | /// Determines whether the calling code is running from within an animation
117 | /// definition.
118 | ///
119 | /// This can be used to conditionalize behavior based on whether a signal
120 | /// somewhere in the chain is supposed to be animated.
121 | ///
122 | /// This property is thread-safe.
123 | public var runningInAnimation: Bool {
124 | return runningInAnimationCount > 0
125 | }
126 |
127 | /// Describes the curve (timing function) for an animation.
128 | public enum AnimationCurve: AnimationCurveRawValue, Equatable {
129 | /// The default or inherited animation curve.
130 | case Default = 0
131 |
132 | /// Begins the animation slowly, speeds up in the middle, then slows to
133 | /// a stop.
134 | case EaseInOut
135 | #if os(iOS)
136 | = UIViewAnimationCurve.EaseInOut
137 | #endif
138 |
139 | /// Begins the animation slowly and speeds up to a stop.
140 | case EaseIn
141 | #if os(iOS)
142 | = UIViewAnimationCurve.EaseIn
143 | #endif
144 |
145 | /// Begins the animation quickly and slows down to a stop.
146 | case EaseOut
147 | #if os(iOS)
148 | = UIViewAnimationCurve.EaseOut
149 | #endif
150 |
151 | /// Animates with the same pace over the duration of the animation.
152 | case Linear
153 | #if os(iOS)
154 | = UIViewAnimationCurve.Linear
155 | #endif
156 |
157 | /// The name of the CAMediaTimingFunction corresponding to this curve.
158 | public var mediaTimingFunction: String {
159 | switch self {
160 | case .Default:
161 | return kCAMediaTimingFunctionDefault
162 |
163 | case .EaseInOut:
164 | return kCAMediaTimingFunctionEaseInEaseOut
165 |
166 | case .EaseIn:
167 | return kCAMediaTimingFunctionEaseIn
168 |
169 | case .EaseOut:
170 | return kCAMediaTimingFunctionEaseOut
171 |
172 | case .Linear:
173 | return kCAMediaTimingFunctionLinear
174 | }
175 | }
176 | }
177 |
178 | public func == (lhs: AnimationCurve, rhs: AnimationCurve) -> Bool {
179 | switch (lhs, rhs) {
180 | case (.Default, .Default), (.EaseInOut, .EaseInOut), (.EaseIn, .EaseIn), (.EaseOut, .EaseOut), (.Linear, .Linear):
181 | return true
182 |
183 | default:
184 | return false
185 | }
186 | }
187 |
188 | extension AnimationCurve: Printable {
189 | public var description: String {
190 | switch self {
191 | case .Default:
192 | return "Default"
193 |
194 | case .EaseInOut:
195 | return "EaseInOut"
196 |
197 | case .EaseIn:
198 | return "EaseIn"
199 |
200 | case .EaseOut:
201 | return "EaseOut"
202 |
203 | case .Linear:
204 | return "Linear"
205 | }
206 | }
207 | }
208 |
--------------------------------------------------------------------------------
/ReactiveAnimation/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(CURRENT_PROJECT_VERSION)
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ReactiveAnimation/ReactiveAnimation.h:
--------------------------------------------------------------------------------
1 | //
2 | // ReactiveAnimation.h
3 | // ReactiveAnimation
4 | //
5 | // Created by Justin Spahr-Summers on 2015-03-22.
6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | //! Project version number for ReactiveAnimation.
12 | FOUNDATION_EXPORT double ReactiveAnimationVersionNumber;
13 |
14 | //! Project version string for ReactiveAnimation.
15 | FOUNDATION_EXPORT const unsigned char ReactiveAnimationVersionString[];
16 |
17 | // In this header, you should import all the public headers of your framework using statements like #import
18 |
19 |
20 |
--------------------------------------------------------------------------------
/ReactiveAnimation/View.swift:
--------------------------------------------------------------------------------
1 | //
2 | // View.swift
3 | // ReactiveAnimation
4 | //
5 | // Created by Justin Spahr-Summers on 2015-03-22.
6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved.
7 | //
8 |
9 | #if os(OSX)
10 | import AppKit
11 |
12 | public typealias View = NSView
13 | #elseif os(iOS)
14 | import UIKit
15 |
16 | public typealias View = UIView
17 | #endif
18 |
19 | import ReactiveCocoa
20 |
21 | /// Wraps an NSView or UIView with bindable properties for animations.
22 | public struct RAN {
23 | private weak var view: View?
24 | private let willDealloc: SignalProducer<(), NoError>
25 |
26 | private var animator: View? {
27 | #if os(OSX)
28 | if runningInAnimation {
29 | return view.map { $0.animator() }
30 | }
31 | #endif
32 |
33 | return view
34 | }
35 |
36 | /// Creates a wrapper for the given view's properties.
37 | public init(_ view: View) {
38 | self.view = view
39 | self.willDealloc = view.rac_willDeallocSignal().toSignalProducer()
40 | |> map { _ in () }
41 | |> catch { error in
42 | assert(false, "rac_willDeallocSignal failed with error: \(error)")
43 | return .empty
44 | }
45 | }
46 |
47 | private func viewProperty(setter: T -> ()) -> ViewProperty {
48 | return ViewProperty(willDealloc: self.willDealloc, setter: setter)
49 | }
50 |
51 | public var frame: ViewProperty {
52 | return viewProperty { self.animator?.frame = $0 }
53 | }
54 |
55 | public var bounds: ViewProperty {
56 | return viewProperty { self.animator?.bounds = $0 }
57 | }
58 |
59 | #if os(iOS)
60 | public var center: ViewProperty {
61 | return viewProperty { self.animator?.center = $0 }
62 | }
63 |
64 | public var backgroundColor: ViewProperty {
65 | return viewProperty { self.animator?.backgroundColor = $0 }
66 | }
67 |
68 | public var transform: ViewProperty {
69 | return viewProperty { self.animator?.transform = $0 }
70 | }
71 | #endif
72 |
73 | public var alpha: ViewProperty {
74 | return viewProperty { value in
75 | #if os(OSX)
76 | self.animator?.alphaValue = value
77 | #elseif os(iOS)
78 | self.animator?.alpha = value
79 | #endif
80 | }
81 | }
82 |
83 | #if os(OSX)
84 | public var frameOrigin: ViewProperty {
85 | return viewProperty { self.animator?.setFrameOrigin($0) }
86 | }
87 |
88 | public var frameSize: ViewProperty {
89 | return viewProperty { self.animator?.setFrameSize($0) }
90 | }
91 |
92 | public var boundsOrigin: ViewProperty {
93 | return viewProperty { self.animator?.setBoundsOrigin($0) }
94 | }
95 |
96 | public var boundsSize: ViewProperty {
97 | return viewProperty { self.animator?.setBoundsSize($0) }
98 | }
99 | #endif
100 |
101 | }
102 |
103 | /// A property on a view that can be animated.
104 | public struct ViewProperty {
105 | private let willDealloc: SignalProducer<(), NoError>
106 | private let setter: T -> ()
107 | }
108 |
109 | extension ViewProperty: SinkType {
110 | public func put(value: T) {
111 | setter(value)
112 | }
113 | }
114 |
115 | /// Binds a (potentially animated) signal to a view property.
116 | public func <~ (property: ViewProperty, signal: Signal) -> Disposable {
117 | let disposable = CompositeDisposable()
118 | let propertyDisposable = property.willDealloc.start(completed: {
119 | disposable.dispose()
120 | })
121 |
122 | disposable.addDisposable(propertyDisposable)
123 |
124 | let signalDisposable = signal.observe(next: property.setter, completed: {
125 | disposable.dispose()
126 | })
127 |
128 | disposable.addDisposable(signalDisposable)
129 | return disposable
130 | }
131 |
132 | /// Binds a (potentially animated) signal producer to a view property.
133 | public func <~ (property: ViewProperty, producer: SignalProducer) -> Disposable {
134 | var disposable: Disposable!
135 |
136 | producer.startWithSignal { signal, signalDisposable in
137 | property <~ signal
138 | disposable = signalDisposable
139 |
140 | property.willDealloc.start(completed: {
141 | signalDisposable.dispose()
142 | })
143 | }
144 |
145 | return disposable
146 | }
147 |
148 | /// Binds the view property to the latest values of `sourceProperty`.
149 | public func <~ (destinationProperty: ViewProperty, sourceProperty: P) -> Disposable {
150 | return destinationProperty <~ sourceProperty.producer
151 | }
152 |
--------------------------------------------------------------------------------
/ReactiveAnimationTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactivecocoa.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ReactiveAnimationTests/ReactiveAnimationTests-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
5 |
--------------------------------------------------------------------------------
/ReactiveAnimationTests/ReactiveAnimationTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // ReactiveAnimationTests.m
3 | // ReactiveAnimationTests
4 | //
5 | // Created by Justin Spahr-Summers on 2015-03-22.
6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ReactiveAnimationTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation ReactiveAnimationTests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 | // Put setup code here. This method is called before the invocation of each test method in the class.
20 | }
21 |
22 | - (void)tearDown {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample {
28 | // This is an example of a functional test case.
29 | XCTAssert(YES, @"Pass");
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/ReactiveAnimationTests/SwiftJunk.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftJunk.swift
3 | // ReactiveAnimation
4 | //
5 | // Created by Justin Spahr-Summers on 2015-03-22.
6 | // Copyright (c) 2015 ReactiveCocoa. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import LlamaKit
11 | import ReactiveCocoa
12 | import XCTest
13 |
14 | // Forces Xcode to link the Swift stdlib.
15 | final class SwiftJunkSpec: XCTestCase {}
16 |
--------------------------------------------------------------------------------