放大UICollectionView中单个单元格的内容

jjr*_*mos 5 zooming ios pinchzoom uicollectionview uicollectionviewcell

当一个图像全屏打开时,我试图实现与照片应用程序中相同的行为; 即,我希望能够在我的不同图像之间滚动,也可以捏缩放其中任何一个.与照片应用程序一样,在我放大特定图像后,我希望能够在我的图库的不同图像之间滚动.

我的情况是这样的:我有一个UICollectionView,定制UICollectionViewFlowLayout其中itemSize被设置为屏幕的大小,和一个自定义UICollectionViewCell有一个UIImageView.这可以很好地滚动浏览不同的照片,问题是滚动到它们.

我尝试的第一种方法是WWDC 2012会话中描述的方法:"高级集合视图和构建自定义布局".使用这种方法获得的效果是细胞正确缩放,但随后它将与其旁边的细胞重叠,从而产生不良影响.

第二种方法类似于WWDC 2010会议中建议的方法:"使用滚动视图设计应用程序".但是,我不完全确定这种方法可以使用UICollectionView而不是UIScrollView +子视图.我将我的视图控制器设置为UIScrollViewDelegate和覆盖viewForZoomingInScrollView:,在那里我返回给定点的可见单元格的UIImageView.如果我这样做,什么都不会发生.我也试过返回单元格,在这种情况下,UICollectionView的整个布局搞砸了.我已经看了Apple放在一起的示例项目(PhotoScroller),它成功地实现了我想要的东西,但在那里它们只是UIImageView一个子视图UIScrollView.

我认为为了用a实现Photos应用程序行为UICollectionView,我需要通过第一种方法并修改集合视图中其他单元格的布局属性而不仅仅是放大的布局属性来实现.

这听起来像是一个非常低级别的解决方案,我想知道是否有人知道更好的方法来解决这个问题.

jjr*_*mos 2

经过几天的调查后,我想出了一个解决方案,我必须做出一些妥协,但对于我的要求来说这是可以接受的。

我最终做的是将 aUIScrollView作为我的自定义的最顶层视图UICollectionViewCell,并将 a 添加UIImageView为该视图的子视图UIScrollView。当我添加时,我需要解决的第一个问题是 UIScrollViews 不能很好地与 AutoLayout 配合使用,如此处所述。因此,如果您希望图像在纵向和横向上全屏显示,请记住使用适当的自动调整大小蒙版。通过这样做并在 viewForZoomingInScrollView: 返回我的 UIImageView: 我得到了我正在寻找的缩放效果。

但我必须做的妥协是,如果应用了任何缩放(即缩放比例不同于 1.0),我不允许用户在不同图像之间滚动。除此之外,它工作得很好。