http://www.raywenderlich.com/76024/swift-table-view-animations-tutorial-drop-cards

标准 table view 是一个强大而又灵活的数据呈现方式。大部分情况下你的app 都使用了某种形式的 table view。可是。它有一个缺点就是。无法进行太多的定制,你的 app 会淹没在成千上万的相似是 app 中。

为了不使用千篇一律的 table view,我们能够利用某些动画以便使你的app 更加耀眼。看一下 Google+ app。卡片从边上滑过的动画。

假设你没看过,请在这里下载

,

,

}

}

}

注意,创建 startTransform 的代码如今放到了存储属性TipInCellAnimatorStartTransform 中。并且我们没实用定义 getter 方法的方式定义这个属性(这样做会导致每次调用getter 方法都创建一次 transform)。我们是通过一个闭包+()的方式给这个属性赋默认值的。一对空的圆括号表示强制调用这个闭包。闭包的返回值将传递给这个属性。这个细节在苹果的Swift 官方教程中“初始化”一章中讨论。

请參考“用闭包或函数设置属性的默认值”。

有克制地使用动画

尽管动画的效果非常好看,但却不能无克制地使用它。假设音效和动画的滥用以前让你深受其害,那么你应该知道过度依赖特效所带来的恶果!

在这个项目中。仅仅需在单元格第一次渲染的时候使用特效即可了——当表格从上到下滚动时。

当表格从下往上滚时,单元格不须要使用特效。

我们须要存储哪些单元格已经显示过的。以便第二次显示时不使用特效。这里。我们使用了一个 Swift 字典对象。

打开MainViewController.swift 增加一个属性:

var didAnimateCell:[NSIndexPath: Bool] = [:]

定义了一个字典对象, key 为 NSIndexPaths 类型,值为 Bools 类型。然后改动 tableView(tableView:,willDisplayCell:, forRowAtIndexPath:) 方法为:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,                          forRowAtIndexPath indexPath: NSIndexPath) {

if didAnimateCell[indexPath] == nil || didAnimateCell[indexPath]! == false {

didAnimateCell[indexPath] = true

TipInCellAnimator.animate(cell)

}

}

我们推断单元格的 index path 是否已经在didAnimateCell 字典中存在。假设不存在,说明是第一次显示这个单元格。那么我们就执行单元格动画并将 indexPath 设置到字典中。假设存在,什么都不做。

执行程序。上拉滚动表格,你将看到单元格动画:

最新文章

  1. 缓存工厂之Redis缓存
  2. IOS判断设备是否已越狱
  3. flask SQLAlchemy中一对多的关系实现
  4. freeradius 安装出错的解决办法
  5. int([x[, base]]) : 将一个字符转换为int类型,base表示进制
  6. Android:从程序员到架构师之路Ⅰ
  7. pdo如何防止 sql注入
  8. leetcode Valid Parentheses python
  9. html&css学习笔记----YJZJZQA
  10. 3D Slicer中文教程(三)—数据加载及保存方式
  11. 利用Python+163邮箱授权码发送邮件
  12. ECharts常用设置记录
  13. Codeforces 781C Underground Lab
  14. (原)torch,caffe,python中读入数据的默认范围
  15. (八)git更改提交操作
  16. Java数据类型转换(自动转换和强制转换)
  17. Strip CodeForces - 487B (单调队列)
  18. Tomcat 签名认证配置简例
  19. ELK Stack 5.2.2 安装文档
  20. redux-saga基本用法

热门文章

  1. vscode编写插件详细过程
  2. python随机数
  3. Bag of Words/Bag of Features的Matlab源码发布
  4. Xcode中使用GitHub详解
  5. bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
  6. 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-c
  7. QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素
  8. 【转】Android应用程序完全退出
  9. [Linux&Vim]基础01
  10. HDOJ/HDU 2550 百步穿杨(注意排序)