瀑布流使用自定义了UICollectionViewLayout的UIcollectionview,不同于市面上🤣大多数的图片浏览器使用UIscrollview,我的图片浏览器用的是UIcollectionview,可以复用cell,性能棒棒集成简单。
先上图
主要讲下图片浏览器吧,在UIcollectionviewcell 里,每个cell是全屏的,cell里放一个全屏的scrollview,scrollview上放一个imageview(绕不绕)
这个方法是scrollview的代理方法,返回你要缩放的东西,也就是咱们的相片
//这个方法的返回值决定了要缩放的内容(只能是UISCrollView的子控件)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.photoImg;
}
这个方法是在缩放过程中对相片的位置做一下改变
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGFloat offsetX = (scrollView.bounds.size.width > scrollView.contentSize.width)?
(scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5 : 0.0;
CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?
(scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5 : 0.0;
self.photoImg.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,
scrollView.contentSize.height * 0.5 + offsetY);
}
接下来就是加手势了例如给cell加一个双击放大的手势,只需要在双击的方法里如下处理一下,相应的可以添加单击手势
- (void)doDoubleTap:(UITapGestureRecognizer *)recognizer
{
CGPoint touchPoint = [recognizer locationInView:self];
if (self.mainScrollView.zoomScale <= 1.0)
{
CGFloat scaleX = touchPoint.x + self.mainScrollView.contentOffset.x;//需要放大的图片的X点
CGFloat sacleY = touchPoint.y + self.mainScrollView.contentOffset.y;//需要放大的图片的Y点
[self.mainScrollView zoomToRect:CGRectMake(scaleX, sacleY, 10, 10) animated:YES];
}
else
{
[self.mainScrollView setZoomScale:1.0 animated:YES]; //还原
}
}
传送门 ---> YLPhotoBrower
以上。