Latest 0.0.1
Homepage https://github.com/smartwalle/KIPageView
License MIT
Platforms ios , requires ARC
Authors

KIPageView

UITableView 很强大,可是只能竖向滚动;UICollectionView 可以解决各种布局难题,但是稍显复杂,对于一些简单的需求,有点杀鸡用牛刀的感觉。

在 iOS6 以前,还没有 UICollectionView,为了实现横向滚动的 UITableView,只有自己动手写组件。为了达到和 UITableView 差不多的效果,就得先弄清其内部实现机制是怎么回事。

在渲染 View 的时候,是很耗系统资源的,如果创建大量的 View, 系统运行将变得异常缓慢,甚至导致内存耗尽。但是,在实际应用中,我们难免会遇到大量的数据需要显示,如果每显示一个数据,我们都创建一个 View,那应用程序的体验将相当糟糕。所以 Apple 为 iOS 开发者提供了 UITableView,Google 为 Android 开发者提供了 ListView。

简单来讲,UITableView 采用复用机制,其只会显示其可见区域内的 UITableViewCell。我们在滑动的过程中,当超出 UITableView 可见区域的 Cell,将会从 UITableView 中移除,并加入回收池中以作复用。当 UITableView 需要显示新的 Cell,会先从回收池中查找是否有相应的 Cell 可以重用(通过 dequeueReusableCellWithIdentifier:)。如果有,则直接将其重新显示;如果没有,则创建新的 Cell。这样一来,就可以避免因创建过多的 View,导致内存耗尽的尴尬情况。

了解了其内部的运行原理,我们也可以实现一个自己的 UITableView。

很常见的一个应用场景——显示图片:如果显示一张图片,我们用一个 UIImageView 足矣,如果要显示多张图片,并且可以左右滚动,最简单的办法是用一个 UIScrollView 包含多个 UIImageView, 但是这样带来的后果则是,如果图片数据量较大,那这个程序根本没有办法正常使用。如果我们还需要实现无限循环滚动,那这个解决方案肯定是不行的。所以这时候,就得我们自己实现一个 UITableView。

最开始,我写了一个组件叫 KIFlowView,实现了上面讲的需求,但是都是 iOS5 时代的产物了,难免过于陈旧。在后续的工作中也发现,类似的需求其实挺多的,比如左右滑动的 View,如网易新闻客户端,可以左右滑动,在不同的新闻栏目之间进行切换;有时候我们也需要实现一些 Tab,如果 Tab 的项目比较多,也需要考虑复用的问题,所以决定重新写一个增强组件,作为其替代品,所以就产生了 KIPageView。

Pods:

pod 'KIPageView'

Latest podspec

