UIScroView 3倍的contentSize,左右Scroll时,懒惰加载View
UIScroView 3倍的contentSize,左右Scroll时,懒惰添加左右的View
用途:分段加载数据
定义枚举:
typedefenum {
ViewPositionLeft = ,
ViewPositionCenter,
ViewPositionRight
} ViewPosition;
变量定义:
NSInteger _currnetPage;
CGRect _leftFrame;
CGRect _centerFrame;
CGRect _rightFrame;
UIScrollView *_sv;
初始化变量:
-(void)createView
{
_currnetPage = ;
_sv = [[UIScrollView alloc] init];
_sv.frame = CGRectMake(, , , );
_sv.pagingEnabled = YES;
_sv.backgroundColor = [UIColorwhiteColor];
_sv.contentSize = CGSizeMake(_sv.frame.size.width*, _sv.frame.size.height);
_sv.showsHorizontalScrollIndicator = YES;
_sv.showsVerticalScrollIndicator = NO;
for (int i = ; i > -; i--) {
CGRect frame;
frame.origin.x = _sv.frame.size.width * ( - i);
frame.origin.y = ;
frame.size = _sv.frame.size;
UIView *lbl = [selfcreateLabeViewWithCurrentPage:i];
lbl.frame = frame;
if (i == ) {
_leftFrame = frame;
lbl.tag = ViewPositionLeft;
}
if (i == ) {
_centerFrame = frame;
lbl.tag = ViewPositionCenter;
}
if (i == ) {
_rightFrame = frame;
lbl.tag = ViewPositionRight;
}
[_sv addSubview:lbl];
}
_sv.delegate = self;
[_svscrollRectToVisible:_rightFrameanimated:NO];
[self.view addSubview:_sv];
}
创建新View的方法(selfcreateLabeViewWithCurrentPage):
- (UIView *)createLabeViewWithCurrentPage:(int)Page
{
UILabel *textView = [[UILabel alloc] init];
textView.text = [NSString stringWithFormat:@"Page %d",Page];
textView.font = [UIFont systemFontOfSize:];
textView.textColor = [UIColor blackColor];
textView.backgroundColor = [UIColorwhiteColor];
textView.textAlignment = UITextAlignmentCenter;
[_sv addSubview:textView];
return textView;
}
UIScrollViewDelegate方法:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv
{
BOOL towardsToLeft = NO;
CGFloat width = _sv.frame.size.width;
if (_sv.contentOffset.x == width) {
if (_currnetPage == ) {
_currnetPage++;
}
return;
}
if (_sv.contentOffset.x > width) {
towardsToLeft = YES;
if(_currnetPage == ){
// NSLog(@"currentPage = 0; 向左");
return;
}
// NSLog(@"向左");
}
else{
// NSLog(@"向右");
}
// _previousPage = _currnetPage;
if (towardsToLeft == YES) {
_currnetPage--;
}
else{
_currnetPage++;
}
if (_currnetPage == ) {
}
else {
[sv scrollRectToVisible:_centerFrameanimated:NO];
UIView *view = [_sv viewWithTag:_currnetPage];
view.frame = _centerFrame;
if (towardsToLeft == YES) {
UIView *viewRLeft = [_sv viewWithTag:ViewPositionLeft];
[viewRLeft removeFromSuperview];
UIView *viewRCenter = [_sv viewWithTag:ViewPositionCenter];
viewRCenter.frame = _leftFrame;
viewRCenter.tag = ViewPositionLeft;
UIView *viewRRight = [_sv viewWithTag:ViewPositionRight];
viewRRight.frame = _centerFrame;
viewRRight.tag = ViewPositionCenter;
UIView *viewRight = [self createLabeViewWithCurrentPage:_currnetPage - ];
viewRight.frame = _rightFrame;
viewRight.tag = ViewPositionRight;
[sv addSubview:viewRight];
}
else{
UIView *viewRRight = [_sv viewWithTag:ViewPositionRight];
[viewRRight removeFromSuperview];
UIView *viewRCenter = [_sv viewWithTag:ViewPositionCenter];
viewRCenter.frame = _rightFrame;
viewRCenter.tag = ViewPositionRight;
UIView *viewRLeft = [_sv viewWithTag:ViewPositionLeft];
viewRLeft.frame = _centerFrame;
viewRLeft.tag = ViewPositionCenter;
UIView *viewLeft = [self createLabeViewWithCurrentPage:_currnetPage + ];
viewLeft.frame = _leftFrame;
viewLeft.tag = ViewPositionLeft;
[sv addSubview:viewLeft];
}
}
}
希望对用到的朋友有用。
UIScroView 3倍的contentSize,左右Scroll时,懒惰加载View的更多相关文章
- mui scroll和上拉加载/下拉刷新
mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/* */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...
- js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
js用处:在做商城时,首页图片太多,严重影响首页打开速度,所以我们需要用到异步加载楼层.js名称:鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层模式js解释:1.用于商城的楼层内容异步加载,滚动条 ...
- 基于JQuery实现滚动到页面底端时自动加载更多信息
基于JQuery实现滚动到页面底端时自动加载更多信息 关键代码: 代码如下: var stop=true; $(window).scroll(function(){ totalheight = par ...
- jQuery实现滚动时动态加载页面内容
有些网站的网页内容不是一次性加载完毕的,而是在鼠标向下滚动时动态加载的,这是怎么做到的呢?看下面代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...
- Tomcat启动时自动加载Servlet
1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...
- 如何让openvpn在windows启动时自动加载
在非常需要vpn的人群中,他们几乎一整天都连接着vpn,但是每次开机都要连接vpn的过程有时候比较繁琐对于新手而言.这篇文章主要是说明如何在windows启动时自动加载openvpn自动连接,该教程适 ...
- selenium启动Chrome时,加载用户配置文件
selenium启动Chrome时,加载用户配置文件 Selenium操作浏览器是不加载任何配置的,网上找了半天,关于Firefox加载配置的多点,Chrome资料很少,下面是关于加载Chrome ...
- jquery mobile 请求数据方法执行时显示加载中提示框
在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更 ...
- 测试img在不显示时是否加载?
一直搞不明白,隐藏的元素的背景图,在页面加载时,是否自动加载? img隐藏时,图片会加载吗? 测试代码如下: <!DOCTYPE html> <html> <head&g ...
随机推荐
- Python内置的字符串处理函数整理
Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...
- Xcode集成开发环境的安装
Xcode是苹果官方提供的iOS开发环境,安装方式如下: 安装过程需要登录AppleID账号,如果你没有苹果账号,可以免费注册一个.根据提示就能完成Xcode安装.
- html5-表单
例子: text,number,email 的输入框 <!-- required:必填项 --> <!-- autofocus:获得焦点 --> <!-- placeho ...
- spring-mvc.xml中的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- WPF:换肤
看了一篇博客,觉得样式很好看,就自己动手做了一下,做个总结. 效果: 选择不同的图片背景就会改变: 直接上代码: 每个Theme对应一张图,除了图的名称不同之外,Theme?.xaml中的内容相 ...
- JavaScipt 源码解析 回调函数
函数是第一类对象,这是javascript中的一个重要的概念,意味着函数可以像对象一样按照第一类管理被使用,所以在javascript中的函数: 能"存储"在变量中,能作为函数的实 ...
- 树(一)——线段树
问题 现在有1~30这30个数,数N被抽上的概率正比于1/sqrt(N+1),求满足这个概率分布的随机数发生器. 思路 第一,如何解决这个"概率正比"问题. 第二,如何产生满足条件 ...
- oracle 11g 一直提示 严重: 监听程序未启动或数据库服务未注册到该监听程序
From:http://blog.sina.com.cn/s/blog_6734ea6d0102v6sn.html 增加操作系统环境变量:ORACLE_HOSTNAME=localhost 然后在cm ...
- 【opencv学习笔记】SetImageROI函数设置ROI区域的作用及用法
虽然先前知道ROI区域是感兴趣区域,但是真正看到调用了OpenCV的cvSetImageROI函数时,并不知道它的作用,所以还是单独写了一段代码对这个函数进行探究. OpenCVchm文档中对cv ...
- iOS学习之内存管理
1.1 引用计数 Reference Count 1.2 自动引用计数,ARC(Automatic Reference Counting) 1引用计数 引用计数(Reference Count)是一个 ...