mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 17:15:54 +00:00
d2934e58b3
Summary: Having UI modules access the shadowQueue via UIManager.methodQueue is fragile and leads to race conditions in startup, sometimes resulting in an error where the methodQueue is set twice, or not at all. Reviewed By: javache Differential Revision: D3304890 fbshipit-source-id: 7198d28314dbec798877fcaaf17ae017d50157e9
127 lines
3.8 KiB
Objective-C
127 lines
3.8 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 <UIKit/UIKit.h>
|
|
|
|
#import "RCTBridge.h"
|
|
#import "RCTBridgeModule.h"
|
|
#import "RCTInvalidating.h"
|
|
#import "RCTViewManager.h"
|
|
#import "RCTRootView.h"
|
|
|
|
/**
|
|
* UIManager queue
|
|
*/
|
|
RCT_EXTERN dispatch_queue_t RCTGetUIManagerQueue(void);
|
|
|
|
/**
|
|
* Default name for the UIManager queue
|
|
*/
|
|
RCT_EXTERN char *const RCTUIManagerQueueName;
|
|
|
|
/**
|
|
* Posted right before re-render happens. This is a chance for views to invalidate their state so
|
|
* next render cycle will pick up updated views and layout appropriately.
|
|
*/
|
|
RCT_EXTERN NSString *const RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification;
|
|
|
|
/**
|
|
* Posted whenever a new root view is registered with RCTUIManager. The userInfo property
|
|
* will contain a RCTUIManagerRootViewKey with the registered root view.
|
|
*/
|
|
RCT_EXTERN NSString *const RCTUIManagerDidRegisterRootViewNotification;
|
|
|
|
/**
|
|
* Posted whenever a root view is removed from the RCTUIManager. The userInfo property
|
|
* will contain a RCTUIManagerRootViewKey with the removed root view.
|
|
*/
|
|
RCT_EXTERN NSString *const RCTUIManagerDidRemoveRootViewNotification;
|
|
|
|
/**
|
|
* Key for the root view property in the above notifications
|
|
*/
|
|
RCT_EXTERN NSString *const RCTUIManagerRootViewKey;
|
|
|
|
@protocol RCTScrollableProtocol;
|
|
|
|
/**
|
|
* The RCTUIManager is the module responsible for updating the view hierarchy.
|
|
*/
|
|
@interface RCTUIManager : NSObject <RCTBridgeModule, RCTInvalidating>
|
|
|
|
/**
|
|
* Register a root view with the RCTUIManager.
|
|
*/
|
|
- (void)registerRootView:(UIView *)rootView withSizeFlexibility:(RCTRootViewSizeFlexibility)sizeFlexibility;
|
|
|
|
/**
|
|
* Gets the view associated with a reactTag.
|
|
*/
|
|
- (UIView *)viewForReactTag:(NSNumber *)reactTag;
|
|
|
|
/**
|
|
* Update the frame of a view. This might be in response to a screen rotation
|
|
* or some other layout event outside of the React-managed view hierarchy.
|
|
*/
|
|
- (void)setFrame:(CGRect)frame forView:(UIView *)view;
|
|
|
|
/**
|
|
* Set the natural size of a view, which is used when no explicit size is set.
|
|
* Use UIViewNoIntrinsicMetric to ignore a dimension.
|
|
*/
|
|
- (void)setIntrinsicContentSize:(CGSize)size forView:(UIView *)view;
|
|
|
|
/**
|
|
* Update the background color of a view. The source of truth for
|
|
* backgroundColor is the shadow view, so if to update backgroundColor from
|
|
* native code you will need to call this method.
|
|
*/
|
|
- (void)setBackgroundColor:(UIColor *)color forView:(UIView *)view;
|
|
|
|
/**
|
|
* Schedule a block to be executed on the UI thread. Useful if you need to execute
|
|
* view logic after all currently queued view updates have completed.
|
|
*/
|
|
- (void)addUIBlock:(RCTViewManagerUIBlock)block;
|
|
|
|
/**
|
|
* The view that is currently first responder, according to the JS context.
|
|
*/
|
|
+ (UIView *)JSResponder;
|
|
|
|
/**
|
|
* Normally, UI changes are not applied until the complete batch of method
|
|
* invocations from JavaScript to native has completed.
|
|
*
|
|
* Setting this to YES will flush UI changes sooner, which could potentially
|
|
* result in inconsistent UI updates.
|
|
*
|
|
* The default is NO (recommended).
|
|
*/
|
|
@property (atomic, assign) BOOL unsafeFlushUIChangesBeforeBatchEnds;
|
|
|
|
/**
|
|
* In some cases we might want to trigger layout from native side.
|
|
* React won't be aware of this, so we need to make sure it happens.
|
|
*/
|
|
- (void)setNeedsLayout;
|
|
|
|
@end
|
|
|
|
/**
|
|
* This category makes the current RCTUIManager instance available via the
|
|
* RCTBridge, which is useful for RCTBridgeModules or RCTViewManagers that
|
|
* need to access the RCTUIManager.
|
|
*/
|
|
@interface RCTBridge (RCTUIManager)
|
|
|
|
@property (nonatomic, readonly) RCTUIManager *uiManager;
|
|
|
|
@end
|