{
    "name": "KIPageView",
    "version": "0.0.1",
    "summary": "KIPageView",
    "description": "## KIPageViewnUITableView u5f88u5f3au5927uff0cu53efu662fu53eau80fdu7ad6u5411u6edau52a8uff1bUICollectionView u53efu4ee5u89e3u51b3u5404u79cdu5e03u5c40u96beu9898uff0cu4f46u662fu7a0du663eu590du6742uff0cu5bf9u4e8eu4e00u4e9bu7b80u5355u7684u9700u6c42uff0cu6709u70b9u6740u9e21u7528u725bu5200u7684u611fu89c9u3002nnu5728 iOS6 u4ee5u524duff0cu8fd8u6ca1u6709 UICollectionViewuff0cu4e3au4e86u5b9eu73b0u6a2au5411u6edau52a8u7684 UITableViewuff0cu53eau6709u81eau5df1u52a8u624bu5199u7ec4u4ef6u3002u4e3au4e86u8fbeu5230u548c UITableView u5deeu4e0du591au7684u6548u679cuff0cu5c31u5f97u5148u5f04u6e05u5176u5185u90e8u5b9eu73b0u673au5236u662fu600eu4e48u56deu4e8bu3002nnu5728u6e32u67d3 View u7684u65f6u5019uff0cu662fu5f88u8017u7cfbu7edfu8d44u6e90u7684uff0cu5982u679cu521bu5efau5927u91cfu7684 View, u7cfbu7edfu8fd0u884cu5c06u53d8u5f97u5f02u5e38u7f13u6162uff0cu751au81f3u5bfcu81f4u5185u5b58u8017u5c3du3002u4f46u662fuff0cu5728u5b9eu9645u5e94u7528u4e2duff0cu6211u4eecu96beu514du4f1au9047u5230u5927u91cfu7684u6570u636eu9700u8981u663eu793auff0cu5982u679cu6bcfu663eu793au4e00u4e2au6570u636euff0cu6211u4eecu90fdu521bu5efau4e00u4e2a Viewuff0cu90a3u5e94u7528u7a0bu5e8fu7684u4f53u9a8cu5c06u76f8u5f53u7cdfu7cd5u3002u6240u4ee5 Apple u4e3a iOS u5f00u53d1u8005u63d0u4f9bu4e86 UITableViewuff0cGoogle u4e3a Android u5f00u53d1u8005u63d0u4f9bu4e86 ListViewu3002nnu7b80u5355u6765u8bb2uff0cUITableView u91c7u7528u590du7528u673au5236uff0cu5176u53eau4f1au663eu793au5176u53efu89c1u533au57dfu5185u7684 UITableViewCellu3002u6211u4eecu5728u6ed1u52a8u7684u8fc7u7a0bu4e2duff0cu5f53u8d85u51fa UITableView u53efu89c1u533au57dfu7684 Celluff0cu5c06u4f1au4ece UITableView u4e2du79fbu9664uff0cu5e76u52a0u5165u56deu6536u6c60u4e2du4ee5u4f5cu590du7528u3002u5f53 UITableView u9700u8981u663eu793au65b0u7684 Celluff0cu4f1au5148u4eceu56deu6536u6c60u4e2du67e5u627eu662fu5426u6709u76f8u5e94u7684 Cell u53efu4ee5u91cdu7528uff08u901au8fc7 dequeueReusableCellWithIdentifier:uff09u3002u5982u679cu6709uff0cu5219u76f4u63a5u5c06u5176u91cdu65b0u663eu793auff1bu5982u679cu6ca1u6709uff0cu5219u521bu5efau65b0u7684 Cellu3002u8fd9u6837u4e00u6765uff0cu5c31u53efu4ee5u907fu514du56e0u521bu5efau8fc7u591au7684 Viewuff0cu5bfcu81f4u5185u5b58u8017u5c3du7684u5c34u5c2cu60c5u51b5u3002nnu4e86u89e3u4e86u5176u5185u90e8u7684u8fd0u884cu539fu7406uff0cu6211u4eecu4e5fu53efu4ee5u5b9eu73b0u4e00u4e2au81eau5df1u7684 UITableViewu3002nnu5f88u5e38u89c1u7684u4e00u4e2au5e94u7528u573au666fu2014u2014u663eu793au56feu7247uff1au5982u679cu663eu793au4e00u5f20u56feu7247uff0cu6211u4eecu7528u4e00u4e2a UIImageView u8db3u77e3uff0cu5982u679cu8981u663eu793au591au5f20u56feu7247uff0cu5e76u4e14u53efu4ee5u5de6u53f3u6edau52a8uff0cu6700u7b80u5355u7684u529eu6cd5u662fu7528u4e00u4e2a UIScrollView u5305u542bu591au4e2a UIImageView, u4f46u662fu8fd9u6837u5e26u6765u7684u540eu679cu5219u662fuff0cu5982u679cu56feu7247u6570u636eu91cfu8f83u5927uff0cu90a3u8fd9u4e2au7a0bu5e8fu6839u672cu6ca1u6709u529eu6cd5u6b63u5e38u4f7fu7528u3002u5982u679cu6211u4eecu8fd8u9700u8981u5b9eu73b0u65e0u9650u5faau73afu6edau52a8uff0cu90a3u8fd9u4e2au89e3u51b3u65b9u6848u80afu5b9au662fu4e0du884cu7684u3002u6240u4ee5u8fd9u65f6u5019uff0cu5c31u5f97u6211u4eecu81eau5df1u5b9eu73b0u4e00u4e2a UITableViewu3002nnu6700u5f00u59cbuff0cu6211u5199u4e86u4e00u4e2au7ec4u4ef6u53eb KIFlowViewuff0cu5b9eu73b0u4e86u4e0au9762u8bb2u7684u9700u6c42uff0cu4f46u662fu90fdu662f iOS5 u65f6u4ee3u7684u4ea7u7269u4e86uff0cu96beu514du8fc7u4e8eu9648u65e7u3002u5728u540eu7eedu7684u5de5u4f5cu4e2du4e5fu53d1u73b0uff0cu7c7bu4f3cu7684u9700u6c42u5176u5b9eu633au591au7684uff0cu6bd4u5982u5de6u53f3u6ed1u52a8u7684 Viewuff0cu5982u7f51u6613u65b0u95fbu5ba2u6237u7aefuff0cu53efu4ee5u5de6u53f3u6ed1u52a8uff0cu5728u4e0du540cu7684u65b0u95fbu680fu76eeu4e4bu95f4u8fdbu884cu5207u6362uff1bu6709u65f6u5019u6211u4eecu4e5fu9700u8981u5b9eu73b0u4e00u4e9b Tabuff0cu5982u679c Tab u7684u9879u76eeu6bd4u8f83u591auff0cu4e5fu9700u8981u8003u8651u590du7528u7684u95eeu9898uff0cu6240u4ee5u51b3u5b9au91cdu65b0u5199u4e00u4e2au589eu5f3au7ec4u4ef6uff0cu4f5cu4e3au5176u66ffu4ee3u54c1uff0cu6240u4ee5u5c31u4ea7u751fu4e86 KIPageViewu3002",
    "homepage": "https://github.com/smartwalle/KIPageView",
    "license": "MIT",
    "authors": {
        "SmartWalle": "[email protected]"
    },
    "platforms": {
        "ios": null
    },
    "source": {
        "git": "https://github.com/smartwalle/KIPageView.git",
        "tag": "0.0.1"
    },
    "source_files": "KIPageView/KIPageView/*.{h,m}",
    "exclude_files": "Classes/Exclude",
    "requires_arc": true
}

Pin It on Pinterest

Share This