             i++
         }
     }
-
+    
     private func lowerRectForDigit(digit:Int) -> CGRect {
         let imageSize = digitsImage.size
-
+        
         var rect = upperRectForDigit(digit)
         rect.origin.y += imageSize.height / 2
         return rect
     }
-
+    
     private func upperRectForDigit(digit:Int) -> CGRect {
         let imageSize = digitsImage.size
-
+        
         let individualHeight = digitsImageIndividualDigitSize.height
         let point = CGPointMake(0, CGFloat(digit) * individualHeight)
         return CGRect(origin: point, size: CGSize(width: imageSize.width, height: individualHeight))
     }
-
+    
     @objc public enum AnimationDirection: Int {
         case Up
         case Down
     }
-
-    public func playScrollAnimation(direction:AnimationDirection) {
+    
+    public func playScrollAnimation(direction:AnimationDirection, completion:(()->Void)? = nil) {
         if animationDuration == 0 { return }
         
         let durationOffset = self.animationDuration/Double(contentLayers.count + 1)
-
+        
         var offset = durationOffset * 2
         CATransaction.begin()
         CATransaction.setDisableActions(true)
+        CATransaction.setCompletionBlock(completion)
         var i = 0
         for char in text.characters {
             if let digit = Int(String(char)) {

            }
        }
    }

    public var animationDuration:NSTimeInterval = 1.0
    lazy public var animationCurve:CAMediaTimingFunction = CAMediaTimingFunction(controlPoints: 0, 0, 0.1, 1)

    private var _digitsImage:TRZImage?
    public var digitsImage:TRZImage! {
        if (_digitsImage == nil) {

            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
        #endif
        
        if let box = imageCache?.setImage(image, key: cacheKey, font: font, color: self.textColor) {
            _cachedDigitsImageBox = box
        }
        
        return image
    }
    
    private var contentLayers = [CALayer]()
    
    public private(set) var boundingSize:CGSize = CGSizeZero
    
    private func recolorScrollLayers() {
        if contentLayers.count != text.characters.count {
            relayoutScrollLayers()
            setScrollLayerContents()
            return
        }
        
        var contentLayersIndex = contentLayers.startIndex
        var charactersIndex = text.characters.startIndex
        
