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);
    }
}

效果图:

     

Demo下载:http://download.csdn.net/detail/hbblzjy/9606681


Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo的更多相关文章

  1. 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]

    /**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...

  2. RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...

  3. Android下拉刷新上拉载入控件,对全部View通用!

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:Pull ...

  4. 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)

    最近自己做一个web app需要用到上拉查询下页数据,网上看了很多很多帖子,发现并不能快速的套用,总是会出现各种问题无法使用,于是无奈自己跑去看了官方api文档,终于做了出来,至此做个笔记,以后用到可 ...

  5. 微信小程序 下拉刷新 上拉加载

    1.下拉刷新  小程序页面集成了下拉功能,并提供了接口,我们只需要一些配置就可以拿到事件的回调. 1. 需要在 .json 文件中配置. 如果配置在app.json文件中,那么整个程序都可以下拉刷新. ...

  6. MUI - 上拉刷新/下拉加载

    新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...

  7. Android PullToRefresh (GridView 下拉刷新上拉加载)

    做这个需要自己去git hub上下载个pull-to-refresh 里面有个library为依赖包自己导到自己的项目中 (下载地址:https://github.com/chrisbanes/And ...

  8. pullToRefresh下拉刷新上拉加载

    PullToRefresh 是一个第三方的工程. 之前的自定义下拉刷新控件貌似不太好用,于是网上找了这个. 参考:http://www.cnblogs.com/summers/p/4343964.ht ...

  9. Android PullToRefreshListView上拉刷新和下拉刷新

    PullToRefreshListView实现上拉和下拉刷新有两个步骤: 1.设置刷新方式 pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH) ...

随机推荐

  1. lgp20151222 java中如何将Object类型转换为int类型

    if (object instanceof Integer) {    Integer.parseInt(object.toString()); } 很简单是不是?我就想提醒下自己,java有个特殊词 ...

  2. mysql数据库索引类型和原理

    索引初识: 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. CREATE TABLE mytable ( id serial primary key, c ...

  3. Python小代码_2_格式化输出

    Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...

  4. python笔记十四(高阶函数——map/reduce、filter、sorted)

    一.map/reduce 1.map() map(f,iterable),将一个iterable对象一次作用于函数f,并返回一个迭代器. >>> def f(x): #定义一个函数 ...

  5. python笔记六(函数的参数、返回值)

    一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...

  6. 网络安全之在Kali Linux上安装Openvas

    本文目录: 一.解决和配置更新源问题 二.安装Openvas 三.自定义登陆密码 四.升级Openvas 五.查看Openvas运行情况 六.修改OpenVAS远程链接 =============== ...

  7. MongoDB 查询文档

    语法 MongoDB 查询数据的语法格式如下: >db.COLLECTION_NAME.find() find() 方法以非结构化的方式来显示所有文档. 如果你需要以易读的方式来读取数据,可以使 ...

  8. Docker配置 DNS

    Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件. 在容器中使用 mount 命令可以看到挂载信 ...

  9. Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏

    NavBarControl控件:主要作用是制作包含多个选项组并且每个组里包含多个子选项的导航栏: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下 ...

  10. RDO Stack: No valid host was found. There are not enough hosts available.

    Issue: When you launch an instance in Newton, you may find that the instance cannot be started due t ...