mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-07 05:02:56 +00:00
This adds support for the concept of visibility depth. Visibility essentially defines the number of user actions it would take a user to have a view controller visible. Knowing a view controllers visibility depth allows view controllers to take action such as clearing out memory that can be restored at a later date. This patch also add two new view controller subclasses which adopt the ASManagesChildVisibilityDepth protocol. Any view controller that has child view controllers can adopt this protocol to indicate to the child what they're visibility is. For example, ASNavigationController will return a visibility depth of it's own visibilityDepth + 1 for a view controller that would be revealed by tapping the back button.
73 lines
2.8 KiB
Objective-C
73 lines
2.8 KiB
Objective-C
//
|
|
// ASViewController.h
|
|
// AsyncDisplayKit
|
|
//
|
|
// Created by Huy Nguyen on 16/09/15.
|
|
// Copyright (c) 2015 Facebook. All rights reserved.
|
|
//
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#import <AsyncDisplayKit/ASDisplayNode.h>
|
|
#import <AsyncDisplayKit/ASVisibilityProtocols.h>
|
|
|
|
@class ASTraitCollection;
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
typedef ASTraitCollection * _Nonnull (^ASDisplayTraitsForTraitCollectionBlock)(UITraitCollection *traitCollection);
|
|
typedef ASTraitCollection * _Nonnull (^ASDisplayTraitsForTraitWindowSizeBlock)(CGSize windowSize);
|
|
|
|
@interface ASViewController<__covariant DisplayNodeType : ASDisplayNode *> : UIViewController <ASVisibilityDepth>
|
|
|
|
- (instancetype)initWithNode:(DisplayNodeType)node NS_DESIGNATED_INITIALIZER;
|
|
|
|
@property (nonatomic, strong, readonly) DisplayNodeType node;
|
|
|
|
/**
|
|
* An optional context to pass along with an ASTraitCollection.
|
|
* This can be used to pass any internal state to all subnodes via the ASTraitCollection that is not
|
|
* included in UITraitCollection. This could range from more fine-tuned size classes to a class of
|
|
* constants that is based upon the new trait collection.
|
|
*
|
|
* Be aware that internally this context is held by a C struct which cannot retain the pointer. Therefore
|
|
* ASVC keeps a strong reference to the context to make sure that it stays alive. If you change this value
|
|
* it will propagate the change to the subnodes.
|
|
*/
|
|
@property (nonatomic, strong) id _Nullable traitColectionContext;
|
|
|
|
/**
|
|
* Set this block to customize the ASDisplayTraits returned when the VC transitions to the given traitCollection.
|
|
*/
|
|
@property (nonatomic, copy) ASDisplayTraitsForTraitCollectionBlock overrideDisplayTraitsWithTraitCollection;
|
|
|
|
/**
|
|
* Set this block to customize the ASDisplayTraits returned when the VC transitions to the given window size.
|
|
*/
|
|
@property (nonatomic, copy) ASDisplayTraitsForTraitWindowSizeBlock overrideDisplayTraitsWithWindowSize;
|
|
|
|
/**
|
|
* @abstract Passthrough property to the the .interfaceState of the node.
|
|
* @return The current ASInterfaceState of the node, indicating whether it is visible and other situational properties.
|
|
* @see ASInterfaceState
|
|
*/
|
|
@property (nonatomic, readonly) ASInterfaceState interfaceState;
|
|
|
|
|
|
// AsyncDisplayKit 2.0 BETA: This property is still being tested, but it allows
|
|
// blocking as a view controller becomes visible to ensure no placeholders flash onscreen.
|
|
// Refer to examples/SynchronousConcurrency, AsyncViewController.m
|
|
@property (nonatomic, assign) BOOL neverShowPlaceholders;
|
|
|
|
|
|
/**
|
|
* The constrained size used to measure the backing node.
|
|
*
|
|
* @discussion Defaults to providing a size range that uses the view controller view's bounds as
|
|
* both the min and max definitions. Override this method to provide a custom size range to the
|
|
* backing node.
|
|
*/
|
|
- (ASSizeRange)nodeConstrainedSize;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END |