Skip to content

Commit ba2ac34

Browse files
committed
iOS scaleX/scaleY transition
1 parent 58edd09 commit ba2ac34

File tree

6 files changed

+82
-0
lines changed

6 files changed

+82
-0
lines changed

lib/ios/ElementAnimator.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
#import "ElementHorizontalTransition.h"
44
#import "ElementVerticalTransition.h"
55
#import "HorizontalTranslationTransition.h"
6+
#import "HorizontalScaleTransition.h"
67
#import "RNNElementFinder.h"
78
#import "Transition.h"
89
#import "VerticalRotationTransition.h"
910
#import "VerticalTranslationTransition.h"
11+
#import "VerticalScaleTransition.h"
1012

1113
@implementation ElementAnimator {
1214
UIView *_containerView;
@@ -60,6 +62,18 @@ - (instancetype)initWithTransitionOptions:(TransitionOptions *)transitionOptions
6062
transitionDetails:transitionOptions.rotationY]];
6163
}
6264

65+
if (transitionOptions.scaleX.hasAnimation) {
66+
[animations addObject:[[HorizontalScaleTransition alloc]
67+
initWithView:self.view
68+
transitionDetails:transitionOptions.scaleX]];
69+
}
70+
71+
if (transitionOptions.scaleY.hasAnimation) {
72+
[animations addObject:[[VerticalScaleTransition alloc]
73+
initWithView:self.view
74+
transitionDetails:transitionOptions.scaleY]];
75+
}
76+
6377
return animations;
6478
}
6579

lib/ios/HorizontalScaleTransition.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#import "FloatTransition.h"
2+
#import <Foundation/Foundation.h>
3+
4+
@interface HorizontalScaleTransition : FloatTransition
5+
6+
@end

lib/ios/HorizontalScaleTransition.m

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#import "HorizontalScaleTransition.h"
2+
3+
@implementation HorizontalScaleTransition
4+
5+
- (CATransform3D)animateWithProgress:(CGFloat)p {
6+
CGFloat scaleX = [RNNInterpolator fromFloat:self.from
7+
toFloat:self.to
8+
precent:p
9+
interpolator:self.interpolator];
10+
return CATransform3DMakeScale(scaleX, 1, 1);
11+
}
12+
13+
- (CGFloat)calculateFrom:(Double *)from {
14+
return from.hasValue ? from.get : 1;
15+
}
16+
17+
- (CGFloat)calculateTo:(Double *)to {
18+
return to.hasValue ? to.get : 1;
19+
}
20+
21+
@end

lib/ios/TransitionOptions.m

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ - (instancetype)initWithDict:(NSDictionary *)dict {
88
self.alpha = [[TransitionDetailsOptions alloc] initWithDict:dict[@"alpha"]];
99
self.x = [[TransitionDetailsOptions alloc] initWithDict:dict[@"x"]];
1010
self.y = [[TransitionDetailsOptions alloc] initWithDict:dict[@"y"]];
11+
self.scaleX = [[TransitionDetailsOptions alloc] initWithDict:dict[@"scaleX"]];
12+
self.scaleY = [[TransitionDetailsOptions alloc] initWithDict:dict[@"scaleY"]];
1113
self.translationX = [[TransitionDetailsOptions alloc] initWithDict:dict[@"translationX"]];
1214
self.translationY = [[TransitionDetailsOptions alloc] initWithDict:dict[@"translationY"]];
1315
self.rotationX = [[TransitionDetailsOptions alloc] initWithDict:dict[@"rotationX"]];
@@ -23,6 +25,8 @@ - (void)mergeOptions:(TransitionOptions *)options {
2325
[self.alpha mergeOptions:options.alpha];
2426
[self.x mergeOptions:options.x];
2527
[self.y mergeOptions:options.y];
28+
[self.scaleX mergeOptions:options.scaleX];
29+
[self.scaleY mergeOptions:options.scaleY];
2630
[self.translationX mergeOptions:options.translationX];
2731
[self.translationY mergeOptions:options.translationY];
2832
[self.rotationX mergeOptions:options.rotationX];
@@ -36,12 +40,14 @@ - (void)mergeOptions:(TransitionOptions *)options {
3640

3741
- (BOOL)hasAnimation {
3842
return self.x.hasAnimation || self.y.hasAnimation || self.alpha.hasAnimation ||
43+
self.scaleX.hasAnimation || self.scaleY.hasAnimation ||
3944
self.translationX.hasAnimation || self.translationY.hasAnimation ||
4045
self.rotationX.hasAnimation || self.rotationY.hasAnimation;
4146
}
4247

4348
- (BOOL)hasValue {
4449
return self.x.hasAnimation || self.y.hasAnimation || self.alpha.hasAnimation ||
50+
self.scaleX.hasAnimation || self.scaleY.hasAnimation ||
4551
self.translationX.hasAnimation || self.translationY.hasAnimation ||
4652
self.rotationX.hasAnimation || self.rotationY.hasAnimation ||
4753
self.waitForRender.hasValue || self.enable.hasValue;
@@ -61,6 +67,14 @@ - (NSTimeInterval)maxDuration {
6167
maxDuration = [_y.duration withDefault:0];
6268
}
6369

70+
if ([_scaleX.duration withDefault:0] > maxDuration) {
71+
maxDuration = [_scaleX.duration withDefault:0];
72+
}
73+
74+
if ([_scaleY.duration withDefault:0] > maxDuration) {
75+
maxDuration = [_scaleY.duration withDefault:0];
76+
}
77+
6478
if ([_translationX.duration withDefault:0] > maxDuration) {
6579
maxDuration = [_translationX.duration withDefault:0];
6680
}

lib/ios/VerticalScaleTransition.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#import "FloatTransition.h"
2+
#import <Foundation/Foundation.h>
3+
4+
@interface VerticalScaleTransition : FloatTransition
5+
6+
@end

lib/ios/VerticalScaleTransition.m

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#import "VerticalScaleTransition.h"
2+
3+
@implementation VerticalScaleTransition
4+
5+
- (CATransform3D)animateWithProgress:(CGFloat)p {
6+
CGFloat scaleY = [RNNInterpolator fromFloat:self.from
7+
toFloat:self.to
8+
precent:p
9+
interpolator:self.interpolator];
10+
return CATransform3DMakeScale(1, scaleY, 1);
11+
}
12+
13+
- (CGFloat)calculateFrom:(Double *)from {
14+
return from.hasValue ? from.get : 1;
15+
}
16+
17+
- (CGFloat)calculateTo:(Double *)to {
18+
return to.hasValue ? to.get : 1;
19+
}
20+
21+
@end

0 commit comments

Comments
 (0)