diff --git a/Source/ASDisplayNode.mm b/Source/ASDisplayNode.mm index 06c2ad45b..9c37ba369 100644 --- a/Source/ASDisplayNode.mm +++ b/Source/ASDisplayNode.mm @@ -549,14 +549,6 @@ - (void)_locked_loadViewOrLayer _view = [self _locked_viewToLoad]; _view.asyncdisplaykit_node = self; _layer = _view.layer; - // Needed to force `-[_ASDisplayLayer setDelegate:]` to evaluate - // It appears that UIKit might be setting the delegate ivar directly which - // bypasses establishing the `_delegateFlags` ivar on `ASDisplayLayer` - // This is critical for things like ASPagerNode, ASCollectionNode that depend - // on layer delegateFlags to forward bounds changes - if (_layer.delegate == _view) { - [_layer setDelegate:_view]; - } } _layer.asyncdisplaykit_node = self; diff --git a/Source/Details/_ASDisplayLayer.mm b/Source/Details/_ASDisplayLayer.mm index 6ced31685..c21956b43 100644 --- a/Source/Details/_ASDisplayLayer.mm +++ b/Source/Details/_ASDisplayLayer.mm @@ -22,22 +22,12 @@ @implementation _ASDisplayLayer { BOOL _attemptedDisplayWhileZeroSized; - - struct { - BOOL delegateDidChangeBounds:1; - } _delegateFlags; } @dynamic displaysAsynchronously; #pragma mark - Properties -- (void)setDelegate:(id)delegate -{ - [super setDelegate:delegate]; - _delegateFlags.delegateDidChangeBounds = [delegate respondsToSelector:@selector(layer:didChangeBoundsWithOldValue:newValue:)]; -} - - (void)setDisplaySuspended:(BOOL)displaySuspended { ASDisplayNodeAssertMainThread(); @@ -59,12 +49,11 @@ - (void)setBounds:(CGRect)bounds if (!valid) { return; } - if (_delegateFlags.delegateDidChangeBounds) { + if ([self.delegate respondsToSelector:@selector(layer:didChangeBoundsWithOldValue:newValue:)]) { CGRect oldBounds = self.bounds; [super setBounds:bounds]; self.asyncdisplaykit_node.threadSafeBounds = bounds; [(id)self.delegate layer:self didChangeBoundsWithOldValue:oldBounds newValue:bounds]; - } else { [super setBounds:bounds]; self.asyncdisplaykit_node.threadSafeBounds = bounds;