Skip to content

Commit aeb3978

Browse files
committed
LayoutAnimation: replace implementation to fix broken duration/delay
1 parent 992f10c commit aeb3978

File tree

2 files changed

+383
-288
lines changed

2 files changed

+383
-288
lines changed

React/Views/NSView+NSViewAnimationWithBlocks.h

Lines changed: 68 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,70 @@
11
//
2-
// NSView+NSViewAnimationWithBlocks.h
3-
// Mail
4-
//
5-
// Created by Robert Widmann on 7/13/12.
6-
// Copyright (c) 2012 CodaFi Inc. All rights reserved.
7-
//
8-
// Taken from // Taken from https://github.com/jasonwiener/Mail/
2+
// Taken from
3+
// https://github.com/BigZaphod/Chameleon/blob/master/UIKit/Classes/UIViewAnimationGroup.m
4+
95

106
#import <Cocoa/Cocoa.h>
117

128
typedef NSInteger NSViewAnimationTransition;
139

1410
enum NSViewAnimationTransition{
15-
NSViewAnimationTransitionNone,
16-
NSViewAnimationTransitionFlipFromLeft,
17-
NSViewAnimationTransitionFlipFromRight,
18-
NSViewAnimationTransitionCurlUp,
19-
NSViewAnimationTransitionCurlDown,
11+
NSViewAnimationTransitionNone,
12+
NSViewAnimationTransitionFlipFromLeft,
13+
NSViewAnimationTransitionFlipFromRight,
14+
NSViewAnimationTransitionCurlUp,
15+
NSViewAnimationTransitionCurlDown,
16+
};
17+
18+
typedef NS_ENUM(NSInteger, NSViewAnimationGroupTransition) {
19+
NSViewAnimationGroupTransitionNone,
20+
NSViewAnimationGroupTransitionFlipFromLeft,
21+
NSViewAnimationGroupTransitionFlipFromRight,
22+
NSViewAnimationGroupTransitionCurlUp,
23+
NSViewAnimationGroupTransitionCurlDown,
24+
NSViewAnimationGroupTransitionFlipFromTop,
25+
NSViewAnimationGroupTransitionFlipFromBottom,
26+
NSViewAnimationGroupTransitionCrossDissolve,
2027
};
2128

2229
typedef NSUInteger NSViewAnimationOptions;
2330

2431
enum NSViewAnimationOptions{
25-
NSViewAnimationOptionLayoutSubviews = 1 << 0,
26-
NSViewAnimationOptionAllowUserInteraction = 1 << 1, // turn on user interaction while animating
27-
NSViewAnimationOptionBeginFromCurrentState = 1 << 2, // start all views from current value, not initial value
28-
NSViewAnimationOptionRepeat = 1 << 3, // repeat animation indefinitely
29-
NSViewAnimationOptionAutoreverse = 1 << 4, // if repeat, run animation back and forth
30-
NSViewAnimationOptionOverrideInheritedDuration = 1 << 5, // ignore nested duration
31-
NSViewAnimationOptionOverrideInheritedCurve = 1 << 6, // ignore nested curve
32-
NSViewAnimationOptionAllowAnimatedContent = 1 << 7, // animate contents (applies to transitions only)
33-
NSViewAnimationOptionShowHideTransitionViews = 1 << 8, // flip to/from hidden state instead of adding/removing
34-
35-
NSViewAnimationOptionCurveEaseInOut = 0 << 16, // default
36-
NSViewAnimationOptionCurveEaseIn = 1 << 16,
37-
NSViewAnimationOptionCurveEaseOut = 2 << 16,
38-
NSViewAnimationOptionCurveLinear = 3 << 16,
39-
40-
NSViewAnimationOptionTransitionNone = 0 << 20, // default
41-
NSViewAnimationOptionTransitionFlipFromLeft = 1 << 20,
42-
NSViewAnimationOptionTransitionFlipFromRight = 2 << 20,
43-
NSViewAnimationOptionTransitionCurlUp = 3 << 20,
44-
NSViewAnimationOptionTransitionCurlDown = 4 << 20,
45-
NSViewAnimationOptionTransitionCrossDissolve = 5 << 20,
46-
NSViewAnimationOptionTransitionFlipFromTop = 6 << 20,
47-
NSViewAnimationOptionTransitionFlipFromBottom = 7 << 20,
32+
NSViewAnimationOptionLayoutSubviews = 1 << 0,
33+
NSViewAnimationOptionAllowUserInteraction = 1 << 1, // turn on user interaction while animating
34+
NSViewAnimationOptionBeginFromCurrentState = 1 << 2, // start all views from current value, not initial value
35+
NSViewAnimationOptionRepeat = 1 << 3, // repeat animation indefinitely
36+
NSViewAnimationOptionAutoreverse = 1 << 4, // if repeat, run animation back and forth
37+
NSViewAnimationOptionOverrideInheritedDuration = 1 << 5, // ignore nested duration
38+
NSViewAnimationOptionOverrideInheritedCurve = 1 << 6, // ignore nested curve
39+
NSViewAnimationOptionAllowAnimatedContent = 1 << 7, // animate contents (applies to transitions only)
40+
NSViewAnimationOptionShowHideTransitionViews = 1 << 8, // flip to/from hidden state instead of adding/removing
41+
42+
NSViewAnimationOptionCurveEaseInOut = 0 << 16, // default
43+
NSViewAnimationOptionCurveEaseIn = 1 << 16,
44+
NSViewAnimationOptionCurveEaseOut = 2 << 16,
45+
NSViewAnimationOptionCurveLinear = 3 << 16,
46+
47+
NSViewAnimationOptionTransitionNone = 0 << 20, // default
48+
NSViewAnimationOptionTransitionFlipFromLeft = 1 << 20,
49+
NSViewAnimationOptionTransitionFlipFromRight = 2 << 20,
50+
NSViewAnimationOptionTransitionCurlUp = 3 << 20,
51+
NSViewAnimationOptionTransitionCurlDown = 4 << 20,
52+
NSViewAnimationOptionTransitionCrossDissolve = 5 << 20,
53+
NSViewAnimationOptionTransitionFlipFromTop = 6 << 20,
54+
NSViewAnimationOptionTransitionFlipFromBottom = 7 << 20,
4855
};
4956

