From 4f493c4ad32ad923227451eb37ccb2a4ec7631f0 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 3 Jun 2016 11:12:35 -0700 Subject: [PATCH 1/2] Fix placeholder image is not appearing if size of node changed after initial placement --- AsyncDisplayKit/ASDisplayNode.mm | 6 ++++++ examples_extra/Placeholders/Sample/PostNode.m | 6 ++++++ .../Placeholders/Sample/SlowpokeImageNode.m | 11 ++++++++++- examples_extra/Placeholders/Sample/SlowpokeTextNode.m | 7 ++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 8c1ea59722..d5a9ed2af4 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1088,7 +1088,13 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) // with negative sizes after applying margins, which will cause // measureWithSizeRange: on subnodes to assert. if (!CGRectEqualToRect(bounds, CGRectZero)) { + // Handle placeholder layer creation in case the size of the node changed after the initial placeholder layer + // was created + if ([self _shouldHavePlaceholderLayer]) { + [self _setupPlaceholderLayerIfNeeded]; + } _placeholderLayer.frame = bounds; + [self layout]; [self layoutDidFinish]; } diff --git a/examples_extra/Placeholders/Sample/PostNode.m b/examples_extra/Placeholders/Sample/PostNode.m index b23636b17d..787d2b33b0 100644 --- a/examples_extra/Placeholders/Sample/PostNode.m +++ b/examples_extra/Placeholders/Sample/PostNode.m @@ -60,6 +60,10 @@ - (UIImage *)placeholderImage { CGSize size = self.calculatedSize; + if (CGSizeEqualToSize(size, CGSizeZero)) { + return nil; + } + UIGraphicsBeginImageContext(size); [[UIColor colorWithWhite:0.9 alpha:1] setFill]; UIRectFill((CGRect){CGPointZero, size}); @@ -78,6 +82,8 @@ - (void)layout { + [super layout]; + CGSize textSize = _textNode.calculatedSize; CGSize needyChildSize = _needyChildNode.calculatedSize; diff --git a/examples_extra/Placeholders/Sample/SlowpokeImageNode.m b/examples_extra/Placeholders/Sample/SlowpokeImageNode.m index 36fce4d726..252e599159 100644 --- a/examples_extra/Placeholders/Sample/SlowpokeImageNode.m +++ b/examples_extra/Placeholders/Sample/SlowpokeImageNode.m @@ -15,9 +15,14 @@ static CGFloat const kASDKLogoAspectRatio = 2.79; +@interface ASImageNode (ForwardWorkaround) +// This is a workaround until subclass overwritting of custom drawing class methods is fixed +- (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock; +@end + @implementation SlowpokeImageNode -+ (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock +- (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock { usleep( (long)(0.5 * USEC_PER_SEC) ); // artificial delay of 0.5s @@ -46,6 +51,10 @@ static CGFloat const kASDKLogoAspectRatio = 2.79; - (UIImage *)placeholderImage { CGSize size = self.calculatedSize; + if (CGSizeEqualToSize(size, CGSizeZero)) { + return nil; + } + UIGraphicsBeginImageContext(size); [[UIColor whiteColor] setFill]; [[UIColor colorWithWhite:0.9 alpha:1] setStroke]; diff --git a/examples_extra/Placeholders/Sample/SlowpokeTextNode.m b/examples_extra/Placeholders/Sample/SlowpokeTextNode.m index db309741c9..472307978e 100644 --- a/examples_extra/Placeholders/Sample/SlowpokeTextNode.m +++ b/examples_extra/Placeholders/Sample/SlowpokeTextNode.m @@ -13,9 +13,14 @@ #import +@interface ASTextNode (ForwardWorkaround) +// This is a workaround until subclass overwritting of custom drawing class methods is fixed +- (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing; +@end + @implementation SlowpokeTextNode -+ (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing +- (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing { usleep( (long)(1.0 * USEC_PER_SEC) ); // artificial delay of 1.0 From 76dbc1f5e6a3d21d765fcf7c603e89652ac9f124 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Sat, 4 Jun 2016 16:19:14 -0700 Subject: [PATCH 2/2] Fix typo --- examples_extra/Placeholders/Sample/SlowpokeImageNode.m | 2 +- examples_extra/Placeholders/Sample/SlowpokeTextNode.m | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples_extra/Placeholders/Sample/SlowpokeImageNode.m b/examples_extra/Placeholders/Sample/SlowpokeImageNode.m index 252e599159..11541cc9a2 100644 --- a/examples_extra/Placeholders/Sample/SlowpokeImageNode.m +++ b/examples_extra/Placeholders/Sample/SlowpokeImageNode.m @@ -16,7 +16,7 @@ static CGFloat const kASDKLogoAspectRatio = 2.79; @interface ASImageNode (ForwardWorkaround) -// This is a workaround until subclass overwritting of custom drawing class methods is fixed +// This is a workaround until subclass overriding of custom drawing class methods is fixed - (UIImage *)displayWithParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock; @end diff --git a/examples_extra/Placeholders/Sample/SlowpokeTextNode.m b/examples_extra/Placeholders/Sample/SlowpokeTextNode.m index 472307978e..336bf4747b 100644 --- a/examples_extra/Placeholders/Sample/SlowpokeTextNode.m +++ b/examples_extra/Placeholders/Sample/SlowpokeTextNode.m @@ -14,7 +14,7 @@ #import @interface ASTextNode (ForwardWorkaround) -// This is a workaround until subclass overwritting of custom drawing class methods is fixed +// This is a workaround until subclass overriding of custom drawing class methods is fixed - (void)drawRect:(CGRect)bounds withParameters:(id)parameters isCancelled:(asdisplaynode_iscancelled_block_t)isCancelledBlock isRasterizing:(BOOL)isRasterizing; @end