Merge pull request #635 from garrettmoon/fixShouldRasterizeSubnodes

Fix should rasterize subnodes
This commit is contained in:
appleguy 2015-09-03 01:28:43 -07:00
commit de795d577a
2 changed files with 14 additions and 2 deletions

View File

@ -630,10 +630,10 @@ void ASDisplayNodeRespectThreadAffinityOfNode(ASDisplayNode *node, void (^block)
{
ASDisplayNodeAssertMainThread();
ASDN::MutexLocker l(_propertyLock);
if (CGRectEqualToRect(_layer.bounds, CGRectZero)) {
if (CGRectEqualToRect(self.bounds, CGRectZero)) {
return; // Performing layout on a zero-bounds view often results in frame calculations with negative sizes after applying margins, which will cause measureWithSizeRange: on subnodes to assert.
}
_placeholderLayer.frame = _layer.bounds;
_placeholderLayer.frame = self.bounds;
[self layout];
[self layoutDidFinish];
}

View File

@ -83,6 +83,13 @@ static void __ASDisplayLayerDecrementConcurrentDisplayCount(BOOL displayIsAsync,
if (self.isHidden || self.alpha <= 0.0) {
return;
}
BOOL rasterizingFromAscendent = [self __rasterizedContainerNode] != nil;
// if super node is rasterizing descendents, subnodes will not have had layout calls becase they don't have layers
if (rasterizingFromAscendent) {
[self __layout];
}
// Capture these outside the display block so they are retained.
UIColor *backgroundColor = self.backgroundColor;
@ -121,6 +128,11 @@ static void __ASDisplayLayerDecrementConcurrentDisplayCount(BOOL displayIsAsync,
CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
//support cornerRadius
if (rasterizingFromAscendent && self.cornerRadius && self.clipsToBounds) {
[[UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:self.cornerRadius] addClip];
}
// Fill background if any.
CGColorRef backgroundCGColor = backgroundColor.CGColor;
if (backgroundColor && CGColorGetAlpha(backgroundCGColor) > 0.0) {