Skip to content
UILabel replacement with fine-grain appear/disappear animation
Objective-C Ruby
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
ZCAnimatedLabel.xcodeproj complete ZCDashLabel, use code from AGGeometryKit to give arbitrary b… Mar 26, 2015
ZCAnimatedLabel Update ZCEasingUtil.m Nov 13, 2015
.gitignore Initial commit Mar 11, 2015
LICENSE Initial commit Mar 11, 2015 Update Jul 31, 2015
ZCAnimatedLabel.podspec update podspec to 0.0.4 Jan 11, 2016


UILabel-like view with easy to extend appear/disappear animation


  • Rich text support (with NSAttributedString)
  • Group aniamtion by character/word/line
  • Customizable animation start delay for each text block
  • Great performance, only changed area is redrawn
  • Optional layer-based implementation
  • 3D/Geometry transform support (layer based only)
  • iOS 5+ compatibility


  • Default


  • Fall


  • Duang/Spring


  • Flyin


  • Focus


  • Shapeshift


  • Reveal


  • Thrown


  • Transparency


  • Spin


  • Dash


  • More to come

How to use

ZCAnimatedLabel is available via CocoaPods. If you don't need all the effect subclasses, simply drag ZCAnimatedLabel.(h|m), ZCCoreTextLayout.(h|m) and ZCEasingUtil.(h|m) into your project and start customizing your own.


ZCAnimatedLabel has two modes: non-layer based and layer based. In the first mode, ZCAnimatedLabel is a flat UIView, every stage of animation is drawn using Core Graphics, you can customize redraw area for your animation for better performance. Following methods can be overriden:

  • - (void) textBlockAttributesInit: (ZCTextBlock *) textBlock;
  • - (void) appearStateDrawingForRect: (CGRect) rect textBlock: (ZCTextBlock *) textBlock;
  • - (void) disappearStateDrawingForRect: (CGRect) rect textBlock: (ZCTextBlock *) textBlock;
  • - (CGRect) redrawAreaForRect: (CGRect) rect textBlock: (ZCTextBlock *) textBlock;

Second option is layer based, where each text block is a simple CALayer, 3D tranform is possible in this mode by setting layer's transform property, if redraw area is bigger and not too many text blocks, this can achive a performance gain. Set self.layerBased to YES and override following methods for customization:

  • - (void) textBlockAttributesInit: (ZCTextBlock *) textBlock;
  • - (void) appearStateLayerChangesForTextBlock: (ZCTextBlock *) textBlock;
  • - (void) disappearLayerStateChangesForTextBlock: (ZCTextBlock *) textBlock;


  • Merge CALayers no longer animating into a single backing store and reuse CALayer for animating layers. (Even better performance for layerBased implementation)
  • More Effects, possily glyph related ones
  • Use core animation emmiter

Thanks to

  • LTMorhpingLabel for heavy inspiration. If you like ZCAnimatedLabel, you should definitely this one out.
  • AGGeometryKit for arbitrary shape 3D transform code piece used in ZCDashLabel
You can’t perform that action at this time.