Swiftgram/docs/index.md
2014-10-22 14:57:06 -07:00

2.7 KiB

layout title
page Smooth asynchronous user interfaces for iOS apps

![logo]({{ site.baseurl }}/assets/logo.png)

AsyncDisplayKit is an iOS framework that keeps even the most complex user interfaces smooth and responsive. It was originally built to make Facebook's Paper possible, and goes hand-in-hand with pop's physics-based animations — but it's just as powerful with UIKit Dynamics and conventional app designs.


### Quick start

ASDK is available on CocoaPods. Add the following to your Podfile:

pod 'AsyncDisplayKit'

(ASDK can also be used as a regular static library: Copy the project to your codebase manually, adding AsyncDisplayKit.xcodeproj to your workspace. Add libAsyncDisplayKit.a to the "Link Binary With Libraries" build phase. Include -lc++ -ObjC in your project linker flags.)

Import the framework header, or create an Objective-C bridging header if you're using Swift:

#import <AsyncDisplayKit/AsyncDisplayKit.h>

AsyncDisplayKit Nodes are a thread-safe abstraction layer over UIViews and CALayers:

![logo]({{ site.baseurl }}/assets/node-view-layer.png)

You can construct entire node hierarchies in parallel, or instantiate and size a single node on a background thread — for example, you could do something like this in a UIViewController:

dispatch_async(_backgroundQueue, ^{
  ASTextNode *node = [[ASTextNode alloc] init];
  node.attributedString = [[NSAttributedString alloc] initWithString:@"hello!"
                                                          attributes:nil];
  [node measure:CGSizeMake(screenWidth, FLT_MAX)];
  node.frame = (CGRect){ CGPointZero, node.calculatedSize };

  // self.view isn't a node, so we can only use it on the main thread
  dispatch_sync(dispatch_get_main_queue(), ^{
    [self.view addSubview:node.view];
  });
});

You can use ASImageNode and ASTextNode as drop-in replacements for UIImageView and UITextView, or create your own nodes to implement node hierarchies or custom drawing. ASTableView is a node-aware UITableView subclass that can asynchronously preload cell nodes without blocking the main thread.


### Learn more
  • Read the [Getting Started guide]({{ site.baseurl }}/guide)
  • Get the sample projects
  • Browse the [API reference]({{ site.baseurl }}/appledoc)
  • Watch the NSLondon talk