     
 }
 
+// MARK: ResizableCollectionViewDelegate - default implementation
+extension ResizableCollectionViewDelegate {
+    
+    func willPinchIn(collectionView: ResizableCollectionView) {
+        // nothing
+    }
+    func willPinchOut(collectionView: ResizableCollectionView) {
+        // nothing
+    }
+    
+    func didPinchIn(collectionView: ResizableCollectionView) {
+        // nothing
+    }
+    func didPinchOut(collectionView: ResizableCollectionView) {
+        // nothing
+    }
+    
+}
+
+// MARK: ResizableCollectionViewDataSource
 public protocol ResizableCollectionViewDataSource : UICollectionViewDataSource {
     
     func minNumberOfCellsInLine(collectionView: ResizableCollectionView) -> Int
-    
     func maxNumberOfCellsInLine(collectionView: ResizableCollectionView) -> Int
     
     func marginOfCells(collectionView: ResizableCollectionView) -> CGFloat
     
-    func threasholdOfZoom(collectionView: ResizableCollectionView) -> CGFloat
-}
-
+    func thresholdOfZoom(collectionView: ResizableCollectionView) -> CGFloat
+}
+
+// MARK: ResizableCollectionViewDataSource - default implementation
+extension ResizableCollectionViewDataSource {
+    func minNumberOfCellsInLine(collectionView: ResizableCollectionView) -> Int {
+        return DefaultNumberOfCells.min
+    }
+    
+    func maxNumberOfCellsInLine(collectionView: ResizableCollectionView) -> Int {
+        return DefaultNumberOfCells.max
+    }
+    
+    func marginOfCells(collectionView: ResizableCollectionView) -> CGFloat {
+        return defaultMarginOfCells
+    }
+    
+    func thresholdOfZoom(collectionView: ResizableCollectionView) -> CGFloat {
+        return defaultThresholdOfZoom
+    }
+    
+}
+
+// MARK: ResizableCollectionView
 public class ResizableCollectionView: UICollectionView {
     
     /// ResizableCollectionViewDelegate

                return
            }
            
            let threashold = (self.myDataSource == nil) ? CGFloat(0.5) : self.myDataSource!.threasholdOfZoom(self)
            if (self.collectionViewLayout as? UICollectionViewTransitionLayout)?.transitionProgress > threashold {
                self.finishInteractiveTransition()
                self.numberOfCells = self.nextNumberOfCells()
            } else {

    
    private func collectionViewFlowLayout(numberOfCells: Int) -> UICollectionViewFlowLayout {
        let layout = UICollectionViewFlowLayout()
        let margin = (self.myDataSource == nil) ? defaultMarginOfCells : self.myDataSource!.marginOfCells(self)
        let cellWidth = (UIScreen.mainScreen().bounds.size.width - margin * (CGFloat(numberOfCells) + 1)) / CGFloat(numberOfCells)
        layout.itemSize = CGSize(width: cellWidth , height: cellWidth)
        return layout
