             contentEndFrame = self.contentClosedFrame
             detailBeginFrame = self.detailClosedFrame
             detailEndFrame = self.detailClosedFrame
+            deviation = 0
             self.targetState = .closed
         }
         if contentBeginFrame != contentEndFrame || detailBeginFrame != detailEndFrame {
             let detailDelta = detailBeginFrame.topPoint.distance(to: detailEndFrame.topPoint)
-            self.deltaPosition = self.ease.lerp(positionDelta, from: 0, to: detailDelta)
-            let progress = max(0, min(self.deltaPosition / detailDelta, 1))
+            self.deltaPosition = self.ease.lerp(positionDelta, from: 0, to: detailDelta + deviation)
+            let progress = max(0, min((self.deltaPosition - deviation) / detailDelta, 1))
             self.contentViewController?.view.frame = contentBeginFrame.lerp(contentEndFrame, progress: progress)
             self.detailViewController?.view.frame = detailBeginFrame.lerp(detailEndFrame, progress: progress)
-            self.canFinish = self.deltaPosition > (detailDelta * self.finishDistanceRate)
+            self.canFinish = self.currentState != self.targetState
         }
     }
     

    public var deltaPosition: CGFloat
    public var velocity: CGPoint
    public var acceleration: CGFloat
    public var finishDistanceRate: CGFloat
    public var ease: IQAnimationEase
    public var canFinish: Bool
    

                contentEndFrame = self.contentFullscreenFrame
                detailBeginFrame = self.detailFullscreenFrame
                detailEndFrame = self.detailFullscreenFrame
                deviation = 0
                self.targetState = .fullscreen
            } else if positionDelta > self.detailShowedSize {
                contentBeginFrame = self.contentShowedFrame
                contentEndFrame = self.contentClosedFrame
                detailBeginFrame = self.detailShowedFrame
                detailEndFrame = self.detailClosedFrame
                deviation = self.detailShowedSize
                self.targetState = .closed
            } else if positionDelta > 0 {
                contentBeginFrame = self.contentFullscreenFrame
                contentEndFrame = self.contentShowedFrame
                detailBeginFrame = self.detailFullscreenFrame
                detailEndFrame = self.detailShowedFrame
                deviation = 0
                self.targetState = .showed
            } else {
                contentBeginFrame = self.contentFullscreenFrame
                contentEndFrame = self.contentFullscreenFrame
                detailBeginFrame = self.detailFullscreenFrame
                detailEndFrame = self.detailFullscreenFrame
                deviation = 0
                self.targetState = .fullscreen
            }
        case .showed:
