KKGridView:高性能iOS网格视图组件,支持类似UITableView功能与特性

Deprecated: Grid view library for iOS.

分支5Tags0
KKGridView

###已弃用 在 iOS 6 中,Apple 已针对 KKGridView 试图解决的问题推出了官方解决方案。有关更多信息,请参阅 2012 年 WWDC 的 Session 219。

###概述 高性能 iOS 网格视图(MIT 许可证)。要求:您需要使用支持*自动引用计数(ARC)*的编译器来构建 KKGridView。我们知道一开始这可能不太方便,但我们坚信现在就要求这一点更有利于未来发展。此外,迁移到 ARC 极大地提升了 KKGridView 的性能。请记住,您的项目本身不使用 ARC 也可以集成 KKGridView。

###贡献 如果您发现任何问题,欢迎随时提交 issue。但如果您愿意,我们将非常感谢您能自行修复问题并向我们发送 pull request。我们保证不会拒绝!

##当前问题

该项目的大部分功能、错误和待完善项都在 Issues 部分。目前,插入操作后存在布局问题。我们最初计划在公开发布前修复这些问题,但后来决定现在发布,以便接受外部贡献。除此之外,编辑和选择功能是目前唯一需要完善的部分。

##开发动机

KKGridView 创建于 2011 年 7 月,用于我当时正在开发的几个应用。当我发现实现这一功能既困难又耗时后,我寻求了 Giulio Petek 和 Jonathan Sterling 的帮助。此外,我们还邀请了 Kyle Hickinson、Matthias Tretter,以及最近加入的 Peter Steinberger。我们都对现有的网格视图组件感到不满;因此,我们着手打造当时 iOS 平台上最出色的网格视图组件。

##开发目标

在开始构建时,我们都明确了几个需要重点关注的共同目标。

  • 性能 — 在最糟糕的情况下也能达到 55+ FPS。
  • 与 UITableView 的相似性 — 力求做到尽可能无缝集成。
  • 功能完整性 — 如前所述,匹配最新 UITableView 实现的功能;并添加其他有价值的功能。
  • 稳健的代码库 — 我们不希望构建一个难以扩展且代码混乱的组件。

##项目集成

  • 在 Xcode 中,在与现有 *.xcodeproj 相同的目录下创建一个新的工作区。
  • 将您现有的 Xcode 项目拖入工作区。
  • 找到您的 KKGridView 副本,将 KKGridView.xcodeproj 拖入工作区,使其位于层次结构的顶部,就像您的原始项目一样。
  • 在原始项目的“Build Phases”部分,将您的项目与 libKKGridView.a 链接。
  • 现在,只需像导入 Apple 框架一样导入 KKGridView:
#import <KKGridView/KKGridView.h>
  • 你可以在任何需要的地方这样做,但我们认为最好直接在你的前缀(.pch)文件中导入。

使用方法

KKGridViewController 与 UITableViewController 类似,可以自动为你实例化一个网格视图。只需将其子类化并进行自定义即可。

或者,也可以执行自定义实例化,如下所示。

首先,实例化一个网格视图实例。使用指定的初始化器和 _gridView 实例变量:

_gridView = [[KKGridView alloc] initWithFrame:self.view.bounds dataSource:self delegate:self];

现在,您可以设置默认的 UIScrollView 和 UIView 属性,因为 KKGridView 继承自上述类。

_gridView.scrollsToTop = YES;
_gridView.backgroundColor = [UIColor darkGrayColor];
_gridView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

还必须设置度量值(未来可能会支持自动调整大小)。

_gridView.cellSize = CGSizeMake(75.f, 75.f);
_gridView.cellPadding = CGSizeMake(4.f, 4.f);

现在,可以设置头文件中提供的其他属性。

_gridView.allowsMultipleSelection = NO;

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50.f)];
headerView.backgroundColor = [UIColor redColor];
_gridView.gridHeaderView = headerView;
[headerView release] /* For the non-ARC users amongst us */

最后,您可以将网格设置为您的视图。

self.view = _gridView;

或者,您可以将网格添加到视图层级结构中。

[self.view addSubview:_gridView];

###数据源方法:

- (NSUInteger)gridView:(KKGridView *)gridView numberOfItemsInSection:(NSUInteger)section
{
  return kCellCounts[section];
}

你可以选择指定网格中所需的分区数量。(默认值为 1)

- (NSUInteger)numberOfSectionsInGridView:(KKGridView *)gridView
{
  return kNumSections;
}

最后一个必需方法是返回单元格,这与 UITableView 类似。不过,我们已为你简化了操作。KKIndexPath 的工作方式与 NSIndexPath 完全相同,只是将 -row 替换为 -index。KKGridViewCell 与 UITableViewCell 一样,设计为可被子类化。*

- (KKGridViewCell *)gridView:(KKGridView *)gridView cellForItemAtIndexPath:(KKIndexPath *)indexPath
{
  KKGridViewCell *cell = [KKGridViewCell cellForGridView:gridView];
  cell.backgroundColor = [UIColor lightGrayColor];
  return cell;
}

没有必需的委托方法,但 UITableView 中已实现的所有委托方法很快将在 KKGridView 中可用。

项目介绍

Deprecated: Grid view library for iOS.

定制我的领域