首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WWDC2016 Session笔记 - iOS 10 UICollectionView新特性

我们来分析一下,我们模拟一下系统如何处理重用机制,效果如下图 在上图中,我们可以看出,当cell准备加载进屏幕时候,整个cell都已经加载完成,等待在屏幕外面了。...而且更重要是,屏幕外面等待加载cell是整整一行!这一行cell都已经加载数据。这是UICollectionView在用户大幅度滑动卡顿根本原因。用专业术语来说,掉帧。...只需要直接调用willDisplayCell就可以了。cell就又会重新出现在屏幕中。这就是iOS 10 整个UICollectionView生命周期。 ? ? ?...还是和iOS 9一样,我们来模拟一下系统是如何加载cell情况。 我们可以很明显看到,iOS 系统是一个个加载cell,一个cell加载完之后再去加载下一个cell。...UICollectionView 就会放下cell,处理完整个layout,此时你也可以重新刷新model或者处理数据model。

1.9K30

优雅处理网络数据,你真的会吗?不如看看这篇.

相信大家平时在用 App 时候, 往往有过这样体验,那就是加载网络数据等待时间过于漫长,滚动浏览伴随着卡顿,甚至没有网络情况下,整个应用处于不可用状态。...首先,我先和大家介绍一个概念:无限滚动,无限滚动是可以让用户连续加载内容,而无需分页。 UI 初始化时候 App 会加载一些初始数据,然后当用户滚动快要到达显示内容底部加载更多数据。...如何避免滚动的卡顿 当你遇到滚动卡顿应用程序时,通常是由于任务长时间运行阻碍了 UI 主线程上更新,想让主线程有空来响应这类更新事件,第一步就是要将消耗时间任务交给子线程去执行,避免获取数据阻塞主线程...UI,其实这样做是一种比较低效行为,因为这个方法需要为每个 Cell 调用一次,它应该快速执行并返回重用 Cell 实例,不要在这里去执行数据绑定,因为目前屏幕上还没有 Cell。...我们可以 tableView:willDisplayCell:forRowAtIndexPath: 这个方法中进行数据绑定,这个方法显示cell之前会被调用

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

iOS 面试策略之系统框架-UIScrollView及其子类

如何定制不同 Cell UI、如何与用户交互、如何与服务器端数据同步、如何在滑动最大限度保证界面的流畅,这些都是考察要点,是一个 iOS 工程师必备基本技能。...9.说说实现预加载方法 关键词:#网络传输 #无限滚动 #Threshold 实际开发中,列表经常需要随着滑动而不停展示新内容。滑动到一定程度后,我们就需要发送网络请求,以获得新数据。...举个例子,假设 Threshold 是 0.7,每个屏幕展示 10 个 cell,每次加载 10 个 cell 数据,当浏览到第 28 个 cell ,由于会加载第 40 到第 50 个 cell...数据,可是我们之前加载第 30 到第 40 个 cell 数据还没有被访问。...例如用惰性加载只处理用户想看到内容,或是用 ASDK 进行智能预加载。这样可以进一步提高用户体验,并使整个滑动性能效率最大化。 10.如何UICollectionView 实现瀑布流界面?

2.6K21

iOS流布局UICollectionView系列二——UICollectionView代理方法

协议         这个协议主要用于collectionView相关数据处理,包含方法如下: 首先,有两个方法是我们必须实现: 设置每个分区Item个数 - (NSInteger)collectionView...indexPath; 将要加载某个Item时调用方法 - (void)collectionView:(UICollectionView *)collectionView willDisplayCell...:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0); 将要加载头尾视图时调用方法...*)cell forItemAtIndexPath:(NSIndexPath *)indexPath; 已经展示某个头尾视图触发方法 - (void)collectionView:(UICollectionView...*)indexPath withSender:(id)sender{     NSLog(@"%@",NSStringFromSelector(action)); } collectionView进行重新布局时调用方法

2K20

UITableView图文混排自动布局滑动优化实战

方案 1.缓存高度 既然手动计算高度更快,那就在Reuse时候用AutoLayout帮我们算过后高度就行了,缓存一个高度字典(或者数组),算完渲染出来时候取高度,取高度时候做个判断就行。...,这一步优化是基于cellForRowAtIndexPath函数比willDisplayCell会先调用,如果在构造cell时候就把所有内容填充上去,是一种浪费。...endDisplay]; } } 然后willDisplay和endDisplay里做些特殊处理,对于UIImageView就可以 -(void)endDisplay{ [imageView...setImage:nil]; [imageView stopAnimating]; } 3.预加载加载分为两种,一种是图片预加载,另一种是内容预加载,先说内容预加载,其实就是指定滚动到第几个...于是尝试手动解GIF数据,使用第三方库FLAnimatedImage手动解GIF,渲染时候从内存读入缓存完NSData,庆幸是最新SDWebImage已经支持了FLAnimatedImage,

1.3K10

(转)iOS开发之UICollectionViewController系列(二) :详解CollectionView各种回调

