     }
   }
   
-  private func getDropViewFrame(dropView: DropView, position: CGPoint) -> CGRect {
-    let offsetRelativeToCenter = abs(position.x - menuCenter.x)
-    let scaleValue = 1 - offsetRelativeToCenter / menuCenter.x
+  /**
+   Calculates frame for `DropView` object accordingly to provided `position`.
+   
+   - parameter position: `CGPoint` struct to calculate new frame.
+   
+   - returns: Frame for `DropView` object on `position`.
+   */
+  private func getDropViewFrameAtPosition(position: CGPoint) -> CGRect {
+    let offsetRelativeToCenter = abs(position.x - bounds.midX)
+    let scaleValue = 1 - offsetRelativeToCenter / bounds.midX
     let dropScale = 2 * ((maxDropRadius - minDropRadius) * scaleValue + minDropRadius)
     
     return CGRect(

    labelPath.moveToPoint(
      CGPoint(x: dropView.frame.width / 2, y: -1 - dropView.label.frame.height / 2))
    labelPath.addCurveToPoint(endLabelPoint,
        controlPoint1: midLabelPoint1,
        controlPoint2: midLabelPoint2)
    
    // Constructing animation
    let animation = CAKeyframeAnimation(keyPath: "position")
    animation.path = dropPath.CGPath
    animation.removedOnCompletion = true

    dropPath.moveToPoint(dropView.center)
    dropPath.addCurveToPoint(newPosition, controlPoint1: midPoint1, controlPoint2: midPoint2)
    
    let midViewFrame1 = getDropViewFrameAtPosition(midPoint1)
    let midViewFrame2 = getDropViewFrameAtPosition(midPoint2)
    let endViewFrame = getDropViewFrameAtPosition(newPosition)
    let midLabelPoint1 = CGPoint(
      x: midViewFrame1.width / 2,
      y: -1 - dropView.label.frame.height / 2)
