         presentAnimation(indexPath)
     }
 }
-
 /** 单小图图展示Cell
-    简单地小图展示Cell，主要展示小图，并且传递接受大图，小图的URL传递给需要展示的下面的控制器
+简单地小图展示Cell，主要展示小图，并且传递接受大图，小图的URL传递给需要展示的下面的控制器
 */
-//MARK: - 单小图图展示Cell
+//MARK: - 展示单张小图图片的cell
+class PhotoCell: UICollectionViewCell {
+    //MARK: - 属性
+    /// 展示图像视图
+    lazy var imageView : UIImageView? = {
+        let imageView = UIImageView()
+        imageView.contentMode = UIViewContentMode.ScaleAspectFill
+        imageView.clipsToBounds = true
+        self.addSubview(imageView)
+        return imageView
+        }()
+    /// 图像地址
+    var url : NSURL? {
+        didSet {
+            imageView!.sd_setImageWithURL(url)
+        }
+    }
+    // 功能方法
+    // 判断长短图
+    private func isLongImage(image : UIImage) -> Bool{
+        let size = scaleImageSize(image, relateToWidth: UIScreen.mainScreen().bounds.width)
+        if size.height > UIScreen.mainScreen().bounds.height {
+            return true
+        }
+        return false
+    }
+    // 计算图片缩放根据给定的宽度
+    private func scaleImageSize(image : UIImage, relateToWidth width: CGFloat) -> CGSize {
+        let imageW = image.size.width
+        let imageH = image.size.height
+        let scaleH = width * imageH / imageW
+        return CGSizeMake(width, scaleH)
+    }
+    //MARK: - 内部方法
+    // 布局内部图像视图
+    override func layoutSubviews() {
+        super.layoutSubviews()
+        imageView?.frame = self.bounds
+    }
+}
+/** 展示全部图片的控制器
+    通过小图和大图数组，可以动态展示所有的图片，同时根据接受的通知，改变自己的背景图片的alpha值，从而产生交互式转场的效果。
+*/
+//MARK: - 展示全部图片的控制器
+class PhotoBrowserViewController: UIViewController {
+    //MARK: - 属性
+    /// 布局属性
+    lazy var layout : UICollectionViewFlowLayout = {
+        let flowLayout = UICollectionViewFlowLayout()
+        flowLayout.itemSize = self.view.frame.size
+        flowLayout.minimumLineSpacing = 0
+        flowLayout.minimumInteritemSpacing = 0
+        flowLayout.scrollDirection = UICollectionViewScrollDirection.Horizontal
+        return flowLayout
+        }()
+    /// collectionView
+    lazy var collectionView : UICollectionView = {
+        let cv = UICollectionView(frame: self.view.bounds, collectionViewLayout: self.layout)
+        cv.backgroundView = UIView(frame: self.view.bounds)
+        cv.backgroundColor = UIColor.clearColor()
+        // 设置背景视图的颜色，为了之后对于不同的颜色可以通过调节视图的透明度来实现颜色渐变
+        cv.backgroundView?.backgroundColor = UIColor.blackColor()
+        // 设置数据源代理
+        cv.dataSource = self
+        // 设置其他属性
+        cv.pagingEnabled = true
+        cv.showsHorizontalScrollIndicator = false
+        return cv
+        }()
+    /// 关闭按钮
+    lazy var closeBtn : UIButton = {
+        return self.createButton("关闭")
+        }()
+    /// 大图URL数组
+    var largeImageURLList : [NSURL]?
+    /// 大图URL数组
+    var smallImageURLList : [NSURL]?
+    /// 浏览的位置
+    var index : Int?
+    /// 所有frame对于主视图的位置
+    var startFrameList : [CGRect]?
+    var endFrameList : [CGRect]?
+    
+    //MARK: - 内部方法
+    override func loadView() {
+        let frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width + 20, UIScreen.mainScreen().bounds.height)
+        view = UIView(frame: frame)
+        view.backgroundColor = UIColor.clearColor()
+        view.addSubview(self.collectionView)
+        // 创建约束
+        var cons = [AnyObject]()
+        cons += NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[btn(80)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["btn" : closeBtn])
+        
+        cons += NSLayoutConstraint.constraintsWithVisualFormat("V:[btn]-20-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["btn" : closeBtn])
+        // 添加约束
+        view.addConstraints(cons)
+        
+        // 监听方法
+        closeBtn.addTarget(self, action: "close", forControlEvents: UIControlEvents.TouchUpInside)
+    }
+    override func viewDidLoad() {
+        // 注册cell
+        collectionView.registerClass(PhotoBrowserCell.self, forCellWithReuseIdentifier: reuseIdentifier)
+        // 注册通知
+        registerNotification()
+    }
+    override func viewDidLayoutSubviews() {
+        let indexPath = NSIndexPath(forItem: index!, inSection: 0)
+        collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: UICollectionViewScrollPosition.allZeros, animated: false)
+    }
+    // 销毁通知
+    deinit{
+        NSNotificationCenter.defaultCenter().removeObserver(self)
+    }
+    //MARK: - 监听方法
+    /// 关闭视图
+    func close() {
+        SVProgressHUD.dismiss()
+        // 确定关闭的图像索引
+        let indexPath = collectionView.indexPathsForVisibleItems().last as! NSIndexPath
+        let index = indexPath.item
+        let cell = collectionView.cellForItemAtIndexPath(indexPath)
+        self.view.alpha = 0
+        // 发送开始关闭通知
+        NSNotificationCenter.defaultCenter().postNotificationName(PhotoBrowserStartDismissNotification, object: nil, userInfo: ["index": index])
+    }
+    func didDismiss(){
+        dismissViewControllerAnimated(false, completion: nil)
+    }
+    //MARK: - 功能方法
+    /// 所有注册的通知
+    private func registerNotification(){
+        // 注册通知
+        NSNotificationCenter.defaultCenter().addObserver(self, selector: "didDismiss", name: PhotoBrowserEndDismissNotification, object: nil)
+        // 注册通知
+        NSNotificationCenter.defaultCenter().addObserver(self, selector: "didScale:", name: PhotoBrowserDidScaleNotification, object: nil)
+    }
+    /// 创建按钮
+    private func createButton(title: String) -> UIButton {
+        let btn = UIButton()
+        btn.setTitle(title, forState: UIControlState.Normal)
+        btn.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
+        btn.backgroundColor = UIColor.brownColor()
+        view.addSubview(btn)
+        // 设置自动布局须关闭
+        btn.setTranslatesAutoresizingMaskIntoConstraints(false)
+        return btn
+    }
+    /// 开始缩放的通知方法
+    func didScale(noti : NSNotification){
+        let scale = noti.userInfo!["scale"] as! CGFloat
+        // 隐藏关闭按钮
+        closeBtn.hidden = scale < 1.0
+        collectionView.backgroundView?.alpha = scale
+    }
+}
+//MARK: - PhotoBrowserViewController的数据源方法
+extension PhotoBrowserViewController: UICollectionViewDataSource {
+    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        return largeImageURLList?.count ?? 0
+    }
+    
+    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
+        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! PhotoBrowserCell
+        // 添加子控制器
+        if !(childViewControllers as NSArray).containsObject(cell.viewerVC!) {
+            addChildViewController(cell.viewerVC!)
+        }
+        // 设置图片URL
+        cell.smallURL = smallImageURLList![indexPath.item]
+        cell.largeURL = largeImageURLList![indexPath.item]
+        // 传递当前索引
+        cell.index = indexPath.item
+        return cell
+    }
+}
+/** 单大图图展示Cell
+    通过传递单图处理的控制器，其他的实现都是通过控制器内部实现，cell只是起到了重用和组织的作用
+*/
+//MARK: - 单大图图展示Cell
 class PhotoBrowserCell: UICollectionViewCell {
     //MARK: - 属性
     /// 查看照片控制器

        return CGPointMake(offsetx, offsety)
    }
}
//MARK: - UIScrollViewDelegate代理方法
extension SinglePhotoBrowserViewController : UIScrollViewDelegate {
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {

        super.init(coder: aDecoder)
    }
}

/** 处理单张图片的控制器
    内部通过scrollView实现大小图放大缩小，当放大缩小的时候，处理了contentOffset的偏移实现了中心对齐
    根据不同的比例缩放，发送不同的通知，根据scale的通知，让父视图的背景色改变实现透明穿透的交互式转场效果
    
    当图片缩放之后，需要自己手动从新回到初始的tranform，不然哪怕图片看着没变大，内部的imageView
    的大小依旧是原来的大小。
*/

//MARK: - 处理单张图片的控制器
class SinglePhotoBrowserViewController: UIViewController {
