---
title: Node Subclasses
layout: docs
permalink: /docs/node-overview.html
prevPage: containers-overview.html
nextPage: subclassing.html
---

Texture offers the following nodes.  

A key advantage of using nodes over UIKit components is that **all nodes perform layout and display off of the main thread**, so that the main thread is available to immediately respond to user interaction events.  

<table style="width:100%" class = "paddingBetweenCols">
  <tr>
    <th>Texture Node</th>
    <th>UIKit Equivalent</th> 
  </tr>
  <tr>
    <td><a href = "display-node.html"><code>ASDisplayNode</code></a></td>
    <td>in place of UIKit's <code>UIView</code><br> 
        <i>The root Texture node, from which all other nodes inherit.</i></td> 
  </tr>
  <tr>
    <td><a href = "cell-node.html"><code>ASCellNode</code></a></td>
    <td>in place of UIKit's <code>UITableViewCell</code> & <code>UICollectionViewCell</code><br>
        <i><code>ASCellNode</code>s are used in <code>ASTableNode</code>, <code>ASCollectionNode</code> and <code>ASPagerNode</code>.</i></td> 
  </tr>
  <tr>
    <td><a href = "scroll-node.html"><code>ASScrollNode</code></a></td>
    <td>in place of UIKit's <code>UIScrollView</code>
        <p><i>This node is useful for creating a customized scrollable region that contains other nodes.</i></p></td> 
  </tr>
  <tr>
    <td><a href = "editable-text-node.html"><code>ASEditableTextNode</code></a><br>
        <a href = "text-node.html"><code>ASTextNode</code></a></td>
    <td>in place of UIKit's <code>UITextView</code><br>
        in place of UIKit's <code>UILabel</code></td> 
  </tr>
  <tr>
    <td><a href = "image-node.html"><code>ASImageNode</code></a><br>
        <a href = "network-image-node.html"><code>ASNetworkImageNode</code></a><br>
        <a href = "multiplex-image-node.html"><code>ASMultiplexImageNode</code></a></td>
    <td>in place of UIKit's <code>UIImageView</code></td> 
  </tr>
  <tr>
    <td><a href = "video-node.html"><code>ASVideoNode</code></a><br>
        <code>ASVideoPlayerNode</code></td>
    <td>in place of UIKit's <code>AVPlayerLayer</code><br>
        in place of UIKit's <code>UIMoviePlayer</code></td> 
  </tr>
  <tr>
    <td><a href = "control-node.html"><code>ASControlNode</code></a></td>
    <td>in place of UIKit's <code>UIControl</code></td>
  </tr>
  <tr>
    <td><a href = "button-node.html"><code>ASButtonNode</code></a></td>
    <td>in place of UIKit's <code>UIButton</code></td>
  </tr>
  <tr>
    <td><a href = "map-node.html"><code>ASMapNode</code></a></td>
    <td>in place of UIKit's <code>MKMapView</code></td>
  </tr>
</table>

<br>
Despite having rough equivalencies to UIKit components, in general, Texture nodes offer more advanced features and conveniences. For example, an `ASNetworkImageNode` does automatic loading and cache management, and even supports progressive jpeg and animated gifs. 

The <a href = "https://github.com/texturegroup/texture/tree/master/examples/AsyncDisplayKitOverview">`AsyncDisplayKitOverview`</a> example app gives basic implementations of each of the nodes listed above. 
 

# Node Inheritance Hierarchy 

All Texture nodes inherit from `ASDisplayNode`. 

<img src="/static/images/node-hierarchy.png" alt="node inheritance flowchart">

The nodes highlighted in blue are synchronous wrappers of UIKit elements.  For example, `ASScrollNode` wraps a `UIScrollView`, and `ASCollectionNode` wraps a `UICollectionView`.  An `ASMapNode` in `liveMapMode` is a synchronous wrapper of `UIMapView`.