         default:
             return CGSize(width: 0, height: 0);
         }
+    }
+
+    static func ratioForAsset(asset: ALAsset?, indexPath: NSIndexPath) -> CGFloat {
+
+        if let ratio = itemsRatioCache[indexPath.section] {
+            return ratio
+        }
+
+        if let _asset = asset {
+            let ratio = _asset.defaultRepresentation().dimensions().width / _asset.defaultRepresentation().dimensions().height;
+            itemsRatioCache[indexPath.section] = ratio
+
+            return ratio
+        }
+
+        return 1.0
     }
 }
 

            if paths.count > 0 {
                if let dirPath = paths[0] as? String {
                    let writePath = dirPath.stringByAppendingPathComponent(NSProcessInfo.processInfo().globallyUniqueString)
                    UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
                    
                    return NSURL(string: writePath)
                }

enum BRNImagePickerSheetItemSize {
    case Normal, Enlarged
    
    static var itemsRatioCache = [Int : CGFloat]()

    static func itemSizeForType(type: BRNImagePickerSheetItemSize, asset: ALAsset?, indexPath: NSIndexPath?) -> CGSize {
        var ratio: CGFloat = 1.0

        if let _indexPath = indexPath {
            ratio = ratioForAsset(asset, indexPath: _indexPath)
        }

        switch type {
