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 设置到字典中。假设存在,什么都不做。
执行程序。上拉滚动表格,你将看到单元格动画:

Swift 表视图动画教程: Drop-In Cards的更多相关文章
- Swift 可展开可收缩的表视图
主要学习与运行效果 在本节的内容中,我们将通过一个具体实例的实现过程,详细讲解在表视图当中,如何创建一个可展开可收缩的表视图.为了让读者有着更为直观的印象,我们将通过模仿QQ好友列表来实现这个效果. ...
- 表视图控制器(TableViewController)(二)
1 tableView的编辑模式 1.1 问题 表视图可以进入编辑模式,当进入编辑模式就可以进行删除.插入.移动单元等操作,本案例还是使用联系人界面学习如何进入编辑模式,以及进入编辑模式之后的删除.插 ...
- IOS开发-表视图LV3导航控制器
学到这里感觉有点难了,其实这篇文章再草稿箱里放了好久了~ 最近对于学习的热情下降了.这不行-抓紧学习走起! 在这一章节的学习中主要针对导航控制器及表视图来建立多视图的应用, 首先要了解一些概念-- 1 ...
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- 浅谈Android样式开发之View Animation (视图动画)
引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...
- mysql常用表/视图管理语句
查看所有表 show tables; 查看表/视图结构 desc 表名/视图名: 查看建表过程 show create table 表名: 查看建视图过程 show create view 视图名 ...
- 表视图控制器(TableViewController)(三) 、 表视图搜索
1 乐库的设置界面 1.1 问题 tableView分为静态(static)和动态(dynamic),之前使用的都是动态的tableView,表视图的有多少分区.有多少行以及每一行显示的内容都不是固定 ...
- IOS开发之表视图(UITableView)
IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
- sql 删除表数据truncate delete drop的区别
已下内容为转载内容:学习之用 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. ...
随机推荐
- CentOS+Apache+php无法访问redis的解决方法
PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PH ...
- dedecms织梦如何删除所有的文章?
dedecms织梦如何删除所有的文章?dede一键删除所有文章的SQL命令: DELETE FROM dede_addonarticle WHERE aid >= 1 and aid<= ...
- CANoe 入门 Step by step系列(三)简单例子的剖析【转】
最好的学习方式是什么?模仿.有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段.正所谓画虎画皮难画骨. ...
- bcov进行覆盖率统计
kcov是在bcov基础上进行的,bcov已经很久没有维护了: 首先需要下载依赖库libdwraft,然后在configure时候进行指定: ./configure --with-libdwarf=/ ...
- POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 151 ...
- Ipv6_Only-b
网上好多关于ipv6的资料,说半天ipv6是什么,怎么建立测试环境,,,可是没有看到具体的操作和解决的方案,这里,为大家提供一种方案,希望给大家带来帮助吧. 总的来说有三个方面需要进行检查和修改: 1 ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 如何解决 Java 安全问题?
如何解决 Java 安全问题,目前的应对策略都十分笨拙,往往适得其反.幸运的是,有一种新的方法可以将安全机制嵌入 Java 执行平台--或者更具体地说,嵌入 Java 虚拟机中,进而规避一些「Big ...
- 如何用 React Native 创建一个iOS APP?
诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...
- Django Sqlite3 数据库向MySQL迁移
整合了两个URL而来.. 1,http://www.phodal.com/blog/django-mezzanine-sqlite3-migrate-mysql/ 2,http://www.ziqia ...