From e94699ae314889857819eab5901ca61e7e0b7062 Mon Sep 17 00:00:00 2001 From: Victor Mayorov Date: Mon, 15 Jun 2015 18:30:44 +0300 Subject: [PATCH 1/2] Fixed bounds in ASDisplayNode. Bounds.origin shouldn't be affected by -[ASDisplayNode setFrame:] method. --- AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm | 8 ++++++-- AsyncDisplayKitTests/ASDisplayNodeTests.m | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm index 51f865dffd..00c54bb686 100644 --- a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm +++ b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm @@ -144,13 +144,17 @@ #endif if (_layer && ASDisplayNodeThreadIsMain()) { + CGRect oldBounds = _layer.bounds; + _layer.bounds = CGRectMake(oldBounds.origin.x, oldBounds.origin.y, rect.size.width, rect.size.height); + CGPoint anchorPoint = _layer.anchorPoint; - _layer.bounds = CGRectMake(0, 0, rect.size.width, rect.size.height); _layer.position = CGPointMake(rect.origin.x + rect.size.width * anchorPoint.x, rect.origin.y + rect.size.height * anchorPoint.y); } else { + CGRect oldBounds = self.bounds; + self.bounds = CGRectMake(oldBounds.origin.x, oldBounds.origin.y, rect.size.width, rect.size.height); + CGPoint anchorPoint = self.anchorPoint; - self.bounds = CGRectMake(0, 0, rect.size.width, rect.size.height); self.position = CGPointMake(rect.origin.x + rect.size.width * anchorPoint.x, rect.origin.y + rect.size.height * anchorPoint.y); } diff --git a/AsyncDisplayKitTests/ASDisplayNodeTests.m b/AsyncDisplayKitTests/ASDisplayNodeTests.m index b5b0d84644..fb40acadef 100644 --- a/AsyncDisplayKitTests/ASDisplayNodeTests.m +++ b/AsyncDisplayKitTests/ASDisplayNodeTests.m @@ -1680,5 +1680,16 @@ static bool stringContainsPointer(NSString *description, const void *p) { [self checkNameInDescriptionIsLayerBacked:NO]; } +- (void)testBounds +{ + ASDisplayNode *node = [[ASDisplayNode alloc] init]; + node.bounds = CGRectMake(1, 2, 3, 4); + node.frame = CGRectMake(5, 6, 7, 8); + + XCTAssert(node.bounds.origin.x == 1, @"Wrong ASDisplayNode.bounds.origin.x"); + XCTAssert(node.bounds.origin.y == 2, @"Wrong ASDisplayNode.bounds.origin.y"); + XCTAssert(node.bounds.size.width == 7, @"Wrong ASDisplayNode.bounds.size.width"); + XCTAssert(node.bounds.size.height == 8, @"Wrong ASDisplayNode.bounds.size.height"); +} @end From 0c7b1051d6db3589764f79ca52656ae154e58312 Mon Sep 17 00:00:00 2001 From: Victor Mayorov Date: Mon, 15 Jun 2015 18:35:32 +0300 Subject: [PATCH 2/2] Fixed bounds --- AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm index 00c54bb686..8d31489bb8 100644 --- a/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm +++ b/AsyncDisplayKit/Private/ASDisplayNode+UIViewBridge.mm @@ -144,15 +144,15 @@ #endif if (_layer && ASDisplayNodeThreadIsMain()) { - CGRect oldBounds = _layer.bounds; - _layer.bounds = CGRectMake(oldBounds.origin.x, oldBounds.origin.y, rect.size.width, rect.size.height); + CGPoint oldBoundsOrigin = _layer.bounds.origin; + _layer.bounds = CGRectMake(oldBoundsOrigin.x, oldBoundsOrigin.y, rect.size.width, rect.size.height); CGPoint anchorPoint = _layer.anchorPoint; _layer.position = CGPointMake(rect.origin.x + rect.size.width * anchorPoint.x, rect.origin.y + rect.size.height * anchorPoint.y); } else { - CGRect oldBounds = self.bounds; - self.bounds = CGRectMake(oldBounds.origin.x, oldBounds.origin.y, rect.size.width, rect.size.height); + CGPoint oldBoundsOrigin = self.bounds.origin; + self.bounds = CGRectMake(oldBoundsOrigin.x, oldBoundsOrigin.y, rect.size.width, rect.size.height); CGPoint anchorPoint = self.anchorPoint; self.position = CGPointMake(rect.origin.x + rect.size.width * anchorPoint.x,