 
 // MARK: - HFSwipeViewDelegate
 @objc public protocol HFSwipeViewDelegate: NSObjectProtocol {
+    optional func swipeView(swipeView: HFSwipeView, didFinishScrollAtIndexPath indexPath: NSIndexPath)
     optional func swipeView(swipeView: HFSwipeView, didFinishScrollAtIndexPath indexPath: NSIndexPath, scrolledDirection: UIRectEdge)
+    optional func swipeView(swipeView: HFSwipeView, didSelectItemAtPath indexPath: NSIndexPath)
     optional func swipeView(swipeView: HFSwipeView, didSelectItemAtPath indexPath: NSIndexPath, tappedDirection: UIRectEdge)
     optional func swipeView(swipeView: HFSwipeView, didChangeIndexPath indexPath: NSIndexPath)
     optional func swipeViewWillBeginDragging(swipeView: HFSwipeView)

        }
        
        if circulating {
//            let multiplier = Int(self.width / (itemSize.width + itemSpace))
//            var remainder = self.width - (itemSize.width + itemSpace) * CGFloat(multiplier)
//            
//            if 0 < remainder && remainder < 1 {
//                // ignore tiny space
//                remainder = 0
//            }
//            if remainder > 0 {
//                dummyCount = multiplier + 1
//            } else if remainder == 0 {
//                dummyCount = multiplier
//            } else {
//                loge("check calculation logic")
//            }
            dummyCount = itemCount
            if dummyCount >= 1 {
                dummyWidth = CGFloat(dummyCount) * (itemSize.width + itemSpace)

            } else {
                showingIndex = realIndex.row - count - dummyCount
            }
            //            log("\(#function)[\(self.tag)]: \(realIndex.row) -> \(showingIndex)")
            return NSIndexPath(forItem: showingIndex, inSection: 0)
        } else {
            return NSIndexPath(forItem: realIndex.row, inSection: 0)
