From 35fb3d2ae66ba3ca1e2ddafd4857ddf66c19fd85 Mon Sep 17 00:00:00 2001 From: Garrett Moon Date: Fri, 29 Jan 2016 14:45:18 -0800 Subject: [PATCH] Allow images returned by placeholderImage to be stretchable --- AsyncDisplayKit/ASDisplayNode.mm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index aa54b85671..cd0cb2fb96 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -18,6 +18,7 @@ #import "_ASPendingState.h" #import "_ASDisplayView.h" #import "_ASScopeTimer.h" +#import "_ASCoreAnimationExtras.h" #import "ASDisplayNodeExtras.h" #import "ASEqualityHelpers.h" @@ -615,7 +616,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) } if (_placeholderLayer) { - _placeholderLayer.contents = (id)_placeholderImage.CGImage; + [self setupPlaceholderLayerContents]; } } @@ -2011,13 +2012,24 @@ static BOOL ShouldUseNewRenderingRange = YES; if (_placeholderImage && _placeholderLayer && self.layer.contents == nil) { [CATransaction begin]; [CATransaction setDisableActions:YES]; - _placeholderLayer.contents = (id)_placeholderImage.CGImage; + [self setupPlaceholderLayerContents]; _placeholderLayer.opacity = 1.0; [CATransaction commit]; [self.layer addSublayer:_placeholderLayer]; } } +- (void)setupPlaceholderLayerContents +{ + BOOL stretchable = !UIEdgeInsetsEqualToEdgeInsets(_placeholderImage.capInsets, UIEdgeInsetsZero); + if (stretchable) { + ASDisplayNodeSetupLayerContentsWithResizableImage(_placeholderLayer, _placeholderImage); + } else { + _placeholderLayer.contentsScale = self.contentsScale; + _placeholderLayer.contents = (id)_placeholderImage.CGImage; + } +} + - (void)displayDidFinish { [self _pendingNodeDidDisplay:self];