Swift 表视图动画教程: Drop-In Cards
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 设置到字典中。假设存在,什么都不做。
执行程序。上拉滚动表格,你将看到单元格动画:
最新文章
- 缓存工厂之Redis缓存
- IOS判断设备是否已越狱
- flask SQLAlchemy中一对多的关系实现
- freeradius 安装出错的解决办法
- int([x[, base]]) : 将一个字符转换为int类型,base表示进制
- Android:从程序员到架构师之路Ⅰ
- pdo如何防止 sql注入
- leetcode Valid Parentheses python
- html&;css学习笔记----YJZJZQA
- 3D Slicer中文教程(三)—数据加载及保存方式
- 利用Python+163邮箱授权码发送邮件
- ECharts常用设置记录
- Codeforces 781C Underground Lab
- (原)torch,caffe,python中读入数据的默认范围
- (八)git更改提交操作
- Java数据类型转换(自动转换和强制转换)
- Strip CodeForces - 487B (单调队列)
- Tomcat 签名认证配置简例
- ELK Stack 5.2.2 安装文档
- redux-saga基本用法
热门文章
- vscode编写插件详细过程
- python随机数
- Bag of Words/Bag of Features的Matlab源码发布
- Xcode中使用GitHub详解
- bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
- 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-c
- QML学习:Rectangle,Text,TextEdit,Flickable,Flipable元素
- 【转】Android应用程序完全退出
- [Linux&;Vim]基础01
- HDOJ/HDU 2550 百步穿杨(注意排序)