From f085f06ff3113dfc0e143ec069b2f4317eb475fb Mon Sep 17 00:00:00 2001 From: Nadine Salter Date: Mon, 2 Feb 2015 19:53:36 -0800 Subject: [PATCH] -[UIView addSubnode:], -[CALayer addSubnode:]. Bring back this convenience API -- it disappeared somewhere along the line while we were building Paper. This is totally trivial, but conveniently won't break if you layer-back a leaf node. Closes #278. --- AsyncDisplayKit/ASDisplayNode.h | 16 +++++++++++++ AsyncDisplayKit/ASDisplayNode.mm | 23 +++++++++++++++++++ examples/EditableText/Sample/ViewController.m | 2 +- examples/Multiplex/Sample/ViewController.m | 2 +- examples/Placeholders/Sample/ViewController.m | 4 ++-- 5 files changed, 43 insertions(+), 4 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index 54d44e8f6c..2681bf2682 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -520,3 +520,19 @@ typedef CALayer *(^ASDisplayNodeLayerBlock)(); */ @interface ASDisplayNode (ASDisplayNodeAsyncTransactionContainer) @end + + +@interface UIView (AsyncDisplayKit) +/** + * Convenience method, equivalent to [view addSubview:node.view] or [view.layer addSublayer:node.layer] if layer-backed. + */ +- (void)addSubnode:(ASDisplayNode *)node; +@end + + +@interface CALayer (AsyncDisplayKit) +/** + * Convenience method, equivalent to [layer addSublayer:node.layer]. + */ +- (void)addSubnode:(ASDisplayNode *)node; +@end \ No newline at end of file diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 53c8f687e0..a5fdf683de 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1751,3 +1751,26 @@ static const char *ASDisplayNodeAssociatedNodeKey = "ASAssociatedNode"; @implementation CALayer (ASDisplayNodeInternal) @dynamic asyncdisplaykit_node; @end + + +@implementation UIView (AsyncDisplayKit) + +- (void)addSubnode:(ASDisplayNode *)node +{ + if (node.layerBacked) { + [self.layer addSublayer:node.layer]; + } else { + [self addSubview:node.view]; + } +} + +@end + +@implementation CALayer (AsyncDisplayKit) + +- (void)addSubnode:(ASDisplayNode *)node +{ + [self addSublayer:node.layer]; +} + +@end diff --git a/examples/EditableText/Sample/ViewController.m b/examples/EditableText/Sample/ViewController.m index b95ff8e7ce..595458ec85 100644 --- a/examples/EditableText/Sample/ViewController.m +++ b/examples/EditableText/Sample/ViewController.m @@ -51,7 +51,7 @@ { [super viewDidLoad]; - [self.view addSubview:_textNode.view]; + [self.view addSubnode:_textNode]; [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]]; } diff --git a/examples/Multiplex/Sample/ViewController.m b/examples/Multiplex/Sample/ViewController.m index 3eb3104827..13c82f0607 100644 --- a/examples/Multiplex/Sample/ViewController.m +++ b/examples/Multiplex/Sample/ViewController.m @@ -61,7 +61,7 @@ { [super viewDidLoad]; - [self.view addSubview:_imageNode.view]; + [self.view addSubnode:_imageNode]; [self.view addSubview:_textLabel]; [self start]; diff --git a/examples/Placeholders/Sample/ViewController.m b/examples/Placeholders/Sample/ViewController.m index 82b140fa46..dc3b94830a 100644 --- a/examples/Placeholders/Sample/ViewController.m +++ b/examples/Placeholders/Sample/ViewController.m @@ -89,8 +89,8 @@ // this placeholder will cover all subnodes while they are displaying, just a like a stage curtain! _postNode.placeholderEnabled = NO; - [self.view addSubview:_imageNode.view]; - [self.view addSubview:_postNode.view]; + [self.view addSubnode:_imageNode]; + [self.view addSubnode:_postNode]; }