         }
     }()
     
-    // Delegate
-    public var didStart: ((didStartSwipingView: UIView, atLocation: CGPoint) -> ())?
-    public var swiping: ((swipingView: UIView, atLocation: CGPoint, translation: CGPoint) -> ())?
-    public var didEnd: ((didEndSwipingView: UIView, atLocation: CGPoint) -> ())?
-    public var didSwipe: ((didSwipeView: UIView, inDirection: ZLSwipeableViewDirection) -> ())?
-    public var didCancel: ((didCancelSwipingView: UIView) -> ())?
-
-    // Swipe Control
+    // MARK: Delegate
+    public var didStart: ((view: UIView, atLocation: CGPoint) -> ())?
+    public var swiping: ((view: UIView, atLocation: CGPoint, translation: CGPoint) -> ())?
+    public var didEnd: ((view: UIView, atLocation: CGPoint) -> ())?
+    public var didSwipe: ((view: UIView, inDirection: ZLSwipeableViewDirection) -> ())?
+    public var didCancel: ((view: UIView) -> ())?
+
+    // MARK: Swipe Control
     /// in percent
     public var translationThreshold = CGFloat(0.25)
     public var velocityThreshold = CGFloat(750)

            return .None
        }
    }
}

public class ZLSwipeableView: UIView {
    // MARK: - Public
    // Data Source
    public var numPrefetchedViews = 3
    public var nextView: (() -> UIView)? {
        didSet {
            loadViews()
        }
    }
    // Animation
    public var animateView: (view: UIView, index: Int, views: [UIView], swipeableView: ZLSwipeableView) -> () = {
        func toRadian(degree: CGFloat) -> CGFloat {
            return degree * CGFloat(M_PI/100)

            
            let directionChecked = ZLSwipeableViewDirection.fromPoint(translation) & direction != .None
            let signChecked = CGPoint.areInSameTheDirection(translation, p2: velocity)
            let translationChecked = abs(translation.x) > translationThreshold * bounds.width ||
                                     abs(translation.y) > translationThreshold * bounds.height
            let velocityChecked = velocityMag > velocityThreshold
            if directionChecked && signChecked && (translationChecked || velocityChecked){
                let normalizedTrans = translation.normalized
                let throwVelocity = max(velocityMag, velocityThreshold)
                let directionVector = CGVector(dx: normalizedTrans.x*throwVelocity, dy: normalizedTrans.y*throwVelocity)

                pushView(aView, fromPoint: location, inDirection: directionVector)
                removeTopView()
                didSwipe?(view: aView, inDirection: ZLSwipeableViewDirection.fromPoint(translation))
                loadViews()
            } else {
                snapView(aView, toPoint: convertPoint(center, fromView: superview))
                didCancel?(view: aView)
            }
            didEnd?(view: aView, atLocation: location)
        default:
            break
        }
