当一个图像全屏打开时,我试图实现与照片应用程序相同的行为;即,我希望能够在我的不同图像之间滚动,也可以捏缩放其中任何一个。与照片应用程序一样,在我放大特定图像后,我希望能够在我的图库的不同图像之间滚动。
我的情况如下:我有UICollectionView
,自定义UICollectionViewFlowLayout
,其中itemSize设置为屏幕大小,自定义UICollectionViewCell
有{ {1}}。这可以很好地滚动浏览不同的照片,问题是滚动到它们。
我尝试的第一种方法是WWDC 2012 session中描述的方法:'高级集合视图和构建自定义布局'。使用这种方法得到的效果是细胞正确缩放,但随后它会与旁边的细胞重叠,从而产生不良影响。
第二种方法类似于WWDC 2010 session中建议的方法:“使用滚动视图设计应用程序”。但是,我不完全确定这种方法可以使用UICollectionView而不是UIScrollView +子视图。我将我的视图控制器设置为UIImageView
并覆盖UIScrollViewDelegate
,其中我返回给定点处可见单元格的UIImageView。如果我这样做,什么都不会发生。我也试过返回单元格,在这种情况下,UICollectionView的整个布局搞砸了。我已经看了Apple成功实现我想要的示例项目(PhotoScroller),但在那里他们只有一个viewForZoomingInScrollView:
作为UIImageView
的子视图。 / p>
我认为为了使用UIScrollView
实现Photos应用行为,我需要通过第一种方法并修改集合视图中其他单元格的布局属性来实现这一点,而不仅仅是一个人正在放大。
这听起来像是一个非常低级别的解决方案,我想知道是否有人知道更好的方法来解决这个问题。
答案 0 :(得分:2)
经过几天的调查,我提出了一个解决方案,我必须做出妥协,但我的要求是可以接受的。
我最终做的是将UIScrollView
作为自定义UICollectionViewCell
的最顶层视图,并将UIImageView
添加为UIScrollView
的子视图。我添加的第一个问题是,UIScrollViews与AutoLayout不能很好地解释here。因此,如果您希望图像在纵向和横向上都是全屏的,请记住使用适当的自动调整遮罩。通过这样做并在viewForZoomingInScrollView中返回我的UIImageView:我得到了我正在寻找的缩放效果。
我必须做的妥协是,如果应用任何缩放(即,缩放比例不同于1.0),我不允许用户在不同图像之间滚动。除此之外,它运作良好。