 	}
 
 
+	public func didEndDecelerating() {
+		// override in subclasses
+	}
+
+
+	public func didEndDragging(willDecelerate willDecelerate: Bool) {
+		// override in subclasses
+	}
+
+
 	public func didScroll() {
 		// override in subclasses
 	}

		scrollViewController.updateAppearStateForAllChildrenAnimated(true)

		scrollCompletion?(cancelled: true)
	}




		scrollViewController.isInScrollingAnimation = false

		if decelerate {
			scrollViewController.didEndDragging(willDecelerate: true)
		}
		else {
			onMainQueue { // loop one cycle because UIScrollView did not yet update .tracking
				scrollViewController.updateAppearStateForAllChildrenAnimated(true)
				scrollViewController.updatePrimaryViewController()
				scrollViewController.didEndDragging(willDecelerate: false)
			}
		}
	}
