Skip to content
Smooth asynchronous user interfaces for iOS apps.
Objective-C++ Objective-C C Swift Ruby Shell
Latest commit 5b9302b @appleguy appleguy Revert "Prevent deallocation of asyncDataSource and asyncDelegate in …
…ASCollectionView and ASTableView"

This reverts commit 3668f45.
Failed to load latest commit information.
AsyncDisplayKit-iOS [Xcode Project] Add new file to the framework target. Update to recom…
AsyncDisplayKit.xcodeproj [ASRelativeLayoutSpec] New core layout spec type: Relative Position, …
AsyncDisplayKit.xcworkspace disable autocreate schemes
AsyncDisplayKit Revert "Prevent deallocation of asyncDataSource and asyncDelegate in …
AsyncDisplayKitTestHost [Xcode Project] Add new file to the framework target. Update to recom…
AsyncDisplayKitTests [ASRelativeLayoutSpec] New core layout spec type: Relative Position, …
Base [AsyncDisplayKit] Adopt #pragma once, remove last remaining dispatch_…
docs Update video links in docs
examples Merge pull request #1262 from ekurutepe/carthage-example
smoke-tests Show status bar in examples
.gitignore Ignore coverage analysis files in master
.slather.yml [.slather.yml] Add newline to end of file
.travis.yml update build script and travis settings
AsyncDisplayKit.podspec Requires PINRemoteImage 2.1
CONTRIBUTING.md Update CONTRIBUTING.md
Default-568h@2x.png Turns ASScrollDirection into Option set in preparation for supporting…
Gemfile Generate coverage stats using slather/Coveralls
LICENSE Update Copyright License.
PATENTS New patent grant.
Podfile update Podfile to require FBSnapshotCase 1.8.1 because v2.0+ requires…
README.md Include manual downloads badge
build.sh use current-branch in carthage build

README.md

AsyncDisplayKit

Build Status Coverage Status Version Platform License Downloads

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, MapKit, AssetsLibrary, and Photos 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:

node-view-layer diagram

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_async(dispatch_get_main_queue(), ^{
    [self.view addSubview:node.view];
  });
});

In Swift:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) {
  let node = ASTextNode()
  node.attributedString = NSAttributedString(string: "hello")
  node.measure(CGSize(width: screenWidth, height: CGFloat.max))
  node.frame = CGRect(origin: CGPointZero, size: node.calculatedSize)

  // self.view isn't a node, so we can only use it on the main thread
  dispatch_async(dispatch_get_main_queue()) {
   self.view.addSubview(node.view)
  }
}

AsyncDisplayKit at a glance:

  • ASImageNode and ASTextNode are drop-in replacements for UIImageView and UITextView.
  • ASMultiplexImageNode can load and display progressively higher-quality variants of an image over a slow cell network, letting you quickly show a low-resolution photo while the full size downloads.
  • ASNetworkImageNode is a simpler, single-image counterpart to the Multiplex node.
  • ASTableView and ASCollectionView are a node-aware UITableView and UICollectionView, respectively, that can asynchronously preload cell nodes — from loading network data to rendering — all without blocking the main thread.

You can also easily create your own nodes to implement node hierarchies or custom drawing.

Learn more

Testing

AsyncDisplayKit has extensive unit test coverage. You'll need to run pod install in the root AsyncDisplayKit directory to set up OCMock.

Contributing

See the CONTRIBUTING file for how to help out.

License

AsyncDisplayKit is BSD-licensed. We also provide an additional patent grant.

The files in the /examples directory are licensed under a separate license as specified in each file; documentation is licensed CC-BY-4.0.

Something went wrong with that request. Please try again.