     }
     
     
-    private func supportedRevealingStates() -> [RevealingState]
+    private var supportedRevealingStates: [RevealingState]
     {
         return RevealingState.allValues.filter{self.isRevealingStateSupported($0)}
     }

            let widthToUseForRevealedView_left = self.isRevealingStateSupported(.openLeft) ? self.getCenterXConstraintConstant(for: .openLeft) : 0.0
            let widthToUseForRevealedView_right = self.isRevealingStateSupported(.openRight) ? self.getCenterXConstraintConstant(for: .openRight) : 0.0
            
            let xOvershoot_ToTheLeft: CGFloat = fmax(0, widthToUseForRevealedView_right - xProposed)
            let xOvershoot_ToTheRight: CGFloat = fmax(0, xProposed - widthToUseForRevealedView_left)
            
            // Drag resistance:
            // Should be between 0.0 and 1.0
            // 0.0 means no resitance at all.
            // 1.0 means impossible.
            // Any other values will produce unpredictable results
            // (negative values will make the view travel more than the finger in the same direcation)
            // (values over 1.0 will make the view go in reverse (i.e. travel more than the finger in the opposite direction))
            
            
            // INVESTIGATE:
            // I need help: Why does trying to set the dragging resistance based on the overshooting, cause reverse effect (seems after the resiatance passes 0.5).
            // e.g.

    
    private func getRevealingStateForConstraintConstant(_ constraintConstant: CGFloat) -> RevealingState?
    {
        for revealingState in self.supportedRevealingStates
        {
            if constraintConstant == self.getCenterXConstraintConstant(for: revealingState)
            {
