美文网首页
UIScrollView 悬停设置

UIScrollView 悬停设置

作者: David_Cap | 来源:发表于2015-08-10 17:14 被阅读649次

    UIScrollView 悬停设置

    思想

    这个蛋疼的办法也是我想了许久才解决,可能不是很优秀,希望看到的可以给我提点优化意见。

    先上图:

    起始界面.png
    大体思想如下:
    滚动界面.png 悬停界面.png
    1. 起始界面的时候让下面那个UICollectionView(就是充满酷炫图片那个)的起点停留在(0,0)但是可以通过collectionView 的 sectionInset,让他下移。
        //添加底部的图片展示瀑布流
        CGFloat waterflowCellW = (ScreenW - 3.0 * PaddingBetweenCell)/2.0;
        CGFloat waterflowCellH = waterflowCellW + 2.0*PaddingBetweenCell + HeightOfNameText + HeightOfPriceLText + 5;
        
        UICollectionViewFlowLayout *flowLayoutForWaterflow = [[UICollectionViewFlowLayout alloc]init];
        [flowLayoutForWaterflow setItemSize:CGSizeMake(waterflowCellW, waterflowCellH)];//设置cell的尺寸
        [flowLayoutForWaterflow setScrollDirection:UICollectionViewScrollDirectionVertical];//设置其布局方向
        //这里就是多加了 CGRectGetMaxY(_sortView.frame) 的距离让整个collectionview 看起来是在_sortView的下方
        flowLayoutForWaterflow.sectionInset = UIEdgeInsetsMake(PaddingBetweenCell + CGRectGetMaxY(_sortView.frame), PaddingBetweenCell, PaddingBetweenCell, PaddingBetweenCell);//设置其边界
        
        //然而在这里可以知道 起始位置时 (0,0)
        CGFloat waterflowX = 0;
        CGFloat waterflowY = 0;
        CGFloat waterflowW = ScreenW + 1;
        CGFloat waterflowH = self.view.height - 15 - 64 - 44;
        
        UICollectionView *waterflowView = [[UICollectionView alloc]initWithFrame:CGRectMake(waterflowX, waterflowY, waterflowW, waterflowH) collectionViewLayout:flowLayoutForWaterflow];
    
    
    1. 监听scroll 也是最重要的方法

      也就是我让他根据 偏移量来加减 Y;
    -(void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
            //if([scrollView isEqual: _waterflowView])
            {
                //当前位置
                CGFloat currentPosition = scrollView.contentOffset.y;
                //上一次纪录的位置 和 当前位置的差
                CGFloat distance = lastPosition - currentPosition;
                //纪录位置
                lastPosition = currentPosition;
                   
                
                _muneView.y +=  distance;
                //如果顶上那个西服没有离开屏幕,就让那个排序条的位置紧跟顶上的菜单栏,不然就等于 0实现悬停
                if(CGRectGetMaxY(_muneView.frame) > 0.1)
                {
                    _sortView.y =  CGRectGetMaxY(_muneView.frame);
                }
                else
                {
                    _sortView.y = 0;
                }
                
            }
        }
    

    相关文章

      网友评论

          本文标题:UIScrollView 悬停设置

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