(2) 因为我们是从xib文件中加载UICollectionReusableView,所以需要在相应UICollectionView上进行注册。...,UICollectionViewDataSource主要是负责加载数据,包括Section个数,每个Section中Cell个数,每个Section中Supplementary View种类...高亮就是触摸CellCell变为高亮状态,代码中反应就是CellHighligth属性变为YES。而触摸结束CellHighligth属性就变为NO。...变为非高亮",indexPath.section ,indexPath.row); } } 4.Cell从非高亮变为高亮状态调用下面的方法,为了反映Cell高亮状态,我们去改变一下...取消选中",indexPath.section ,indexPath.row); } } 9.Cell选中和取消选中都会调用上面的方法来改变Button选中状态,下面是Cell选中以及取消选中调用方法

7.6K40

iOS开发 MVVM+RAC 使用Demo效果ReactiveCocoa简介Demo分析代码Demo地址

写在前面 弄了下个人站...防止内容再次被锁定...所有东西都在这里面 welcome~ 个人博客 好长一段时间没有敲简书了! 主要是因为一直跑面试。 终于还是在上海入职了!...demo.gif ReactiveCocoa简介 iOS开发过程中,当某些事件响应时候,需要处理某些业务逻辑,这些事件都用不同方式来处理。...基础的话我还是推荐这篇博文 讲都挺细 当然不爽的话可以试试这个视频版,也是某培训机构流出 Demo分析 本文使用是豆瓣API(非官方) Demo所要做功能很简单: 从网络中请求数据,并加载到...MVVM中最重要也就是这个VM了,VM通常与RAC紧密结合在一起,主要用于事务数据处理和信号间传递。...Block比传统回调函数有2点优势: 允许调用点上下文书写执行逻辑,不用分离函数 Block可以使用local variables.

1.7K40

Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

来表示3.注册视图标识符,用于 UICollectionView 加载视图时候能分辨加载是 header 还是 footer 还是普通 cell 第二个方法是 UICollectionViewDataSource...协议里,返回一个 UICollectionReusableView 对象,实现它用于返回 Supplementary View 实例,然后 UICollectionView 将其加载;它有三个参数...接下来内容中,你将会学到以下知识点: 1.如何UICollectionView 中创建 Decoration View2.自定义布局属性,计算 section 背景图位置和大小3.实现 UICollectionView...UIGestureRecognizer 手势拖拽 iOS9 之后,UICollectionView 属性自带重新排序效果,这里不得不提 Apple 为 UICollectionView 推出几个重要方法...: •开始交互•更新交互位置•结束交互•取消交互 在为 UICollectionView 添加手势后,根据手势提供三种状态,分别调用上面的四个方法,来实现拖拽排序;另外,既然 Cell 顺序会被调整

1.9K10

iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调

(2) 因为我们是从xib文件中加载UICollectionReusableView,所以需要在相应UICollectionView上进行注册。...,UICollectionViewDataSource主要是负责加载数据,包括Section个数,每个Section中Cell个数,每个Section中Supplementary View种类...高亮就是触摸CellCell变为高亮状态,代码中反应就是CellHighligth属性变为YES。而触摸结束CellHighligth属性就变为NO。...取消选中",indexPath.section ,indexPath.row); 17 } 18 19 } 9.Cell选中和取消选中都会调用上面的方法来改变Button选中状态,下面是...Cell选中以及取消选中调用方法: 1 /** 2 * Cell选中调用该方法 3 */ 4 - (void)collectionView: (UICollectionView *

1.6K80

iOS流布局UICollectionView系列一——初识与简单使用UICollectionView

了解UICollectionView更多属性前,我们先来使用其进行一个最简单流布局试试看,controllerviewDidLoad中添加如下代码:     //创建一个layout...是iOS6.0之前新类,因此这里统一了从复用池中获取cell方法,没有再提供可以返回nil方式,并且UICollectionView回调代理中,只能使用从复用池中获取cell方式进行cell...//将某一item取消选中 - (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; //重新加载数据...- (void)reloadData; //下面这两个方法,可以重新设置collection布局,后面的方法多了一个布局完成后回调,iOS7后可以用 //使用这两个方法可以产生非常炫酷动画效果...,之后会调用上面方法block回调 - (void)finishInteractiveTransition NS_AVAILABLE_IOS(7_0); //调用这个方法取消上面的布局动画设置,之后也会进行上面方法

2.7K20

Swift多线程之Operation:异步加载CollectionView图片1. Operation 设置依赖关系2. 前置知识点内容3. CollectionView中图片进行异步加载

