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. 前端实现搜索历史和清空历史(angularjs+ionic)

    要实现的页面效果: 1.显示历史搜索, 2.最近搜索的排在最前, 2.最多显示8条历史 4.清空历史记录 思路: 1.首先显示历史记录需要一个数组searchItems,通过ng-repeat显示每一 ...

  2. 【python标准库模块一】时间模块time学习

    本文介绍python的标准库模块time的常见用法 时间模块time 导入时间模块 import time 得到时间戳,这是统计从1970年1月1日0点0分到现在经过了多少秒,一般用于加减法一起用,比 ...

  3. 2018 dnc 公司案例大全,迎接.NET Core开源新时代

    2018 dnc 公司案例大全,迎接.NET Core开源新时代   dnc = .NET Core.dotnet Core dnc是微软新一代主力编程平台,开源.免费.跨平台.轻量级.高性能,支持L ...

  4. dict的操作和三级菜单

    dict的基本操作 # Author:nadech info = { "stu001":"sjp", "stu002":"cxx& ...

  5. JQuery写的一个常见的banner

    大致的布局如下: <div class="banner" >                <div class="pic">      ...

  6. ACM 饭卡

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  7. MongoDB 高级索引

    考虑以下文档集合(users ): { "address": { "city": "Los Angeles", "state&qu ...

  8. java中八种基本数据类型以及它们的封装类,String类型的一些理解

    在我们面试或者考试过程中经常会考到八种基本数据类型以及它们的封装类,那么有哪八种基本数据类型呢?它们的封装类又是什么呢? 首先,八种基本数据类型分别是:int.short.float.double.l ...

  9. Django项目实践4 - Django站点管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  10. 27 自定义View 和案例

    有时安卓提供的View不满足我们的需求时可以创建一个类继承View或其子类重写方法 如 package com.qf.sxy.day28_customview.view; import android ...