2017-05-08 19:40:07 +00:00
|
|
|
/**
|
2018-09-11 22:27:47 +00:00
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
2017-05-08 19:40:07 +00:00
|
|
|
*
|
2018-02-17 02:24:55 +00:00
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
2017-05-08 19:40:07 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
|
|
|
|
#import <React/RCTViewManager.h>
|
|
|
|
|
2018-02-21 06:11:55 +00:00
|
|
|
typedef dispatch_block_t RCTUIManagerMountingBlock;
|
|
|
|
|
2017-05-08 19:40:07 +00:00
|
|
|
/**
|
2017-09-18 20:34:24 +00:00
|
|
|
* Allows hooking into UIManager internals. This can be used to execute code at
|
2017-05-08 19:40:07 +00:00
|
|
|
* specific points during the view updating process.
|
2017-09-18 20:34:24 +00:00
|
|
|
* New observers must not be added inside observer handlers.
|
|
|
|
* The particular order of handler invocation is not guaranteed.
|
|
|
|
* All observer handlers are called on UIManager queue.
|
2017-05-08 19:40:07 +00:00
|
|
|
*/
|
|
|
|
@protocol RCTUIManagerObserver <NSObject>
|
|
|
|
|
|
|
|
@optional
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called just before the UIManager layout views.
|
|
|
|
* It allows performing some operation for components which contain custom
|
|
|
|
* layout logic right before regular Yoga based layout. So, for instance,
|
|
|
|
* some components which have own React-independent state can compute and cache
|
|
|
|
* own intrinsic content size (which will be used by Yoga) at this point.
|
|
|
|
*/
|
|
|
|
- (void)uiManagerWillPerformLayout:(RCTUIManager *)manager;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called just after the UIManager layout views.
|
|
|
|
* It allows performing custom layout logic right after regular Yoga based layout.
|
|
|
|
* So, for instance, this can be used for computing final layout for a component,
|
|
|
|
* since it has its final frame set by Yoga at this point.
|
|
|
|
*/
|
|
|
|
- (void)uiManagerDidPerformLayout:(RCTUIManager *)manager;
|
|
|
|
|
|
|
|
/**
|
2017-11-29 18:27:28 +00:00
|
|
|
* Called before flushing UI blocks at the end of a batch.
|
2017-05-08 19:40:07 +00:00
|
|
|
* This is called from the UIManager queue. Can be used to add UI operations in that batch.
|
|
|
|
*/
|
2017-12-12 00:54:52 +00:00
|
|
|
- (void)uiManagerWillPerformMounting:(RCTUIManager *)manager;
|
2017-05-08 19:40:07 +00:00
|
|
|
|
2018-02-21 06:11:55 +00:00
|
|
|
/**
|
|
|
|
* Called right before flushing UI blocks and allows to intercept the mounting process.
|
|
|
|
* Return `YES` to cancel default execution of the `block` (and perform the
|
|
|
|
* execution later).
|
|
|
|
*/
|
|
|
|
- (BOOL)uiManager:(RCTUIManager *)manager performMountingWithBlock:(RCTUIManagerMountingBlock)block;
|
|
|
|
|
2017-12-12 00:54:54 +00:00
|
|
|
/**
|
|
|
|
* Called just after flushing UI blocks.
|
|
|
|
* This is called from the UIManager queue.
|
|
|
|
*/
|
|
|
|
- (void)uiManagerDidPerformMounting:(RCTUIManager *)manager;
|
|
|
|
|
2017-05-08 19:40:07 +00:00
|
|
|
@end
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Simple helper which take care of RCTUIManager's observers.
|
|
|
|
*/
|
|
|
|
@interface RCTUIManagerObserverCoordinator : NSObject <RCTUIManagerObserver>
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a UIManagerObserver. See the `RCTUIManagerObserver` protocol for more info.
|
|
|
|
* References to observers are held weakly.
|
|
|
|
* This method can be called safely from any queue.
|
|
|
|
*/
|
|
|
|
- (void)addObserver:(id<RCTUIManagerObserver>)observer;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove a `UIManagerObserver`.
|
|
|
|
* This method can be called safely from any queue.
|
|
|
|
*/
|
|
|
|
- (void)removeObserver:(id<RCTUIManagerObserver>)observer;
|
|
|
|
|
|
|
|
@end
|