UIScrollView重用

你可以参照 UITableView 的 cell 重用机制,总结重用机制如下:

  • 维护一个重用队列
  • 当元素离开可见范围时,removeFromSuperview 并加入重用队列(enqueue)
  • 当需要加入新的元素时,先尝试从重用队列获取可重用元素(dequeue)并且从重用队列移除
  • 如果队列为空,新建元素
  • 这些一般都在 scrollViewDidScroll: 方法中完成

实际使用中,需要注意的点是:

  • 当重用对象为 view controller 时,记得 addChildeViewController
  • 当 view 或 view controller 被重用但其对应 model 发生变化的时候,需要及时清理重用前留下的内容
  • 数据可以适当做缓存,在重用的时候尝试从缓存中读取数据甚至之前的状态(如 table view 的 contentOffset),以得到更好的用户体验
  • 当 on screen 的元素数量可确定的时候,有时候可以提前 init 这些元素,不会在 scroll 过程中遇到因为 init 开销带来的卡顿(尤其是以 view controller 为重用对象的时候)
时间: 2024-10-07 04:18:13

UIScrollView重用的相关文章

UI第九讲.UITableView表视图创建,表视图的重用机制,表视图的相关配置方法

一.UITableView表视图创建 1>.基本属性: UITableView继承自UIScrollView,所以可以滚动          表视图的每一条数据都是显示在UITableViewCell对象中          表视图可以分区显示数据,每个分区称为一个section,每一行称为row,编号都是从0始 2>.重要用法: 最重要的是两个代理方法 <UITableViewDelegate,UITableViewDataSource>(其中必须实现的是 numberOfRow

UIScrollView用法

UIScrollView是iphone中的一个重要的视图,它提供了一个方法,让你在一个界面中看到所有的内容,从而不必担心因为屏幕的大小有限,必须翻到下一页进行阅览.确实对于用户来说是一个很好的体验.但是又是如何把所有的内容都加入到scrollview,是简单的addsubView.假如是这样,岂不是scrollView界面上要放置很多的图形,图片.移动设备的显示设备肯定不如PC,怎么可能放得下如此多的视图.所以在使用scrollView中一定要考虑这个问题,当某些视图滚动出可见范围的时候,应该怎

iOS UITableView的cell重用标识

转自   http://www.2cto.com/kf/201308/238449.html UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入 UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用

UIScrollView 实践经验

转载自:http://tech.glowing.com/cn/practice-in-uiscrollview/ UIScrollView(包括它的子类 UITableView 和 UICollectionView)是 iOS 开发中最常用也是最有意思的 UI 组件,大部分 App 的核心界面都是基于三者之一或三者的组合实现.UIScrollView 是 UIKit 中为数不多能响应滑动手势的 view,相比自己用 UIPanGestureRecognizer 实现一些基于滑动手势的效果,用 U

如何解决UITableViewCell因重用机制引起的重影问题

UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑. UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier

UIView重用展示(类似卡片堆叠效果)

我们都知道自带重用展示效果的视图是UITableView和UICollectionView. 1,UITableView: 在app中最常看到的是UITableView,是因为重用机制非常好,而且自定义cell可实现特别多的UI效果,应用特别广泛.比如微信的聊天界面.好友列表界面.朋友圈,类似这些的都是UITableView.大家都会用,就不多说了. 2,UICollectionView: 在app中有时候会看到一些很炫的效果,而且是重用展示的,比如最常看到的瀑布流(屏幕中有两列(通常两列)然后

解决tableView中cell动态加载控件的重用问题

tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问题,即使你能做到该cell只根据数值加载了一回控件,你也没法保证不出现重用问题:) 效果(请注意查看,移动下面的格子时,上面出现了重用的问题) 源码: YXCell.h // // YXCell.h // YXTableView // // Copyright (c) 2014年 Y.X. All rights reserved. // #import

UIscrollView 的子视图复用

复用原理: 1.添加一个可视集合,一个重用集合: @property (nonatomic, strong) NSMutableSet *visibleLabels; @property (nonatomic, strong) NSMutableSet *reusedLabels; 2.刚开始创建单屏多N个的子视图(N=1,2,3都可以),这里我创建的是9+2=11个label for (int i=0; i<self.maxNumbersDotForX+2; i++) { [self show

iOS开发-自己定义重用机制给ScrollerView加入子视图

事实上这个问题我非常早就想过,仅仅是没有通过去写程序实现,昨天有人提起,我就巧了一下 不知道大家打印郭tableview:cellforrow中cell初始的次数,也就是重用池中的cell个数.这个是固定的,比方屏幕最多能够显示4个cell那么重用池个数可能为5个6个或者7左右,我就想了假设scrollview去实现,子视图也应该是有一个个数的,那么怎样去实现重用池呢? 我想到了数组,可变数组,我在loadview中将scrollview的可滑动区域设置为10000.然后给scrollview每