From 057c431dfb9ad2816d6147a27bf6da843fc1338b Mon Sep 17 00:00:00 2001 From: Garrett Moon Date: Tue, 1 Mar 2016 16:46:03 -0800 Subject: [PATCH] Thanks @scottg, this is a better more generalized solution. --- AsyncDisplayKit/ASDisplayNode.mm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index af1d9c9d6e..78641b039b 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -2083,7 +2083,13 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) [self setDisplaySuspended:NO]; } else { [self setDisplaySuspended:YES]; - [self clearContents]; + //schedule clear contents on next runloop + dispatch_async(dispatch_get_main_queue(), ^{ + ASDN::MutexLocker l(_propertyLock); + if (ASInterfaceStateIncludesDisplay(_interfaceState) == NO) { + [self clearContents]; + } + }); } } else { // NOTE: This case isn't currently supported as setInterfaceState: isn't exposed externally, and all @@ -2095,7 +2101,13 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) [ASDisplayNode scheduleNodeForRecursiveDisplay:self]; } else { [[self asyncLayer] cancelAsyncDisplay]; - [self clearContents]; + //schedule clear contents on next runloop + dispatch_async(dispatch_get_main_queue(), ^{ + ASDN::MutexLocker l(_propertyLock); + if (ASInterfaceStateIncludesDisplay(_interfaceState) == NO) { + [self clearContents]; + } + }); } } }