@@ -75,12 +75,16 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
75
75
76
76
@implementation LPViewAnimation : CPAnimation
77
77
{
78
- BOOL _isAnimating;
78
+ BOOL _isAnimating;
79
79
80
- CPArray _viewAnimations @accessors (property= viewAnimations);
81
- id _animationDidEndTimeout;
80
+ CPArray _viewAnimations @accessors (property= viewAnimations);
81
+ id _animationDidEndTimeout;
82
82
83
- BOOL _shouldUseCSSAnimations @accessors (property= shouldUseCSSAnimations);
83
+ BOOL _shouldUseCSSAnimations @accessors (property= shouldUseCSSAnimations);
84
+
85
+ // Curve
86
+ CPArray _c1;
87
+ CPArray _c2;
84
88
}
85
89
86
90
- (void )initWithViewAnimations : (CPArray )viewAnimations
@@ -95,6 +99,17 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
95
99
return self ;
96
100
}
97
101
102
+ - (void )setAnimationCurve : (id )anAnimationCurve
103
+ {
104
+ [super setAnimationCurve: anAnimationCurve];
105
+
106
+ _c1 = [];
107
+ _c2 = [];
108
+
109
+ [_timingFunction getControlPointAtIndex: 1 values: _c1];
110
+ [_timingFunction getControlPointAtIndex: 2 values: _c2];
111
+ }
112
+
98
113
- (void )startAnimation
99
114
{
100
115
if (LPCSSAnimationsAreAvailable && _shouldUseCSSAnimations)
@@ -104,7 +119,8 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
104
119
105
120
_isAnimating = YES ;
106
121
107
- for (var i = 0 ; i < _viewAnimations .length ; i++ )
122
+ var i = _viewAnimations .length ;
123
+ while (i-- )
108
124
{
109
125
var viewAnimation = _viewAnimations[i],
110
126
target = viewAnimation[@" target" ];
@@ -113,7 +129,8 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
113
129
[self target: target setCSSAnimationDuration: _duration];
114
130
[self target: target setCSSAnimationCurve: _animationCurve];
115
131
116
- for (var x = 0 ; x < viewAnimation[@" animations" ].length ; x++ )
132
+ var x = viewAnimation[@" animations" ].length ;
133
+ while (x-- )
117
134
{
118
135
var animation = viewAnimation[@" animations" ][x],
119
136
kind = animation[0 ],
@@ -193,26 +210,31 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
193
210
else
194
211
{
195
212
// Set the start value for each animation on the target view
196
- for (var i = 0 ; i < _viewAnimations .length ; i++ )
213
+ var i = _viewAnimations .length ;
214
+ while (i-- )
197
215
{
198
216
var viewAnimation = _viewAnimations[i],
199
217
target = viewAnimation[@" target" ];
200
218
201
- for (var x = 0 ; x < viewAnimation[@" animations" ].length ; x++ )
219
+ var x = viewAnimation[@" animations" ].length ;
220
+ while (x-- )
202
221
{
203
222
var animation = viewAnimation[@" animations" ][x],
204
223
kind = animation[0 ],
205
224
start = animation[1 ],
206
225
end = animation[2 ];
207
226
208
- if (kind === LPFadeAnimationKey)
209
- [target setAlphaValue: start];
210
-
211
- else if (kind === LPOriginAnimationKey)
212
- [target setFrameOrigin: start];
213
-
214
- else if (kind === LPFrameAnimationKey)
215
- [target setFrame: start];
227
+ switch (kind)
228
+ {
229
+ case LPFadeAnimationKey: [target setAlphaValue: start];
230
+ break ;
231
+
232
+ case LPOriginAnimationKey: [target setFrameOrigin: start];
233
+ break ;
234
+
235
+ case LPFrameAnimationKey: [target setFrame: start];
236
+ break ;
237
+ }
216
238
}
217
239
}
218
240
@@ -227,53 +249,41 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
227
249
- (void )setCurrentProgress : (float)aProgress
228
250
{
229
251
_progress = aProgress;
230
-
231
- var value = [self currentValue],
232
- length = _viewAnimations .length ;
233
252
234
- for (var i = 0 ; i < length; i++ )
253
+ var value = CubicBezierAtTime (_progress, _c1[0 ], _c1[1 ], _c2[0 ], _c2[1 ], _duration),
254
+ i = _viewAnimations .length ;
255
+
256
+ while (i-- )
235
257
{
236
258
var viewAnimation = _viewAnimations[i],
237
- target = viewAnimation[" target" ];
259
+ target = viewAnimation[" target" ],
260
+ x = viewAnimation[" animations" ].length ;
238
261
239
- for ( var x = 0 ; x < viewAnimation[ " animations " ]. length ; x ++ )
262
+ while (x -- )
240
263
{
241
264
var animation = viewAnimation[" animations" ][x],
242
265
kind = animation[0 ],
243
266
start = animation[1 ],
244
267
end = animation[2 ];
245
268
246
- if (kind === LPFadeAnimationKey)
247
- {
248
- [target setAlphaValue: (value * (end - start)) + start];
249
- }
250
- else if (kind === LPOriginAnimationKey)
269
+ switch (kind)
251
270
{
252
- [target setFrameOrigin: CGPointMake (start .x + (value * (end .x - start .x )),
253
- start .y + (value * (end .y - start .y )))];
254
- }
255
- else if (kind === LPFrameAnimationKey)
256
- {
257
- [target setFrame: CGRectMake (start .origin .x + (value * (end .origin .x - start .origin .x )),
258
- start .origin .y + (value * (end .origin .y - start .origin .y )),
259
- start .size .width + (value * (end .size .width - start .size .width )),
260
- start .size .height + (value * (end .size .height - start .size .height )))];
271
+ case LPFadeAnimationKey: [target setAlphaValue: (value * (end - start)) + start];
272
+ break ;
273
+
274
+ case LPOriginAnimationKey: [target setFrameOrigin: CGPointMake (start .x + (value * (end .x - start .x )),
275
+ start .y + (value * (end .y - start .y )))];
276
+ break ;
277
+
278
+ case LPFrameAnimationKey: [target setFrame: CGRectMake (start .origin .x + (value * (end .origin .x - start .origin .x )),
279
+ start .origin .y + (value * (end .origin .y - start .origin .y )),
280
+ start .size .width + (value * (end .size .width - start .size .width )),
281
+ start .size .height + (value * (end .size .height - start .size .height )))]
261
282
}
262
283
}
263
284
}
264
285
}
265
286
266
- - (float)currentValue
267
- {
268
- var c1 = [],
269
- c2 = [];
270
-
271
- [_timingFunction getControlPointAtIndex: 1 values: c1];
272
- [_timingFunction getControlPointAtIndex: 2 values: c2];
273
-
274
- return CubicBezierAtTime (_progress, c1[0 ], c1[1 ], c2[0 ], c2[1 ], _duration);
275
- }
276
-
277
287
- (BOOL )isAnimating
278
288
{
279
289
if (LPCSSAnimationsAreAvailable && _shouldUseCSSAnimations)
0 commit comments