mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-11 17:00:02 +00:00
ASInterfaceStateVisible is now being driven by a new ASRangeHandlerVisible.
This commit is contained in:
parent
1ed22866b1
commit
936730d46b
@ -407,6 +407,10 @@
|
|||||||
D785F6621A74327E00291744 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
D785F6621A74327E00291744 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
D785F6631A74327E00291744 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; };
|
D785F6631A74327E00291744 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; };
|
||||||
DB7121BCD50849C498C886FB /* libPods-AsyncDisplayKitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */; };
|
DB7121BCD50849C498C886FB /* libPods-AsyncDisplayKitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */; };
|
||||||
|
DE6D9E321C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6D9E301C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h */; };
|
||||||
|
DE6D9E331C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6D9E301C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h */; };
|
||||||
|
DE6D9E341C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE6D9E311C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm */; };
|
||||||
|
DE6D9E351C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm in Sources */ = {isa = PBXBuildFile; fileRef = DE6D9E311C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm */; };
|
||||||
DECBD6E71BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
DECBD6E71BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
DECBD6E81BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
DECBD6E81BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
DECBD6E91BE56E1900CF4905 /* ASButtonNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */; };
|
DECBD6E91BE56E1900CF4905 /* ASButtonNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */; };
|
||||||
@ -675,6 +679,8 @@
|
|||||||
D3779BCFF841AD3EB56537ED /* Pods-AsyncDisplayKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AsyncDisplayKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests.release.xcconfig"; sourceTree = "<group>"; };
|
D3779BCFF841AD3EB56537ED /* Pods-AsyncDisplayKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AsyncDisplayKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
D785F6601A74327E00291744 /* ASScrollNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASScrollNode.h; sourceTree = "<group>"; };
|
D785F6601A74327E00291744 /* ASScrollNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASScrollNode.h; sourceTree = "<group>"; };
|
||||||
D785F6611A74327E00291744 /* ASScrollNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASScrollNode.m; sourceTree = "<group>"; };
|
D785F6611A74327E00291744 /* ASScrollNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASScrollNode.m; sourceTree = "<group>"; };
|
||||||
|
DE6D9E301C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASRangeHandlerVisible.h; sourceTree = "<group>"; };
|
||||||
|
DE6D9E311C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASRangeHandlerVisible.mm; sourceTree = "<group>"; };
|
||||||
DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASButtonNode.h; sourceTree = "<group>"; };
|
DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASButtonNode.h; sourceTree = "<group>"; };
|
||||||
DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASButtonNode.mm; sourceTree = "<group>"; };
|
DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASButtonNode.mm; sourceTree = "<group>"; };
|
||||||
EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AsyncDisplayKitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AsyncDisplayKitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@ -938,6 +944,8 @@
|
|||||||
055F1A3619ABD413004DAFF1 /* ASRangeController.h */,
|
055F1A3619ABD413004DAFF1 /* ASRangeController.h */,
|
||||||
055F1A3719ABD413004DAFF1 /* ASRangeController.mm */,
|
055F1A3719ABD413004DAFF1 /* ASRangeController.mm */,
|
||||||
292C599C1A956527007E5DD6 /* ASRangeHandler.h */,
|
292C599C1A956527007E5DD6 /* ASRangeHandler.h */,
|
||||||
|
DE6D9E301C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h */,
|
||||||
|
DE6D9E311C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm */,
|
||||||
292C599A1A956527007E5DD6 /* ASRangeHandlerPreload.h */,
|
292C599A1A956527007E5DD6 /* ASRangeHandlerPreload.h */,
|
||||||
292C599B1A956527007E5DD6 /* ASRangeHandlerPreload.mm */,
|
292C599B1A956527007E5DD6 /* ASRangeHandlerPreload.mm */,
|
||||||
292C599D1A956527007E5DD6 /* ASRangeHandlerRender.h */,
|
292C599D1A956527007E5DD6 /* ASRangeHandlerRender.h */,
|
||||||
@ -1159,6 +1167,7 @@
|
|||||||
05F20AA41A15733C00DCA68A /* ASImageProtocols.h in Headers */,
|
05F20AA41A15733C00DCA68A /* ASImageProtocols.h in Headers */,
|
||||||
430E7C8F1B4C23F100697A4C /* ASIndexPath.h in Headers */,
|
430E7C8F1B4C23F100697A4C /* ASIndexPath.h in Headers */,
|
||||||
ACF6ED221B17843500DA7C62 /* ASInsetLayoutSpec.h in Headers */,
|
ACF6ED221B17843500DA7C62 /* ASInsetLayoutSpec.h in Headers */,
|
||||||
|
DE6D9E321C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h in Headers */,
|
||||||
ACF6ED4B1B17847A00DA7C62 /* ASInternalHelpers.h in Headers */,
|
ACF6ED4B1B17847A00DA7C62 /* ASInternalHelpers.h in Headers */,
|
||||||
ACF6ED241B17843500DA7C62 /* ASLayout.h in Headers */,
|
ACF6ED241B17843500DA7C62 /* ASLayout.h in Headers */,
|
||||||
251B8EFB1BBB3D690087C538 /* ASDataController+Subclasses.h in Headers */,
|
251B8EFB1BBB3D690087C538 /* ASDataController+Subclasses.h in Headers */,
|
||||||
@ -1254,6 +1263,7 @@
|
|||||||
B35062171B010EFD0018CF92 /* ASDataController.h in Headers */,
|
B35062171B010EFD0018CF92 /* ASDataController.h in Headers */,
|
||||||
B35062191B010EFD0018CF92 /* ASDealloc2MainObject.h in Headers */,
|
B35062191B010EFD0018CF92 /* ASDealloc2MainObject.h in Headers */,
|
||||||
34EFC75B1B701BAF00AD841F /* ASDimension.h in Headers */,
|
34EFC75B1B701BAF00AD841F /* ASDimension.h in Headers */,
|
||||||
|
DE6D9E331C0AD9ED001A1DD3 /* ASRangeHandlerVisible.h in Headers */,
|
||||||
B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */,
|
B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */,
|
||||||
B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */,
|
B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */,
|
||||||
B35061FB1B010EFD0018CF92 /* ASDisplayNode.h in Headers */,
|
B35061FB1B010EFD0018CF92 /* ASDisplayNode.h in Headers */,
|
||||||
@ -1373,7 +1383,6 @@
|
|||||||
058D09B9195D04C000B7D73C /* Frameworks */,
|
058D09B9195D04C000B7D73C /* Frameworks */,
|
||||||
058D09BA195D04C000B7D73C /* Resources */,
|
058D09BA195D04C000B7D73C /* Resources */,
|
||||||
3B9D88CDF51B429C8409E4B6 /* Copy Pods Resources */,
|
3B9D88CDF51B429C8409E4B6 /* Copy Pods Resources */,
|
||||||
6CC5F540055A48FCA8C12BF5 /* Embed Pods Frameworks */,
|
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
@ -1503,21 +1512,6 @@
|
|||||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests-resources.sh\"\n";
|
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests-resources.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
6CC5F540055A48FCA8C12BF5 /* Embed Pods Frameworks */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "Embed Pods Frameworks";
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests-frameworks.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
@ -1599,6 +1593,7 @@
|
|||||||
055F1A3519ABD3E3004DAFF1 /* ASTableView.mm in Sources */,
|
055F1A3519ABD3E3004DAFF1 /* ASTableView.mm in Sources */,
|
||||||
058D0A17195D050800B7D73C /* ASTextNode.mm in Sources */,
|
058D0A17195D050800B7D73C /* ASTextNode.mm in Sources */,
|
||||||
058D0A1C195D050800B7D73C /* ASTextNodeCoreTextAdditions.m in Sources */,
|
058D0A1C195D050800B7D73C /* ASTextNodeCoreTextAdditions.m in Sources */,
|
||||||
|
DE6D9E341C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm in Sources */,
|
||||||
058D0A1D195D050800B7D73C /* ASTextNodeRenderer.mm in Sources */,
|
058D0A1D195D050800B7D73C /* ASTextNodeRenderer.mm in Sources */,
|
||||||
058D0A1E195D050800B7D73C /* ASTextNodeShadower.m in Sources */,
|
058D0A1E195D050800B7D73C /* ASTextNodeShadower.m in Sources */,
|
||||||
058D0A1F195D050800B7D73C /* ASTextNodeTextKitHelpers.mm in Sources */,
|
058D0A1F195D050800B7D73C /* ASTextNodeTextKitHelpers.mm in Sources */,
|
||||||
@ -1717,6 +1712,7 @@
|
|||||||
34EFC7741B701D0A00AD841F /* ASStaticLayoutSpec.mm in Sources */,
|
34EFC7741B701D0A00AD841F /* ASStaticLayoutSpec.mm in Sources */,
|
||||||
B350620B1B010EFD0018CF92 /* ASTableView.mm in Sources */,
|
B350620B1B010EFD0018CF92 /* ASTableView.mm in Sources */,
|
||||||
B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */,
|
B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */,
|
||||||
|
DE6D9E351C0AD9ED001A1DD3 /* ASRangeHandlerVisible.mm in Sources */,
|
||||||
B350622F1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.m in Sources */,
|
B350622F1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.m in Sources */,
|
||||||
B35062311B010EFD0018CF92 /* ASTextNodeRenderer.mm in Sources */,
|
B35062311B010EFD0018CF92 /* ASTextNodeRenderer.mm in Sources */,
|
||||||
B35062331B010EFD0018CF92 /* ASTextNodeShadower.m in Sources */,
|
B35062331B010EFD0018CF92 /* ASTextNodeShadower.m in Sources */,
|
||||||
|
|||||||
@ -144,7 +144,6 @@ typedef NS_OPTIONS(NSUInteger, ASInterfaceState)
|
|||||||
|
|
||||||
/** @name Getting view and layer */
|
/** @name Getting view and layer */
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @abstract Returns a view.
|
* @abstract Returns a view.
|
||||||
*
|
*
|
||||||
@ -181,14 +180,17 @@ typedef NS_OPTIONS(NSUInteger, ASInterfaceState)
|
|||||||
*/
|
*/
|
||||||
@property (nonatomic, readonly, retain) CALayer *layer;
|
@property (nonatomic, readonly, retain) CALayer *layer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @abstract Returns the Interface State 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;
|
@property (nonatomic, readonly) ASInterfaceState interfaceState;
|
||||||
|
|
||||||
- (void)enterInterfaceState:(ASInterfaceState)interfaceState;
|
|
||||||
- (void)exitInterfaceState:(ASInterfaceState)interfaceState;
|
|
||||||
|
|
||||||
/** @name Managing dimensions */
|
/** @name Managing dimensions */
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @abstract Asks the node to measure and return the size that best fits its subnodes.
|
* @abstract Asks the node to measure and return the size that best fits its subnodes.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1650,6 +1650,7 @@ void recursivelyEnsureDisplayForLayer(CALayer *layer)
|
|||||||
_placeholderImage = nil;
|
_placeholderImage = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace this with ASDisplayNodePerformBlockOnEveryNode or exitInterfaceState:
|
||||||
- (void)recursivelyClearContents
|
- (void)recursivelyClearContents
|
||||||
{
|
{
|
||||||
for (ASDisplayNode *subnode in self.subnodes) {
|
for (ASDisplayNode *subnode in self.subnodes) {
|
||||||
@ -1663,6 +1664,7 @@ void recursivelyEnsureDisplayForLayer(CALayer *layer)
|
|||||||
// subclass override
|
// subclass override
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace this with ASDisplayNodePerformBlockOnEveryNode or enterInterfaceState:
|
||||||
- (void)recursivelyFetchData
|
- (void)recursivelyFetchData
|
||||||
{
|
{
|
||||||
for (ASDisplayNode *subnode in self.subnodes) {
|
for (ASDisplayNode *subnode in self.subnodes) {
|
||||||
@ -1676,6 +1678,7 @@ void recursivelyEnsureDisplayForLayer(CALayer *layer)
|
|||||||
// subclass override
|
// subclass override
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace this with ASDisplayNodePerformBlockOnEveryNode or exitInterfaceState:
|
||||||
- (void)recursivelyClearFetchedData
|
- (void)recursivelyClearFetchedData
|
||||||
{
|
{
|
||||||
for (ASDisplayNode *subnode in self.subnodes) {
|
for (ASDisplayNode *subnode in self.subnodes) {
|
||||||
@ -1731,44 +1734,18 @@ void recursivelyEnsureDisplayForLayer(CALayer *layer)
|
|||||||
|
|
||||||
- (void)enterInterfaceState:(ASInterfaceState)interfaceState
|
- (void)enterInterfaceState:(ASInterfaceState)interfaceState
|
||||||
{
|
{
|
||||||
recursivelyPerformBlockOnEveryNode(nil, self, ^(ASDisplayNode *node) {
|
ASDisplayNodePerformBlockOnEveryNode(nil, self, ^(ASDisplayNode *node) {
|
||||||
node.interfaceState |= interfaceState;
|
node.interfaceState |= interfaceState;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)exitInterfaceState:(ASInterfaceState)interfaceState
|
- (void)exitInterfaceState:(ASInterfaceState)interfaceState
|
||||||
{
|
{
|
||||||
recursivelyPerformBlockOnEveryNode(nil, self, ^(ASDisplayNode *node) {
|
ASDisplayNodePerformBlockOnEveryNode(nil, self, ^(ASDisplayNode *node) {
|
||||||
node.interfaceState &= (!interfaceState);
|
node.interfaceState &= (~interfaceState);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void recursivelyPerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^performOnNode)(ASDisplayNode *node))
|
|
||||||
{
|
|
||||||
if (!node) {
|
|
||||||
ASDisplayNodeCAssertNotNil(layer, @"Cannot recursively perform with nil node and nil layer");
|
|
||||||
ASDisplayNodeCAssertMainThread();
|
|
||||||
node = [layer asyncdisplaykit_node];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node) {
|
|
||||||
performOnNode(node);
|
|
||||||
}
|
|
||||||
if (!layer && [node isNodeLoaded]) {
|
|
||||||
layer = node.layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (layer) {
|
|
||||||
for (CALayer *sublayer in [layer sublayers]) {
|
|
||||||
recursivelyPerformBlockOnEveryNode(sublayer, nil, performOnNode);
|
|
||||||
}
|
|
||||||
} else if (node) {
|
|
||||||
for (ASDisplayNode *subnode in [node subnodes]) {
|
|
||||||
recursivelyPerformBlockOnEveryNode(nil, subnode, performOnNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)layout
|
- (void)layout
|
||||||
{
|
{
|
||||||
ASDisplayNodeAssertMainThread();
|
ASDisplayNodeAssertMainThread();
|
||||||
@ -1825,6 +1802,7 @@ void recursivelyPerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, voi
|
|||||||
|
|
||||||
- (void)setNeedsDisplayAtScale:(CGFloat)contentsScale
|
- (void)setNeedsDisplayAtScale:(CGFloat)contentsScale
|
||||||
{
|
{
|
||||||
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
if (contentsScale != self.contentsScaleForDisplay) {
|
if (contentsScale != self.contentsScaleForDisplay) {
|
||||||
self.contentsScaleForDisplay = contentsScale;
|
self.contentsScaleForDisplay = contentsScale;
|
||||||
[self setNeedsDisplay];
|
[self setNeedsDisplay];
|
||||||
@ -1833,12 +1811,9 @@ void recursivelyPerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, voi
|
|||||||
|
|
||||||
- (void)recursivelySetNeedsDisplayAtScale:(CGFloat)contentsScale
|
- (void)recursivelySetNeedsDisplayAtScale:(CGFloat)contentsScale
|
||||||
{
|
{
|
||||||
[self setNeedsDisplayAtScale:contentsScale];
|
ASDisplayNodePerformBlockOnEveryNode(nil, self, ^(ASDisplayNode *node) {
|
||||||
|
[node setNeedsDisplayAtScale:contentsScale];
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
});
|
||||||
for (ASDisplayNode *child in _subnodes) {
|
|
||||||
[child recursivelySetNeedsDisplayAtScale:contentsScale];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
|
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
|
||||||
@ -1974,6 +1949,7 @@ void recursivelyPerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, voi
|
|||||||
_recursivelySetDisplaySuspended(self, nil, flag);
|
_recursivelySetDisplaySuspended(self, nil, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace this with ASDisplayNodePerformBlockOnEveryNode or a variant with a condition / test block.
|
||||||
static void _recursivelySetDisplaySuspended(ASDisplayNode *node, CALayer *layer, BOOL flag)
|
static void _recursivelySetDisplaySuspended(ASDisplayNode *node, CALayer *layer, BOOL flag)
|
||||||
{
|
{
|
||||||
// If there is no layer, but node whose its view is loaded, then we can traverse down its layer hierarchy. Otherwise we must stick to the node hierarchy to avoid loading views prematurely. Note that for nodes that haven't loaded their views, they can't possibly have subviews/sublayers, so we don't need to traverse the layer hierarchy for them.
|
// If there is no layer, but node whose its view is loaded, then we can traverse down its layer hierarchy. Otherwise we must stick to the node hierarchy to avoid loading views prematurely. Note that for nodes that haven't loaded their views, they can't possibly have subviews/sublayers, so we don't need to traverse the layer hierarchy for them.
|
||||||
|
|||||||
@ -24,6 +24,14 @@ extern ASDisplayNode *ASLayerToDisplayNode(CALayer *layer);
|
|||||||
*/
|
*/
|
||||||
extern ASDisplayNode *ASViewToDisplayNode(UIView *view);
|
extern ASDisplayNode *ASViewToDisplayNode(UIView *view);
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function will walk the layer heirarchy, spanning discontinuous sections of the node heirarchy (e.g. the layers
|
||||||
|
of UIKit intermediate views in UIViewControllers, UITableView, UICollectionView).
|
||||||
|
In the event that a node's backing layer is not created yet, the function will only walk the direct subnodes instead
|
||||||
|
of forcing the layer heirarchy to be created.
|
||||||
|
*/
|
||||||
|
void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^block)(ASDisplayNode *node));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Given a display node, traverses up the layer tree hierarchy, returning the first display node that passes block.
|
Given a display node, traverses up the layer tree hierarchy, returning the first display node that passes block.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -10,16 +10,42 @@
|
|||||||
|
|
||||||
#import "ASDisplayNodeInternal.h"
|
#import "ASDisplayNodeInternal.h"
|
||||||
|
|
||||||
ASDisplayNode *ASLayerToDisplayNode(CALayer *layer)
|
inline ASDisplayNode *ASLayerToDisplayNode(CALayer *layer)
|
||||||
{
|
{
|
||||||
return layer.asyncdisplaykit_node;
|
return layer.asyncdisplaykit_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASDisplayNode *ASViewToDisplayNode(UIView *view)
|
inline ASDisplayNode *ASViewToDisplayNode(UIView *view)
|
||||||
{
|
{
|
||||||
return view.asyncdisplaykit_node;
|
return view.asyncdisplaykit_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^block)(ASDisplayNode *node))
|
||||||
|
{
|
||||||
|
if (!node) {
|
||||||
|
ASDisplayNodeCAssertNotNil(layer, @"Cannot recursively perform with nil node and nil layer");
|
||||||
|
ASDisplayNodeCAssertMainThread();
|
||||||
|
node = ASLayerToDisplayNode(layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node) {
|
||||||
|
block(node);
|
||||||
|
}
|
||||||
|
if (!layer && [node isNodeLoaded]) {
|
||||||
|
layer = node.layer;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layer) {
|
||||||
|
for (CALayer *sublayer in [layer sublayers]) {
|
||||||
|
ASDisplayNodePerformBlockOnEveryNode(sublayer, nil, block);
|
||||||
|
}
|
||||||
|
} else if (node) {
|
||||||
|
for (ASDisplayNode *subnode in [node subnodes]) {
|
||||||
|
ASDisplayNodePerformBlockOnEveryNode(nil, subnode, block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
id ASDisplayNodeFind(ASDisplayNode *node, BOOL (^block)(ASDisplayNode *node))
|
id ASDisplayNodeFind(ASDisplayNode *node, BOOL (^block)(ASDisplayNode *node))
|
||||||
{
|
{
|
||||||
CALayer *layer = node.layer;
|
CALayer *layer = node.layer;
|
||||||
|
|||||||
@ -26,14 +26,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
_tuningParameters = std::vector<ASRangeTuningParameters>(ASLayoutRangeTypeCount);
|
_tuningParameters = std::vector<ASRangeTuningParameters>(ASLayoutRangeTypeCount);
|
||||||
|
_tuningParameters[ASLayoutRangeTypeVisible] = {
|
||||||
|
.leadingBufferScreenfuls = 0,
|
||||||
|
.trailingBufferScreenfuls = 0
|
||||||
|
};
|
||||||
|
_tuningParameters[ASLayoutRangeTypeRender] = {
|
||||||
|
.leadingBufferScreenfuls = 1.5,
|
||||||
|
.trailingBufferScreenfuls = 0.75
|
||||||
|
};
|
||||||
_tuningParameters[ASLayoutRangeTypePreload] = {
|
_tuningParameters[ASLayoutRangeTypePreload] = {
|
||||||
.leadingBufferScreenfuls = 3,
|
.leadingBufferScreenfuls = 3,
|
||||||
.trailingBufferScreenfuls = 2
|
.trailingBufferScreenfuls = 2
|
||||||
};
|
};
|
||||||
_tuningParameters[ASLayoutRangeTypeRender] = {
|
|
||||||
.leadingBufferScreenfuls = 2,
|
|
||||||
.trailingBufferScreenfuls = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -49,6 +54,7 @@
|
|||||||
- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
|
- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
|
||||||
{
|
{
|
||||||
ASDisplayNodeAssert(rangeType < _tuningParameters.size(), @"Requesting a range that is OOB for the configured tuning parameters");
|
ASDisplayNodeAssert(rangeType < _tuningParameters.size(), @"Requesting a range that is OOB for the configured tuning parameters");
|
||||||
|
ASDisplayNodeAssert(rangeType != ASLayoutRangeTypeVisible, @"Must not set Visible range tuning parameters (always 0, 0)");
|
||||||
_tuningParameters[rangeType] = tuningParameters;
|
_tuningParameters[rangeType] = tuningParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, ASLayoutRangeType) {
|
typedef NS_ENUM(NSInteger, ASLayoutRangeType) {
|
||||||
|
ASLayoutRangeTypeVisible,
|
||||||
ASLayoutRangeTypeRender,
|
ASLayoutRangeTypeRender,
|
||||||
ASLayoutRangeTypePreload,
|
ASLayoutRangeTypePreload,
|
||||||
ASLayoutRangeTypeCount
|
ASLayoutRangeTypeCount
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
#import "ASAssert.h"
|
#import "ASAssert.h"
|
||||||
#import "ASDisplayNodeExtras.h"
|
#import "ASDisplayNodeExtras.h"
|
||||||
#import "ASMultiDimensionalArrayUtils.h"
|
#import "ASMultiDimensionalArrayUtils.h"
|
||||||
|
#import "ASRangeHandlerVisible.h"
|
||||||
#import "ASRangeHandlerRender.h"
|
#import "ASRangeHandlerRender.h"
|
||||||
#import "ASRangeHandlerPreload.h"
|
#import "ASRangeHandlerPreload.h"
|
||||||
#import "ASInternalHelpers.h"
|
#import "ASInternalHelpers.h"
|
||||||
@ -36,6 +37,7 @@
|
|||||||
_rangeIsValid = YES;
|
_rangeIsValid = YES;
|
||||||
_rangeTypeIndexPaths = [NSMutableDictionary dictionary];
|
_rangeTypeIndexPaths = [NSMutableDictionary dictionary];
|
||||||
_rangeTypeHandlers = @{
|
_rangeTypeHandlers = @{
|
||||||
|
@(ASLayoutRangeTypeVisible): [[ASRangeHandlerVisible alloc] init],
|
||||||
@(ASLayoutRangeTypeRender): [[ASRangeHandlerRender alloc] init],
|
@(ASLayoutRangeTypeRender): [[ASRangeHandlerRender alloc] init],
|
||||||
@(ASLayoutRangeTypePreload): [[ASRangeHandlerPreload alloc] init],
|
@(ASLayoutRangeTypePreload): [[ASRangeHandlerPreload alloc] init],
|
||||||
};
|
};
|
||||||
|
|||||||
@ -7,9 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import "ASRangeHandlerPreload.h"
|
#import "ASRangeHandlerPreload.h"
|
||||||
|
|
||||||
#import "ASDisplayNode.h"
|
#import "ASDisplayNode.h"
|
||||||
#import "ASDisplayNode+Subclasses.h"
|
#import "ASDisplayNodeInternal.h"
|
||||||
|
|
||||||
@implementation ASRangeHandlerPreload
|
@implementation ASRangeHandlerPreload
|
||||||
|
|
||||||
|
|||||||
15
AsyncDisplayKit/Details/ASRangeHandlerVisible.h
Normal file
15
AsyncDisplayKit/Details/ASRangeHandlerVisible.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* Copyright (c) 2014-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 <AsyncDisplayKit/ASRangeHandler.h>
|
||||||
|
|
||||||
|
@interface ASRangeHandlerVisible : NSObject <ASRangeHandler>
|
||||||
|
|
||||||
|
@end
|
||||||
25
AsyncDisplayKit/Details/ASRangeHandlerVisible.mm
Normal file
25
AsyncDisplayKit/Details/ASRangeHandlerVisible.mm
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/* Copyright (c) 2014-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 "ASRangeHandlerVisible.h"
|
||||||
|
#import "ASDisplayNode.h"
|
||||||
|
#import "ASDisplayNodeInternal.h"
|
||||||
|
|
||||||
|
@implementation ASRangeHandlerVisible
|
||||||
|
|
||||||
|
- (void)node:(ASDisplayNode *)node enteredRangeOfType:(ASLayoutRangeType)rangeType
|
||||||
|
{
|
||||||
|
[node enterInterfaceState:ASInterfaceStateVisible];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)node:(ASDisplayNode *)node exitedRangeOfType:(ASLayoutRangeType)rangeType
|
||||||
|
{
|
||||||
|
[node exitInterfaceState:ASInterfaceStateVisible];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@ -118,6 +118,10 @@ typedef NS_OPTIONS(NSUInteger, ASDisplayNodeMethodOverrides) {
|
|||||||
// Bitmask to check which methods an object overrides.
|
// Bitmask to check which methods an object overrides.
|
||||||
@property (nonatomic, assign, readonly) ASDisplayNodeMethodOverrides methodOverrides;
|
@property (nonatomic, assign, readonly) ASDisplayNodeMethodOverrides methodOverrides;
|
||||||
|
|
||||||
|
// These methods are recursive, and either union or remove the provided interfaceState to all sub-elements.
|
||||||
|
- (void)enterInterfaceState:(ASInterfaceState)interfaceState;
|
||||||
|
- (void)exitInterfaceState:(ASInterfaceState)interfaceState;
|
||||||
|
|
||||||
// Swizzle to extend the builtin functionality with custom logic
|
// Swizzle to extend the builtin functionality with custom logic
|
||||||
- (BOOL)__shouldLoadViewOrLayer;
|
- (BOOL)__shouldLoadViewOrLayer;
|
||||||
- (BOOL)__shouldSize;
|
- (BOOL)__shouldSize;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user