mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
fc45471af2
Summary: There was an edge case where sometimes a view could be added and removed in the same batch so this caused issues because we ran `disconnectAnimatedNodeFromView` before `connectAnimatedNodeToView`. This separates restoring default values from `disconnectAnimatedNodeFromView` so we can run only `restoreDefaultValues` on the pre-operations queue and just do nothing in case the view doesn't exist (it is fine because we know it will be removed immediately). **Test plan** Tested that native animations still work properly in RNTester and tested that the edge case crash was fixed. Closes https://github.com/facebook/react-native/pull/14114 Differential Revision: D5128989 Pulled By: javache fbshipit-source-id: 9f47a2d3aafeb06d8ed1a4dd1800b8af225edb7d
89 lines
2.9 KiB
Objective-C
89 lines
2.9 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#import <RCTAnimation/RCTValueAnimatedNode.h>
|
|
#import <React/RCTBridgeModule.h>
|
|
#import <React/RCTUIManager.h>
|
|
|
|
@interface RCTNativeAnimatedNodesManager : NSObject
|
|
|
|
- (nonnull instancetype)initWithUIManager:(nonnull RCTUIManager *)uiManager;
|
|
|
|
- (void)updateAnimations;
|
|
|
|
- (void)stepAnimations:(nonnull CADisplayLink *)displaylink;
|
|
|
|
// graph
|
|
|
|
- (void)createAnimatedNode:(nonnull NSNumber *)tag
|
|
config:(NSDictionary<NSString *, id> *__nonnull)config;
|
|
|
|
- (void)connectAnimatedNodes:(nonnull NSNumber *)parentTag
|
|
childTag:(nonnull NSNumber *)childTag;
|
|
|
|
- (void)disconnectAnimatedNodes:(nonnull NSNumber *)parentTag
|
|
childTag:(nonnull NSNumber *)childTag;
|
|
|
|
- (void)connectAnimatedNodeToView:(nonnull NSNumber *)nodeTag
|
|
viewTag:(nonnull NSNumber *)viewTag
|
|
viewName:(nonnull NSString *)viewName;
|
|
|
|
- (void)restoreDefaultValues:(nonnull NSNumber *)nodeTag;
|
|
|
|
- (void)disconnectAnimatedNodeFromView:(nonnull NSNumber *)nodeTag
|
|
viewTag:(nonnull NSNumber *)viewTag;
|
|
|
|
- (void)dropAnimatedNode:(nonnull NSNumber *)tag;
|
|
|
|
// mutations
|
|
|
|
- (void)setAnimatedNodeValue:(nonnull NSNumber *)nodeTag
|
|
value:(nonnull NSNumber *)value;
|
|
|
|
- (void)setAnimatedNodeOffset:(nonnull NSNumber *)nodeTag
|
|
offset:(nonnull NSNumber *)offset;
|
|
|
|
- (void)flattenAnimatedNodeOffset:(nonnull NSNumber *)nodeTag;
|
|
|
|
- (void)extractAnimatedNodeOffset:(nonnull NSNumber *)nodeTag;
|
|
|
|
// drivers
|
|
|
|
- (void)startAnimatingNode:(nonnull NSNumber *)animationId
|
|
nodeTag:(nonnull NSNumber *)nodeTag
|
|
config:(NSDictionary<NSString *, id> *__nonnull)config
|
|
endCallback:(nullable RCTResponseSenderBlock)callBack;
|
|
|
|
- (void)stopAnimation:(nonnull NSNumber *)animationId;
|
|
|
|
- (void)stopAnimationLoop;
|
|
|
|
// events
|
|
|
|
- (void)addAnimatedEventToView:(nonnull NSNumber *)viewTag
|
|
eventName:(nonnull NSString *)eventName
|
|
eventMapping:(NSDictionary<NSString *, id> *__nonnull)eventMapping;
|
|
|
|
- (void)removeAnimatedEventFromView:(nonnull NSNumber *)viewTag
|
|
eventName:(nonnull NSString *)eventName
|
|
animatedNodeTag:(nonnull NSNumber *)animatedNodeTag;
|
|
|
|
- (void)handleAnimatedEvent:(nonnull id<RCTEvent>)event;
|
|
|
|
// listeners
|
|
|
|
- (void)startListeningToAnimatedNodeValue:(nonnull NSNumber *)tag
|
|
valueObserver:(nonnull id<RCTValueAnimatedNodeObserver>)valueObserver;
|
|
|
|
- (void)stopListeningToAnimatedNodeValue:(nonnull NSNumber *)tag;
|
|
|
|
@end
|