     touchPoint = pan.touchPoint(forPosition: position, flexibility: flexibility)
 
     if (pan.state == .began) {
-      self.delegate?.jellyViewDidStartDragging?(self)
+      self.didStartDragging()
       modifyShapeLayerForTouch()
     } else if (pan.state == .changed) {
       modifyShapeLayerForTouch()
     } else if (pan.state == .ended || pan.state == .cancelled) {
-      self.delegate?.jellyViewDidEndDragging?(self)
+      self.didEndDragging()
 
       if shouldInitiateAction() {
         animateToFinalPosition()

  case left, right, top, bottom
}

@objc public protocol JellyViewDelegate: class {
  @objc optional func jellyViewShouldStartDragging(_ jellyView: JellyView) -> Bool
  @objc optional func jellyViewDidStartDragging(_ curtainControl: JellyView)
  @objc optional func jellyViewDidEndDragging(_ curtainControl: JellyView)
  @objc optional func jellyViewActionFired(_ curtainControl: JellyView)
}

public final class JellyView: UIView {

  public weak var delegate: JellyViewDelegate?
  public var infoView: UIView? {
    
    willSet {
      if let view = infoView {
        view.removeFromSuperview()

    gestureRecognizer.isEnabled = true
    updateColors()
    modifyShapeLayerForInitialPosition()
    actionFired()
  }
  
  @objc private func animationInProgress() {
