diff --git a/AsyncDisplayKit/ASTextNode.mm b/AsyncDisplayKit/ASTextNode.mm index 0f78ac960d..3b3c41347b 100644 --- a/AsyncDisplayKit/ASTextNode.mm +++ b/AsyncDisplayKit/ASTextNode.mm @@ -246,25 +246,13 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation - (void)setFrame:(CGRect)frame { [super setFrame:frame]; - if (!CGSizeEqualToSize(frame.size, _constrainedSize)) { - // Our bounds have changed to a size that is not identical to our constraining size, - // so our previous layout information is invalid, and TextKit may draw at the - // incorrect origin. - _constrainedSize = CGSizeMake(-INFINITY, -INFINITY); - [self _invalidateRenderer]; - } + [self _invalidateRendererIfNeeded:frame.size]; } - (void)setBounds:(CGRect)bounds { [super setBounds:bounds]; - if (!CGSizeEqualToSize(bounds.size, _constrainedSize)) { - // Our bounds have changed to a size that is not identical to our constraining size, - // so our previous layout information is invalid, and TextKit may draw at the - // incorrect origin. - _constrainedSize = CGSizeMake(-INFINITY, -INFINITY); - [self _invalidateRenderer]; - } + [self _invalidateRendererIfNeeded:bounds.size]; } #pragma mark - Renderer Management @@ -299,6 +287,26 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation _renderer = nil; } +- (BOOL)_needInvalidateRenderer:(CGSize)newSize +{ + return !CGSizeEqualToSize(newSize, _constrainedSize); +} + +- (void)_invalidateRendererIfNeeded { + [self _invalidateRendererIfNeeded:self.view.bounds.size]; +} + +- (void)_invalidateRendererIfNeeded:(CGSize)newSize +{ + if ([self _needInvalidateRenderer:newSize]) { + // Our bounds of frame have changed to a size that is not identical to our constraining size, + // so our previous layout information is invalid, and TextKit may draw at the + // incorrect origin. + _constrainedSize = CGSizeMake(-INFINITY, -INFINITY); + [self _invalidateRenderer]; + } +} + #pragma mark - Shadow Drawer Management - (ASTextNodeShadower *)_shadower { @@ -410,6 +418,8 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation - (NSObject *)drawParametersForAsyncLayer:(_ASDisplayLayer *)layer { + [self _invalidateRendererIfNeeded]; + // Offset the text origin by any shadow padding UIEdgeInsets shadowPadding = [self shadowPadding]; CGPoint textOrigin = CGPointMake(self.bounds.origin.x - shadowPadding.left, self.bounds.origin.y - shadowPadding.top); diff --git a/Podfile.lock b/Podfile.lock index cf8e89d790..cb01b76e45 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -10,4 +10,4 @@ SPEC CHECKSUMS: FBSnapshotTestCase: 3dc3899168747a0319c5278f5b3445c13a6532dd OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2 -COCOAPODS: 0.38.2 +COCOAPODS: 0.39.0