From 5e49cc438259d1e7b4a4778deaf786f1e34ceffe Mon Sep 17 00:00:00 2001 From: Huy Nguyen Date: Wed, 2 Mar 2016 22:43:28 -0800 Subject: [PATCH] Layout transition can measure in background --- AsyncDisplayKit/ASDisplayNode.mm | 14 +++++++++----- AsyncDisplayKit/Private/ASDisplayNodeInternal.h | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 7cafc438d5..78c23f2b14 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -658,12 +658,16 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) - (ASLayout *)transitionLayoutWithSizeRange:(ASSizeRange)constrainedSize animated:(BOOL)animated { - _usesImplicitHierarchyManagement = YES; // Temporary flag for 1.9.x + self.usesImplicitHierarchyManagement = YES; // Temporary flag for 1.9.x + return [self measureWithSizeRange:constrainedSize completion:^{ - _usesImplicitHierarchyManagement = NO; // Temporary flag for 1.9.x - _transitionContext = [[_ASTransitionContext alloc] initWithAnimation:animated delegate:self]; - [self __implicitlyInsertSubnodes]; - [self animateLayoutTransition:_transitionContext]; + self.usesImplicitHierarchyManagement = NO; // Temporary flag for 1.9.x + + ASPerformBlockOnMainThread(^{ + _transitionContext = [[_ASTransitionContext alloc] initWithAnimation:animated delegate:self]; + [self __implicitlyInsertSubnodes]; + [self animateLayoutTransition:_transitionContext]; + }); }]; } diff --git a/AsyncDisplayKit/Private/ASDisplayNodeInternal.h b/AsyncDisplayKit/Private/ASDisplayNodeInternal.h index b10c6d7f8c..d3a10724a9 100644 --- a/AsyncDisplayKit/Private/ASDisplayNodeInternal.h +++ b/AsyncDisplayKit/Private/ASDisplayNodeInternal.h @@ -103,6 +103,7 @@ FOUNDATION_EXPORT NSString * const ASRenderingEngineDidDisplayNodesScheduledBefo UIEdgeInsets _hitTestSlop; NSMutableArray *_subnodes; + // Main thread only _ASTransitionContext *_transitionContext; BOOL _usesImplicitHierarchyManagement;