首页 > 其他分享 >Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo

Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo

时间:2022-11-28 17:05:26浏览次数:50  
标签:headView 下拉变 Demo self offset OC tableViewW myView navHeight


Swift语言实现下拉变大效果:(上拉缩小效果随后研究......)

关键代码:方法一:

self.automaticallyAdjustsScrollViewInsets = false;
        
        tableViewW = UITableView.init(frame: CGRectMake(0, 0, screenWidth(), screenHeight()), style: .Plain);
        tableViewW.delegate = self;
        tableViewW.dataSource = self;
        tableViewW.showsVerticalScrollIndicator = false;
        tableViewW.tableFooterView = UIView.init();
        //下面两句话是关键点,并且顺序不能错,否则初始化运行的时候图片显示不完全
        tableViewW.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
        tableViewW.contentOffset = CGPointMake(0, -200);
        if tableViewW.respondsToSelector(Selector("setLayoutMargins:"))
        {
            tableViewW.layoutMargins = UIEdgeInsetsZero;
        }
        if tableViewW.respondsToSelector(Selector("setSeparatorInset:"))
        {
            tableViewW.separatorInset = UIEdgeInsetsZero;
        }
        self.view.addSubview(tableViewW);
        
        headView = UIImageView.init(frame: CGRectMake(0, -200, screenWidth(), 200));
        headView.image = UIImage.init(named: "33.jpg");
        //这句话是关键点设置高度改变宽度也改变
        headView.contentMode = UIViewContentMode.ScaleAspectFill;
        tableViewW.addSubview(headView);

实现UIScrollView的代理方法:

func scrollViewDidScroll(scrollView: UIScrollView) {
        let offSetY:CGFloat = scrollView.contentOffset.y;//当这里有导航条的时候:+NavigationBarHeight
        if offSetY < -200
        {
            //下拉,图片放大
            var frameE:CGRect = headView.frame;
            frameE.origin.y = offSetY;
            frameE.size.height = -offSetY;//contentMode = UIViewContentModeScaleAspectFill;时,高度改变宽度也改变
            headView.frame = frameE;
            
        }

OC语言运用第二种方法实现,图片的下拉放大,下拉缩小的效果

关键代码:

self.title = @"下拉变大,上拉缩小";
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    _myTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, navHeight, screenWidth, screenHeight - navHeight)];
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    _myTableView.contentInset = UIEdgeInsetsMake(headViewRect.size.height-navHeight-navHeight, 0, 0, 0);
    [self.view addSubview:_myTableView];
    
    _myView = [[HeadView alloc]initWithFrame:headViewRect backgroundView:@"22.jpg" headView:@"sun.png" headViewWidth:(CGFloat)(screenWidth / 4) signLabel:@"用户名:太阳*黑子"];
    _myView.backgroundColor = [UIColor clearColor];
    _myView.userInteractionEnabled = NO;
    [self.view addSubview:_myView];
    
    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    backBtn.frame = CGRectMake(20, 20, 60, 44);
    [backBtn setTitle:@"<<返回" forState:UIControlStateNormal];
    [backBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [backBtn addTarget:self action:@selector(backBtnClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:backBtn];

实现UIScrollView的方法:

#pragma mark ------- UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    CGFloat offset_Y = scrollView.contentOffset.y + headViewRect.size.height-navHeight-navHeight;
    
    if  (offset_Y < 0) {
        //下拉图片放大
        _myView.backgroundView.contentMode = UIViewContentModeScaleToFill;
        
        _myView.backgroundView.frame = CGRectMake(offset_Y*0.5 , -navHeight, screenWidth - offset_Y, headViewRect.size.height - offset_Y);
    }else if (offset_Y > 0 && offset_Y <= (headViewRect.size.height-navHeight-navHeight)) {
        //下拉图片缩小,并改变图片的显示效果
        _myView.backgroundView.contentMode = UIViewContentModeTop;
        
        _myView.backgroundView.frame = CGRectMake(0 ,navHeight* offset_Y/(headViewRect.size.height-navHeight-navHeight)-navHeight , screenWidth , headViewRect.size.height -(navHeight + navHeight* offset_Y/(headViewRect.size.height-navHeight-navHeight)-navHeight) - offset_Y);
        
        
        CGFloat width = offset_Y*(40-(screenWidth / 4))/(headViewRect.size.height-navHeight-navHeight)+(screenWidth / 4);
        _myView.headView.frame =CGRectMake(0, 0, width,width);
        _myView.headView.layer.cornerRadius =width*0.5;
        _myView.headView.center = _myView.backgroundView.center;
        
        _myView.signLabel.frame =CGRectMake(0, CGRectGetMaxY(_myView.headView.frame), screenWidth, 40);
        
        _myView.signLabel.alpha = 1 - (offset_Y*3 / (headViewRect.size.height-navHeight-navHeight) /2);
    }
}

效果图:

Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo_下拉

  

Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo_上拉_02

  

Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo_ios开发_03



标签:headView,下拉变,Demo,self,offset,OC,tableViewW,myView,navHeight
From: https://blog.51cto.com/u_15894905/5892250

相关文章

  • Swift基础之init方法,实例(对象)方法,类(静态)方法的使用(多标签Demo)
    Xcode更新过后,有些方法都进行了改变,Demo中有变化的都进行了简单的标记,具体以后遇见再说创建一个UIView类,用init方法创建两种类型,显示多标签,创建静态方法进行调用,创建类方法......
  • 关于Block的使用和5点注意事项
    一、概念首先需要了解的是Block是一个代码块,是一个变量的形式存在的。二、构成了解我们需要在函数中声明block,因为是变量的形式,而且存在静态变量形式类型1: NSString......
  • iOS开发之字数不一的多标签Demo
    有朋友让帮他写一个封装的字数不一的多标签视图,所以今天将代码展示一下,供大家学习代码中封装了两种方法,分别是:1.传递数组,数组中是NSString类型的方法;2.传递数组,数组中是NSDi......
  • plsql和instantclient版本都对,依然不能初始化oci.dll解决办法
    这里写到"初始化错误,不能初始化oci.dll,请确认你安装的是64位的Oracle客户端",这个描述还是非常的到位啊,我一检查,果然下载的客户端是32位的,在确保自己的软件版本和配置......
  • Prometheus 监测 RocketMQ 最佳实践
    本文作者:郭雨杰,阿里云智能技术专家。Prometheus集成的50多款云产品中,RocketMQ在可观测方面实现了非常完善的功能,是一个特别具有代表性的云产品。RocketMQ如何接入......
  • docker Nginx 项目发布过程
    Docker镜像Nginx部署项目1、下载Dockeryuminstall-yyum-utilsdevice-mapper-persistent-datalvm22、安装Nginx2.1、使用Docker安装Nginx2.1.1查询可用的Ngin......
  • vue大文件上传demo
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传......
  • 图数据平台解决方案:Docker部署
    图数据平台解决方案:Docker部署​​图数据平台解决方案:Docker部署​​​​一、安装Docker​​​​二、使用Docker安装单节点​​​​三、使用Docker安装集群​​Here’sthe......
  • Docker 基础操作
    Docker基础操作目录Docker基础操作1docker操作镜像1.1docker基础操作镜像1.2从容器创建一个新的镜像1.3导出/入镜像1.4推送App镜像1.5本地仓库2docker操作容......
  • ROBOCOPY 命令
    命令语法:ROBOCOPYsourcedestination[file[file]…][options]源:源目录(驱动器:\路径或\服务器\共享\路径)目标:目标目录(驱动器:\路径或\服务器\共享\路径)文件:要复......