   func cleanup() {
     reusableViews.removeAll()
   }
+
+  override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
+    if supportOverflow {
+      if super.point(inside: point, with: event) {
+        return true
+      }
+      for cell in visibleCells {
+        if cell.point(inside: cell.convert(point, from: self), with: event) {
+          return true
+        }
+      }
+      return false
+    } else {
+      return super.point(inside: point, with: event)
+    }
+  }
 }
 
 extension MCollectionView {

  }

  @objc func tap(gr: UITapGestureRecognizer) {
    let loc = gr.location(in: self)
    for cell in visibleCells {
      if cell.frame.contains(loc) {
        collectionDelegate?.collectionView?(self, didTap: cell, at: visibleCellToIndexMap[cell]!)
        return
      }

  }

  public var overlayView = UIView()

  public var supportOverflow = false

  // the computed frames for cells, constructed in reloadData
  var frames: [CGRect] = []
