From b721a911c85d41ae0de431e7ac686c8f3b5f3e96 Mon Sep 17 00:00:00 2001 From: Huy Nguyen Date: Thu, 15 Aug 2019 10:01:36 -0700 Subject: [PATCH] Remove _ASDisplayLayer's delegateDidChangeBounds flag (#1618) We rely on the delegate setter to be called to set the flag. However, recent change on iOS 13 causes the setter to not be called at all and thus we had to put up a workaround (https://github.com/TextureGroup/Texture/pull/1609). While the workaround works, the perf benefit of that the flag provides doesn't warranty the extra complexity IMO. So I think we should just remove everything. --- Source/ASDisplayNode.mm | 8 -------- Source/Details/_ASDisplayLayer.mm | 13 +------------ 2 files changed, 1 insertion(+), 20 deletions(-) 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 89fc178aa..4e8569d15 100644 --- a/Source/Details/_ASDisplayLayer.mm +++ b/Source/Details/_ASDisplayLayer.mm @@ -17,22 +17,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(); @@ -54,12 +44,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;