Skip to content
This repository was archived by the owner on Mar 10, 2019. It is now read-only.

Commit c2090b7

Browse files
committed
squeeze better performance out of LPViewAnimation
1 parent 11cb374 commit c2090b7

File tree

1 file changed

+57
-47
lines changed

1 file changed

+57
-47
lines changed

LPViewAnimation.j

+57-47
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,16 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
7575

7676
@implementation LPViewAnimation : CPAnimation
7777
{
78-
BOOL _isAnimating;
78+
BOOL _isAnimating;
7979

80-
CPArray _viewAnimations @accessors(property=viewAnimations);
81-
id _animationDidEndTimeout;
80+
CPArray _viewAnimations @accessors(property=viewAnimations);
81+
id _animationDidEndTimeout;
8282

83-
BOOL _shouldUseCSSAnimations @accessors(property=shouldUseCSSAnimations);
83+
BOOL _shouldUseCSSAnimations @accessors(property=shouldUseCSSAnimations);
84+
85+
// Curve
86+
CPArray _c1;
87+
CPArray _c2;
8488
}
8589

8690
- (void)initWithViewAnimations:(CPArray)viewAnimations
@@ -95,6 +99,17 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
9599
return self;
96100
}
97101

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+
98113
- (void)startAnimation
99114
{
100115
if (LPCSSAnimationsAreAvailable && _shouldUseCSSAnimations)
@@ -104,7 +119,8 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
104119

105120
_isAnimating = YES;
106121

107-
for (var i = 0; i < _viewAnimations.length; i++)
122+
var i = _viewAnimations.length;
123+
while (i--)
108124
{
109125
var viewAnimation = _viewAnimations[i],
110126
target = viewAnimation[@"target"];
@@ -113,7 +129,8 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
113129
[self target:target setCSSAnimationDuration:_duration];
114130
[self target:target setCSSAnimationCurve:_animationCurve];
115131

116-
for (var x = 0; x < viewAnimation[@"animations"].length; x++)
132+
var x = viewAnimation[@"animations"].length;
133+
while (x--)
117134
{
118135
var animation = viewAnimation[@"animations"][x],
119136
kind = animation[0],
@@ -193,26 +210,31 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
193210
else
194211
{
195212
// 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--)
197215
{
198216
var viewAnimation = _viewAnimations[i],
199217
target = viewAnimation[@"target"];
200218

201-
for (var x = 0; x < viewAnimation[@"animations"].length; x++)
219+
var x = viewAnimation[@"animations"].length;
220+
while (x--)
202221
{
203222
var animation = viewAnimation[@"animations"][x],
204223
kind = animation[0],
205224
start = animation[1],
206225
end = animation[2];
207226

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+
}
216238
}
217239
}
218240

@@ -227,53 +249,41 @@ var appendCSSValueToKey = function(/*DOMElement*/ anElement, /*CPString*/aValue,
227249
- (void)setCurrentProgress:(float)aProgress
228250
{
229251
_progress = aProgress;
230-
231-
var value = [self currentValue],
232-
length = _viewAnimations.length;
233252

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--)
235257
{
236258
var viewAnimation = _viewAnimations[i],
237-
target = viewAnimation["target"];
259+
target = viewAnimation["target"],
260+
x = viewAnimation["animations"].length;
238261

239-
for (var x = 0; x < viewAnimation["animations"].length; x++)
262+
while (x--)
240263
{
241264
var animation = viewAnimation["animations"][x],
242265
kind = animation[0],
243266
start = animation[1],
244267
end = animation[2];
245268

246-
if (kind === LPFadeAnimationKey)
247-
{
248-
[target setAlphaValue:(value * (end - start)) + start];
249-
}
250-
else if(kind === LPOriginAnimationKey)
269+
switch (kind)
251270
{
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)))]
261282
}
262283
}
263284
}
264285
}
265286

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-
277287
- (BOOL)isAnimating
278288
{
279289
if (LPCSSAnimationsAreAvailable && _shouldUseCSSAnimations)

0 commit comments

Comments
 (0)