zoukankan      html  css  js  c++  java
  • UICollectionView下拉使header放大模糊

    模糊主要使用UIVisualEffectView,这只在ios8以后适用

    //模糊的遮罩view
    @property(nonatomic,strong) UIVisualEffectView *effectView;
    @property(nonatomic,strong) CollectionviewLayout *layout;
    
    CollectionviewLayout *layout = [[CollectionviewLayout alloc]init];
    layout.itemSize = CGSizeMake(mScreenWidth, 40);
    layout.headerReferenceSize = CGSizeMake(mScreenWidth, collectionViewHeaderHeight);
    self.layout = layout;

    遮罩view的设置

    UIBlurEffect *blur = [UIBlurEffect effectWithStyle:(UIBlurEffectStyleLight)];
    UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blur];
    effectView.alpha = 0;
    self.effectView = effectView;
    [_collectionView addSubview:_effectView];

    header是UIImageView,大小为layout.headerReferenceSize
    模糊是在-(void)scrollViewDidScroll:(UIScrollView *)scrollView中写

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
        CGFloat offSetY = scrollView.contentOffset.y;
        CGFloat deltaY = fabs(offSetY);
        if (offSetY < 0) {
            CGSize headerSize = [self.layout headerReferenceSize];
            CGRect headRect = CGRectZero;
            headRect.size.height = headerSize.height + deltaY;
            headRect.size.width = headerSize.width + deltaY;
            headRect.origin.y = headRect.origin.y - deltaY;
            headRect.origin.x = headRect.origin.x - deltaY/2;
            //UIVisualEffectView的frame应与header的ImageView的frame相同
            //上述headRect也为header的imageView的frame
            self.effectView.frame = headRect;
            self.effectView.alpha = deltaY/collectionViewHeaderHeight*1.5 ;
        }
    }

    效果为

  • 相关阅读:
    《构建之法》阅读有疑 与 个人Week1作业
    版本管理和项目管理软件浅谈
    [2019BUAA软工助教]第0次个人作业
    [2017BUAA软工助教]博客格式的详细说明
    [2017BUAA软工助教]收集个人信息
    最长英文单词串题目分析
    蓝桥杯PREV-11:横向打印二叉树
    day2
    冯如杯day1
    个人阅读作业
  • 原文地址:https://www.cnblogs.com/Apologize/p/6306578.html
Copyright © 2011-2022 走看看