Vector animation framework in Swift for iOS and OSX.
Swift C++
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Vector animation framework in Swift based on SwiftGraphics for iOS 9 and OSX. With ShapeAnimation you can easily create various animations with a nice Swift based syntax.


SVG animation development with SVGKit happens on the SVG branch. ShapeAnimation-ObjC is an alternative vector animation framework in Objective-C.

Also note this project has moved to Swift 2.0 which requires Xcode 7.0 and Mac OS X 10.10.

What's included

  • ShapeView class which contains vector shape layers.

    • Helper functions to add image, text, circle, regular polygon, lines and other shapes.
    • Support gradient fill with animation.
    • Enumerate, hit-test or find layers.
  • Animation extension functions of CALayer.

    • opacityAnimation, flashAnimation, backColorAnimation
    • scaleAnimation, tapAnimation, transformAnimation
    • rotate360Degrees, rotationAnimation
    • shakeAnimation, moveAnimation, moveOnPathAnimation
    • slideToRight, slideAnimation, flipHorizontally, flipVertically
    • Layer dragging: constrainCenterToSuperview, bringOnScreen
  • Animation extension functions of CAShapeLayer.

    • strokeStartAnimation, strokeEndAnimation, lineWidthAnimation
    • strokeColorAnimation, fillColorAnimation, dashPhaseAnimation
    • switchPathAnimation
  • Group animation and cascaded animation.

    • animationGroup for the same layer
    • applyAnimations for multiple layers
    • Use the block-based function in apply() to play cascaded animations.
    • Pause, resume or stop animations.
  • Animations with customized properties

Stroke Lines Move on Path Radar Circles

Rotate Polygons Jumping Ball

Animation with Sliders Drag Layers


Please see the examples in MasterViewController.swift.

let layer1 = self.addLinesLayer(view, points:[(10.0,20.0),(150.0,40.0),(120.0,320.0)])
layer1.strokeEndAnimation().apply() {

let la2 = self.addLinesLayer(view, points:points2, color: UIColor.blueColor())
lla2.scaleAnimation(from:1, to:1.1, repeatCount:3).apply(duration:0.3)

let la3 = self.addLinesLayer(view, points:points3, color: UIColor.greenColor())

let la4 = self.addLinesLayer(view, points:[(10.0,20.0), (150.0,40.0), (120.0,120.0)])
let a1 = la4.moveOnPathAnimation(path).setDuration(1.6)
let a2 = la4.rotate360Degrees().setRepeatCount(2)
animationGroup([a1, a2]).autoreverses().apply()

Help Wanted

All of this code is very much a work in progress. I'm adding and changing functionality as needed.

Your help wanted. Please fork this project and submit pull requests or [issues][issues]. [issues]:

Contributions are always welcome in the following areas:

  • Header doc comments explaining what the functions do
  • Useful animation template or application examples
  • Fix issues about animation, Swift usage rules or translations


ShapeAnimation-Swift is released under a BSD License. See LICENSE file for details.


  • Could not build Objective-C module 'ShapeAnimation':
    • Quit Xcode and delete the sub folders in ~/Library/Developer/Xcode/DerivedData/.