Swift基础之实现下拉变大和OC下拉变大上拉缩小Demo
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的更多相关文章
- 向上滚动或者向下滚动分页异步加载数据(Ajax + lazyload)[上拉加载组件]
/**** desc : 分页异步获取列表数据,页面向上滚动时候加载前面页码,向下滚动时加载后面页码 ajaxdata_url ajax异步的URL 如data.php page_val_name a ...
- RecyclerViewLoadMoreDemo【封装上拉加载功能的RecyclerView,搭配SwipeRefreshLayout实现下拉刷新】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装含有上拉加载功能的RecyclerView,然后搭配SwipeRefreshLayout实现下拉刷新.上拉加载功能. 在项目中将 ...
- Android下拉刷新上拉载入控件,对全部View通用!
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463 前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:Pull ...
- 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)
最近自己做一个web app需要用到上拉查询下页数据,网上看了很多很多帖子,发现并不能快速的套用,总是会出现各种问题无法使用,于是无奈自己跑去看了官方api文档,终于做了出来,至此做个笔记,以后用到可 ...
- 微信小程序 下拉刷新 上拉加载
1.下拉刷新 小程序页面集成了下拉功能,并提供了接口,我们只需要一些配置就可以拿到事件的回调. 1. 需要在 .json 文件中配置. 如果配置在app.json文件中,那么整个程序都可以下拉刷新. ...
- MUI - 上拉刷新/下拉加载
新闻信息列表必备的功能,支持Table,Ul等列表. 以下是DIV版本,在安卓端或者ios端必须使用双webview模式,传送门:http://dev.dcloud.net.cn/mui/pulldo ...
- Android PullToRefresh (GridView 下拉刷新上拉加载)
做这个需要自己去git hub上下载个pull-to-refresh 里面有个library为依赖包自己导到自己的项目中 (下载地址:https://github.com/chrisbanes/And ...
- pullToRefresh下拉刷新上拉加载
PullToRefresh 是一个第三方的工程. 之前的自定义下拉刷新控件貌似不太好用,于是网上找了这个. 参考:http://www.cnblogs.com/summers/p/4343964.ht ...
- Android PullToRefreshListView上拉刷新和下拉刷新
PullToRefreshListView实现上拉和下拉刷新有两个步骤: 1.设置刷新方式 pullToRefreshView.setMode(PullToRefreshBase.Mode.BOTH) ...
随机推荐
- c# 判断datatable中是否存在某列
if (datatable.columns.contains("要找的列名"))
- Django网站制作
创建mysite目录 django-admin.py startproject mysite这个命令作用是:这将创建在当前目录创建一个mysite目录 前提是从命令行上cd到你想储存你代码的目录,然后 ...
- Python3 元组
Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: tup1 = ('Goog ...
- Linux操作系统进程模型分析进程
Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...
- ICL Auto Vectorization
简介 此文简单介绍如何使用intel c++编译器实现向量化加速. 全文如下安排: base : 待优化的源代码. vectorization : 第一个向量化版本. aligned : 内存对其对向 ...
- shiro架构
1 shiro介绍 1.1 什么是shiro 分享牛系列,分享牛专栏,分享牛.shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会 ...
- 将Gradle项目发布到Jcenter和Maven Central
Jcenter和Maven Central 为了方便我们理解Android studio是如何帮助我们获取开源库的,我们需要理清几个概念.Apache Maven是Apache开发的一个工具,提供了用 ...
- 熟悉Python的各种基础小算法
网上有一个Python100小例子的栏目,里面代码良莠不齐,于是下面就自己实现了其中的一些案例. 01.py # coding:utf-8 import sys reload(sys) sys.set ...
- mysql进阶(二十七)数据库索引原理
mysql进阶(二十七)数据库索引原理 前言 本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. ...
- [struts2学习笔记] 第四节 学着使用struts 2的tag标签
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档: http://struts.apache.org/relea ...