美文网首页
iOS学习笔记之图片浏览器(PhotoBrowser)

iOS学习笔记之图片浏览器(PhotoBrowser)

作者: 嗯哎嘶唠咯 | 来源:发表于2017-08-22 14:40 被阅读520次
    “即使全世界抛弃了,还有篮球陪伴着我”

    闲扯

    书到用时方恨少,事非经过不知难。
    ------陆游

    最近闲来无事,着手写一些UI类的效果,那么就拿图片浏览器开刀吧。对着别人的开源项目,依葫芦画个瓢😂。

    参考资料

    自己练习的demo

    DSHPhotoBrowser


    demo效果

    ☺.gif

    demo笔记

    首先是基于 UICollectionView 嵌套 UIScrollView 去实现的(这种嵌套引发的手势问题简直不能再多再烂了 ),那又怎样我还是要说 :P

    问题:

    有两个:
    1.UICollectionViewCell 中嵌套 UIScrollView ,导致
    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;代理方法不会响应
    2.在照片展示界面:添加的拖拽手势 panGesture 会与collectionView 滑动手势产生手势冲突,导致无法翻页。

    解决方法:

    1>针对第一个问题,出现的原因:UIScrollView 拦截了这次点击事件。
    so ~~~,有两种解决方法
    PLAN A:
    将scrollView的 userInteractionEnabled 属性设置为 NO , 把scrollView 的交互性关闭,这样点击的回调就可以触发了。但是这种做法并不好(根据需求来说),因为scrollView 是用来做交互的(图片的捏合,缩放操作),把交互性关掉只是拆东墙补西墙的做法,还是要考虑需求来进行使用。
    PLAN B:
    给 UICollectionViewCell 添加点击手势 :P,我实在是没有太好的方法/(ㄒoㄒ)/~~
    PS:这是我能想到的两种方法,如果有更好的办法,请告诉我🙏🙏🙏。

    2> 那么第二个问题 ,出现的原因:pan 手势 拦截了 UICollectionView 的滑动手势。知道了原因,就可以进行对症下药。
    解决方法:根据手势的滑动方向,如果是上下滑动则允许触发pan手势,做动画处理;如果是左右滑动,那么就禁掉 pan 手势。(我是根据水平竖直的滑动速度,来判断手指的滑动方向的🤣)
    so,实现gesture 的这个代理方法就可以了:

    - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer{
        //如果不是pan 手势,那么直接返回
        if (![gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) return YES;
        
        // 判断是否是长图
        if (self.scrollView.contentSize.height > self.contentView.bounds.size.height) {
            return NO;
        }
    
        //判断滑动方向
        CGPoint velocity = [gestureRecognizer velocityInView:self.contentView];
        // 如果是左右滑动,不在响应拖拽手势;如果是上下滑动,就响应拖拽的手势
        if (fabs(velocity.x) > fabs(velocity.y)){
            return NO;
        }else{
            return YES;
        }    
    }
    

    PS:学习的脚步未敢停止 💪 :P

    相关文章

      网友评论

          本文标题:iOS学习笔记之图片浏览器(PhotoBrowser)

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