         setContentOffset(of: scrollView)
     }
 
+    public func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
+        if isJumping || isOrientationChange { return }
+
+        // update currentIndex
+        if scrollView.contentOffset.x + 1.0 > frame.width * CGFloat(currentIndex + 1) {
+            update(from: currentIndex, to: currentIndex + 1)
+        } else if scrollView.contentOffset.x - 1.0 < frame.width * CGFloat(currentIndex - 1) {
+            update(from: currentIndex, to: currentIndex - 1)
+        }
+
+        updateTabViewAddition(by: scrollView)
+    }
+    
     private func setContentOffset(of scrollView: UIScrollView) {
 
         if scrollView.contentOffset.x > frame.width * (CGFloat(currentIndex) + 0.5) {

        }
    }

    /// update underbar position
    private func moveUnderlineView(scrollView: UIScrollView) {


            let ratio = scrollView.contentOffset.x.truncatingRemainder(dividingBy: contentView.frame.width) / contentView.frame.width

            switch scrollView.contentOffset.x {
            case let offset where offset >= frame.width * CGFloat(currentIndex):
                tabView.moveUnderlineView(index: currentIndex, ratio: ratio, direction: .forward)
            case let offset where offset < frame.width * CGFloat(currentIndex):
                tabView.moveUnderlineView(index: currentIndex, ratio: ratio, direction: .reverse)