今天开餐小菜是看看怎么设置一个依赖关系Demo。然后就是一道相对丰盛大菜,使用OperationCollectionView上实现子线程加载图片案例。这个例子其实在生产中经常可以碰见。...知识点有:自定义Operation子类、map函数、Swift特有的元组数据类型。 下面是最终实现CollectionView异步加载图片例子效果: ?...先看看如何设置operation依赖关系。 啥叫依赖关系?有啥用啊? 打个比方咱们要做一个听音乐付费App项目,需要经过登陆、付费、下载、播放四个步骤。...start: 所有并行 Operations 都必须重写这个方法,然后在想要执行线程中手动调用这个方法。注意:任何时候都不能调用父类start方法。 main: 可选。...给item赋值图片重点地方代码: override func collectionView(_ collectionView: UICollectionView, willDisplay cell:

1.4K70

iOS开发之窥探UICollectionViewController(五) --一款炫酷图片浏览组件

这也是一个由浅入深过程,因为用起来要比做起了更容易。比如开汽车容易,造汽车可就麻烦多了。所以本篇博客第二部分,将要介绍如何去使用该自定义组件。...预加载布局方法, 该方法会在UICollectionView加载数据执行一次,该方法中负责调用一些初始化函数。具体如下所示。...其中transform值是根据CollectionView滚动偏移量来计算,所以滚动CollectionViewCell也会跟着旋转。...该方法返回YES意味着当滚动,会再次执行上面(4)方法,重新为每个Cell属性赋值。所以重写下面的方法,并返回YES(下面的表达式也是一样)才可以运动起来呢。...1 //当边界发生改变,是否应该刷新布局。如果YES则在边界变化(一般是scroll到其他地方),将重新计算需要布局信息。

1.4K80

iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController

一些开源社区上分享效果比较炫代码,有不少是使用UICollectionView,UICollectionViewController是很实用,很有必要好好搞一下。 一. ...2.当从nib文件或者Storyboard中加载集合视图,集合视图数据源(Data source)和代理对象(Delegate Object)是从nib或者Storyboard中获取。...如果data source 或者 delegate没有被指定的话,collection view将会自动赋值一个未知对象。 3.当集合视图首次出现时会重新加载上面的数据。...你可以重写loadView或者其他超类中方法,但是如果你这样做, 你必须确保在你实现方法中使用super调用了超类中相应方法。...3.代码中实现相应代理,和TableView非常类似 (1) 返回Section个数方法 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView

1.6K60

(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController

一些开源社区上分享效果比较炫代码,有不少是使用UICollectionView,UICollectionViewController是很实用,很有必要好好搞一下。 一....2.当从nib文件或者Storyboard中加载集合视图,集合视图数据源(Data source)和代理对象(Delegate Object)是从nib或者Storyboard中获取。...如果data source 或者 delegate没有被指定的话,collection view将会自动赋值一个未知对象。 3.当集合视图首次出现时会重新加载上面的数据。...你可以重写loadView或者其他超类中方法,但是如果你这样做, 你必须确保在你实现方法中使用super调用了超类中相应方法。...使用Storyboard创建一个CollectionViewController (1) 从控件库中拖拽出Collection View Controller ,你可以Cell上添加一个ImageView

5.5K40

iOS小经验:UITableView&UICollectionView设置单元格默认选中状态

场景需求 一个表格视图(或者宫格视图)中,当一个单元格被选中设置彩色样式,选中其它单元格设置灰色样式。 2. 一个思路 通过实现选中和非选择代理,以适当时机进行UI更新操作。 3....tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath; 3.2 代码设置默认选中状态 (要等数据加载完成之后再调用...// animate between regular and selected state 注意是: 这种方法改变cell选中状态,当通过屏幕点击选中其它cell时候,UITableView并不会执行...collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath; 4.2 代码设置默认选中状态 (要等数据加载完成之后再调用) 执行方法主体...手动执行代理 上述两张方案区别在于,设置选中状态完后,屏幕点击其它cell,一个执行原celldidDeselect方法,一个不执行。

3.5K50

手把手带你撸一个网易云音乐首页(三)

我们实际开发过程中,数据请求操作必不可少,必须要先将数据提供给 ViewModel,然后在数据更新重新 Reload TableView。...现实中,每个 Cell 所展示视图样式都是非常丰富,于是我们必须为 Cell 创建不同 UI 样式,每种样式对应自己数据 Model。...在这我还是选择 Cell 中放置 UICollectionView。...我们知道 UICollectionView 属性中,有一个分页属性:isPagingEnabled,当设置成 true ,每次滚动位移量等于它自身 frame 宽度;当不设置这个分页属性,它默认值是...搜索 关于如何构建不同 Cell 到这里就讲完了,如果大家有疑问的话,欢迎评论区或者我公号中发信息给我。 接下来,我们开始讲首页最后一部分---搜索框。

2.3K10

iOS开发之资讯类App常用分类控件封装与实现(CollectionView+Swift3.0+)

之前博客中,我们系列介绍了UICollectionView各种回调,以及如何自定义CollectionView布局,并给出了如何使用CollectionView自定义瀑布流。...上面这个效果就是我们今天博客中所实现效果,而下方这两个效果是我们之前UICollectionView以及自定义布局所给出相应Demo, 下方Demo所对应源码也Gitbub上进行了分享...数据源创建好后,实例化CESelectThemeController对象,将相应数据源传给我们控件即可。...手势开始,我们调用longPressBegin()方法。手势改变,我们调用longPressChange()方法。手势结束,我们调用longPressEnd()。...调用该方法,会执行DataSource代理中更新数据代理方法,也就是上面DataSource代理方法中最后一个更新数据方法。 ?

1.5K50
领券