美文网首页
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