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;