美文网首页ios开发整理
iOS 瀑布流+图片浏览器

iOS 瀑布流+图片浏览器

作者: 不会写代码的尬先生 | 来源:发表于2018-03-23 16:10 被阅读42次

瀑布流使用自定义了UICollectionViewLayout的UIcollectionview,不同于市面上🤣大多数的图片浏览器使用UIscrollview,我的图片浏览器用的是UIcollectionview,可以复用cell,性能棒棒集成简单。

先上图

WechatIMG35.jpeg
WechatIMG34.jpeg

主要讲下图片浏览器吧,在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

以上。

相关文章

网友评论

    本文标题:iOS 瀑布流+图片浏览器

    本文链接:https://www.haomeiwen.com/subject/gpjxcftx.html