OC-scrollview加载多个控制器界面的优化
在开发过程中,经常有一个控制器中多个字控制器界面的管理,如下图:
这种实现方式,很多种,今天主要记录用scrollview实现的方法。并且只加载当前显示界面的数据。
思路:
(1)创建3个需要展示的控制器和1个来展示这3个控制器的控制器
(2)把3个控制器添加在主控制器上
(3)在滚动的时候,判断这个字控制是否已经加载过了,没有的话,就加载,有的话,不做处理
优势:可以避免一次同时加载三个控制器的界面
代码实现如下:
1.创建视图
2.在主控制器中添加3个子控制器
2.1 创建scrollview 并添加3个子控制器,并且调用 scrollViewDidScroll 这个方法,让它默认显示第一个界面
//属性声明
@property (nonatomic, strong) UIScrollView *scrollView; #pragma mark - 添加滚动视图
- (void)addScrollView {
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;
[self.view addSubview:self.scrollView]; /**
* 注意:以前都是先把控制器的view添加到滚动视图中,会出现一个问题,一进来要加载的数据太多
* 因此,加载的时候,只加载控制器,不加载控制器的视图,等到需要用到的时候,再viewdidload即可
*/ FirstViewController *firstV = [[FirstViewController alloc] init];
[self addChildViewController:firstV]; TwoViewController *twoV = [[TwoViewController alloc] init];
[self addChildViewController:twoV]; ThreeViewController *threeV = [[ThreeViewController alloc] init];
[self addChildViewController:threeV]; self.scrollView.contentSize = CGSizeMake(self.view.bounds.size.width * 3, self.view.bounds.size.height); [self scrollViewDidScroll:self.scrollView]; } 在viewdidload中调用
//添加滚动视图
[self addScrollView];
2.2 scrollViewDidScroll 这个方法的实现(这个方法是scrollview的代理),滚动时,判断一下 下个视图是否加载过了,如果没有加载过,就把加载视图到scorllview上
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
self.offIndex = (scrollView.contentOffset.x + self.view.bounds.size.width * 0.5) / self.view.bounds.size.width ;
//获取contentOffset
CGPoint currentOffset = scrollView.contentOffset;
NSInteger page = currentOffset.x / self.view.bounds.size.width;
//取出对应控制器
UIViewController *viewController = self.childViewControllers[page];
//添加到scrollView容器
if (![viewController isViewLoaded]) { [self.scrollView addSubview:viewController.view]; viewController.view.frame = CGRectMake(page * self.view.bounds.size.width, 0,self.view.bounds.size.width, self.view.bounds.size.height);
}
}
这样就可以了,这样就会只有滚动到当前界面时,才加载当前控制器视图的数据了。
OC-scrollview加载多个控制器界面的优化的更多相关文章
- oc懒加载 & swift lazy
oc的懒加载依赖于属性的双重属性的函数属性部分. 懒加载的本质是执行get函数. swift的lazy,理论上与此类似. 编译器优化时可能对初始化块进行了保存. 懒加载的本质是延迟执行. 只要是执行, ...
- OC中加载html5调用html方法和修改HTML5内容
1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...
- NestedScrollView、ScrollView 加载完自动滑动至底部问题的解决方案
正常情况下,由于NestedScrollView/ScrollView 嵌套RecyclerView,可能会导致Recyclerview占据焦点导致整个NestedScrollView/ScrollV ...
- as3.0加载swf并控制
私人QQ 280841609 var myload:Loader=new Loader(); var url:URLRequest=new URLRequest("1.swf"); ...
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目 Android-Universal-Image-Loader 或者 ignition 都是个很好的选择. 在这里把原来 ...
- Android图片加载库:最全面的Picasso讲解
前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...
- Android 滚动RecyclerView加载图片时的流畅度优化
实现:使用onScrollStateChanged回调检测滚动状态,并在RecyclerViewAdapter内部设置类似isScrolling的状态值来控制网络图片的加载. 下面是代码举例: // ...
- 【JavaScript】图片加载由模糊变清晰 —— 图片优化
开发过程中,一些图片的展示时,加载很慢很久,后来把图片缩放压成缩略图吧,速度是快了但是模糊不清,如何处理这样问题,下面就和大家分享一下自己的处理方法. 先让客户端加载像素小的缩略图: <img ...
- js怎么动态加载js文件(JavaScript性能优化篇)
下面介绍一种JS代码优化的一个小技巧,通过动态加载引入js外部文件来提高网页加载速度 [基本优化] 将所有需要的<script>标签都放在</body>之前,确保脚本执行之前完 ...
随机推荐
- vue安装概要以及vue测试工具
一.概述 1.安装node,去node官网 2.新建一个项目,通过npm init命令初始化,即创建一个package.json文件 3.用命令 npm install vue -g 全局安装vue( ...
- Design Compiler 综合
综合(synthesis) = 转换(translation) + 优化(logic optimization) + 映射(gate mapping): 转换阶段将HDL语言描述的电路用门级逻辑实现. ...
- grep的几个参数
-a 在二进制问就爱你中,以文本方式进行搜索 -c 计算找到搜索字符串的次数 -i 忽略大小写 -n 输出行号 -v 反向选择,即没有显示搜索字符串内容的那一行 grep -n '\.$' file ...
- SEO 第四章
SEO第四章 课程目标: 掌握网站TDK的优化方法 1. 页面TKD介绍 Title keywords description 标题 关键字 描述 网站的每一个页面都有三大标签(主页.栏目页.内容 ...
- 检查bug
用selective_search生成的坐标是(ymin,xmin,ymax,xmax),并且是从1开始的,不是从0 这是cache中的gt数据,明显看到有65535,说明很有可能是0-1变成了655 ...
- NOIP考纲
首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 c ...
- PHP中的正则
概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串. j简单的说就是通过一些规定的符号和字符组合成的一种语法规则 其实,只有了解一种语言的正则使用 ...
- python解决鸡兔同笼问题
# 这个问题,是我国古代著名趣题之一. # 大约在1500年前,<孙子算经>中就记载了这个有趣的问题. # 书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足, # 问雉兔各几何 ...
- js 异步编程方案
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise http://www. ...
- 如何用 CSS 创作一个立体滑动 toggle 交互控件
效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/zjoOgX 可交互视频教程 此视 ...