5057
typedef NSInteger NSViewAnimationCurve;
5158

5259
enum NSViewAnimationCurve{
53-
NSViewAnimationCurveEaseInOut, // slow at beginning and end
54-
NSViewAnimationCurveEaseIn, // slow at beginning
55-
NSViewAnimationCurveEaseOut, // slow at end
56-
NSViewAnimationCurveLinear
60+
NSViewAnimationCurveEaseInOut, // slow at beginning and end
61+
NSViewAnimationCurveEaseIn, // slow at beginning
62+
NSViewAnimationCurveEaseOut, // slow at end
63+
NSViewAnimationCurveLinear
5764
};
5865

66+
extern BOOL NSViewAnimationOptionIsSet(NSViewAnimationOptions options, NSViewAnimationOptions option);
67+
5968
@interface NSView (NSViewAnimationWithBlocks)
6069

6170
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(NSViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
@@ -66,23 +75,14 @@ enum NSViewAnimationCurve{
6675

6776
+ (void)beginAnimations:(NSString *)animationID context:(void *)context;
6877
+ (void)commitAnimations;
69-
+ (void)setAnimationBeginsFromCurrentState:(BOOL)beginFromCurrentState;
70-
+ (void)setAnimationCurve:(NSViewAnimationCurve)curve;
71-
+ (void)setAnimationDelay:(NSTimeInterval)delay;
72-
+ (void)setAnimationDelegate:(id)delegate;
73-
+ (void)setAnimationDidStopSelector:(SEL)selector;
74-
+ (void)setAnimationDuration:(NSTimeInterval)duration;
75-
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;
76-
+ (void)setAnimationRepeatCount:(float)repeatCount;
77-
+ (void)setAnimationWillStartSelector:(SEL)selector;
7878
+ (BOOL)areAnimationsEnabled;
7979
+ (void)setAnimationsEnabled:(BOOL)enabled;
8080

8181
@end
8282

8383
@interface NSViewBlockAnimationDelegate : NSObject {
84-
void (^_completion)(BOOL finished);
85-
BOOL _ignoreInteractionEvents;
84+
void (^_completion)(BOOL finished);
85+
BOOL _ignoreInteractionEvents;
8686
}
8787

8888
@property (nonatomic, copy) void (^completion)(BOOL finished);
@@ -92,29 +92,24 @@ enum NSViewAnimationCurve{
9292

9393
@end
9494

95-
@interface NSViewAnimationGroup : NSObject {
96-
@private
97-
NSString *_name;
98-
void *_context;
99-
NSUInteger _waitingAnimations;
100-
BOOL _didSendStartMessage;
101-
NSTimeInterval _animationDelay;
102-
NSTimeInterval _animationDuration;
103-
NSViewAnimationCurve _animationCurve;
104-
NSViewAnimationTransition _transitionType;
105-
id _animationDelegate;
106-
SEL _animationDidStopSelector;
107-
SEL _animationWillStartSelector;
108-
BOOL _animationBeginsFromCurrentState;
109-
BOOL _animationRepeatAutoreverses;
110-
float _animationRepeatCount;
111-
CFTimeInterval _animationBeginTime;
112-
CALayer *_transitionLayer;
113-
BOOL _transitionShouldCache;
114-
NSMutableSet *_animatingViews;
115-
}
116-
117-
+ (id)animationGroupWithName:(NSString *)theName context:(void *)theContext;
95+
@interface NSViewAnimationGroup : NSObject
96+
97+
@property (nonatomic, copy) NSString *name;
98+
@property (nonatomic, assign) void *context;
99+
@property (nonatomic, copy) void (^completionBlock)(BOOL finished);
100+
@property (nonatomic, assign) BOOL allowUserInteraction;
101+
@property (nonatomic, assign) BOOL beginsFromCurrentState;
102+
@property (nonatomic, assign) NSViewAnimationCurve curve;
103+
@property (nonatomic, assign) NSTimeInterval delay;
104+
@property (nonatomic, strong) id delegate;
105+
@property (nonatomic, assign) SEL didStopSelector;
106+
@property (nonatomic, assign) SEL willStartSelector;
107+
@property (nonatomic, assign) NSTimeInterval duration;
108+
@property (nonatomic, assign) BOOL repeatAutoreverses;
109+
@property (nonatomic, assign) float repeatCount;
110+
@property (nonatomic, assign) NSViewAnimationGroupTransition transition;
111+
112+
- (id)initWithAnimationOptions:(NSViewAnimationOptions)options;
118113

119114
- (id)actionForView:(NSView *)view forKey:(NSString *)keyPath;
120115

0 commit comments

Comments
 (0)