《Motion Design for iOS》(三十八)

我在我自己的iPhone app Interesting中也使用了波浪形的动画。来看看我的app的动画并构建它。

动画Interesting的Stories Into Position

当我的新闻app Interesting首次打开时,我会发起一个网络请求来拉取最近的文章。当请求返回时,我需要用UITableView来放置文章数据,每行一篇文章。一些app选择在数据返回时淡入列表,一些会将行一行行地滑动到位置上,而其他的则立即显示行,没有任何动画。我选择使用一个内置的类似我们刚刚构建的音乐播放器的效果,但不是水平地动画它们,我从底部垂直地动画它们。这就是我的加载动画的样子。





要完成它,先来一步步地分解我做了什么。

  1. 如果数据返回了并且我调用了[self.tableView reloadData],它会立即出现并且对用户可见。所以我首先让列表的透明度变为0,这样我就可以操作它,不让用户看到任何东西,直到我想让他们看见。
  2. 然后我会调用[self.tableView reloadData]将数据加载到列表行中去,这时候所有的行都在它们正常的位置上,但因为整个列表透明度为0并且是隐藏的,屏幕上什么都看不见。
  3. 我遍历现在屏幕上可见的行并且移动UITableView将行都放到屏幕底部。我通过改变列表的位置,将其移动到整个列表高度的下方来达到目的,这样每行都会藏在屏幕的底部了。
  4. 现在所有的行都在屏幕的底部了,我将alpha改回1.0来让列表变得可见。现在列表是可见的了,但素有的行都在屏幕底部所以看不到任何文章。
  5. 最后,我再次遍历所有的行将其推离屏幕底部,通过移除我初始设置的变换将其动画到原本的位置上。

这个看上去相当简单的效果有这么多的步骤!这里是完成这些步骤的代码。

// 将列表变为不可见,重载数据
self.tableView.alpha = 0.0f;
[self.tableView reloadData];

// 存储一个时间变量,这样我就可以调整每行动画之间的延迟时间
CGFloat diff = .05;
CGFloat tableHeight = self.tableView.bounds.size.height;
NSArray *cells = [self.tableView visibleCells];

// 遍历行并将它们移动到屏幕底部
for (NSUInteger a = 0; a < [cells count]; a++) {
    UITableViewCell *cell = [cells objectAtIndex:a];
    if ([cell isKindOfClass:[UITableViewCell class]]) {

        // 通过变换cell的Y坐标来讲其移动到屏幕底部
        cell.transform = CGAffineTransformMakeTranslation(0, tableHeight);
    }
}

// 现在所有的行都在屏幕底部了,将列表设为可见
self.tableView.alpha = 1.0f;

// 将每行动画回位置
for (NSUInteger b = 0; b < [cells count]; b++) {
    UITableViewCell *cell = [cells objectAtIndex:b];

    [UIView animateWithDuration:1.6 delay:diff*b usingSpringWithDamping:0.77
        initialSpringVelocity:0 options:0 animations:^{
        cell.transform = CGAffineTransformMakeTranslation(0, 0);
     } completion:NULL];
}

如果你注意第二个循环,在动画的block中,我的延迟值设为了diff*b。因为我在一个循环中,我可以同步地使用循环次数变量b来保持动画的时间,只需要操作每行的动画时间间隔即可。这可以确保每一行的动画之间都是同样的时间,来达到一个好的波浪形动作。这就是全部了!



是时候换挡了。

至此,我们使用了Core Animation来创建我们的动画界面。无论我们是使用iOS 7的基于block的动画方法及其弹簧属性,还是使用很棒的为我们创建了CAKeyframeAnimation的JNWSpringAnimation框架,我们都还在Core Animation的范围内,苹果有众多的框架管理了iOS繁多的界面表现。

但有很多种方法可以解决问题,也就是说,还有其他的不使用苹果的Core Animation框架的方式可以在iOS app的屏幕上创建动作。

其中一个创建动画的方法最近获取了很多的关注。它实在是iOS动画框架界的一股清流,而且已经在世界上一些最常用的app中被用来构建了非常棒的动画。

我说的当然就是Facebook创建的杰出的Pop框架。

你准备好学习一些新东西了吗?开始吧!



查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS

版权所有:http://blog.csdn.net/cloudox_

时间: 2024-11-08 20:12:34

《Motion Design for iOS》(三十八)的相关文章

《Motion Design for iOS》(八)

在Jeff的地图动画中,他同时使用了所有位置.透明度和比例动画的组合. 初始的面板稍微缩小并且透明度降低,所以它很好地淡出到应用的背景中去了. 地图面板从一个比1.0倍稍微大一点的比例(可能是1.1倍之类的)以及0.0的透明度开始.然后动画减小到1.0倍以及1.0的透明度.它还有一个轻微的位置动画来上移一些像素. 记得这个手表的界面和它光滑的动作么?真的没有什么秘诀,这个动画设计唯一的属性就是元素的位置.没有比例或者透明度的调节,元素仅仅是在屏幕上通过改变他们的位置来移入移出.每个动画的开始时间

程序员的奋斗史(三十八)——大学断代史(二)——我与数据库的故事

文/.温国兵 惰性人皆有之,也算是人的一大天性.几日之前便构思好此文,怎奈每日杂事繁多,今日才提起笔,作下此文.本文谈谈我与数据库的故事. 说起和数据库结缘,还得从大一说起.大一刚开始接触C语言,每日就沉浸在无止境的代码中.在网上查资料的过程中,看到别人用C语言写了一个小型的图书操作程序,数据库采用的是SQL Server,运行出来的效果图很炫,惊叹原来还可以这样管理数据.熟知C语言的同学肯定对文件操作不陌生,当时我们写程序如果有静态数据,都是放在文件里的.直到后来做的C语言课程设计,我也是一大

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

QT开发(三十八)——Model/View框架编程

QT开发(三十八)--Model/View框架编程 一.自定义模型 1.自定义只读模型 QAbstractItemModel为自定义模型提供了一个足够灵活的接口,能够支持数据源的层次结构,能够对数据进行增删改操作,还能够支持拖放.QT提供了 QAbstarctListModel和QAbstractTableModel两个类来简化非层次数据模型的开发,适合于结合列表和表格使用. 自定义模型需要考虑模型管理的的数据结构适合的视图的显示方式.如果模型的数据仅仅用于列表或表格的显示,那么可以使用QAbs

三十八、git merge简介

git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上. 我们可以运行git merge -h查看其命令usage: git merge [options] [<commit>...]    or: git merge [options] <msg> HEAD <commit>    or: git merge --abort -n                    do not show a diffstat at the end of

&nbsp; CCNA实验三十八 ZFW(区域防火墙)

CCNA实验三十八 ZFW(区域防火墙) 环境:Windows XP .Packet Tracert5.3 目的:了解ZFW的原理与基本配置 说明: ZFW(Zone-Based Policy Firewall),是一种基于区域的防火墙,基于区域的防火墙配置的防火墙策略都是在数据从一个区域发到另外一个区域时才生效,在同一个区域内的数据是不会应用任何策略的,所以我们就可以将需要使用策略的接口划入不同的区域,这样就可以应用我们想要的策略.但是,有时某些接口之间可能不需要彼此使用策略,那么这样的接口只

微信小程序把玩(三十八)获取设备信息 API

原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx.onAccelerometerChange, 罗盘数据wx.onCompassChange wxml <button type="primary" bindtap="getNetWorkType">获取网络类型</button> <butt

Motion Design for iOS

Book Description Motion Design for iOS is a first-of-its-kind guide that explains how to both design & build wonderful, immersive animations for iOS. Learn about the history of animation and motion, the basic principles of engaging animation design i

第三十八象 辛丑

第三十八象 辛丑 谶 曰门外一鹿 群雄争逐劫及鸢鱼 水深火热 颂 曰火运开时祸蔓延万人後死万人先海波能使江河浊境外何殊在目前 金圣叹注解:此象兵祸起於门外有延及门内之兆 推背图网解:第三十八象应卦噬嗑.噬嗑形同张开利牙的大嘴撕扯肉食,用现在的话讲好比是一台正在工作的绞肉机.易曰:“雷电噬嗑,先王以明罚敕法.”噬嗑卦上雷下日.雷电大作,是要降妖除魔:先王严明刑罚,是为整饬法令.卜到此卦,令妖魔鬼怪胆寒,然而前景却是一片光明. 谶辞:门外一鹿何来群雄争逐?所谓门外,此处为大陆之外,即海中.鹿者,山麓

【FastDev4Android框架开发】打造QQ6.X最新版本侧滑界面效果(三十八)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50253925 本文出自:[江清清的博客] (一).前言: 这两天QQ进行了重大更新(6.X)尤其在UI风格上面由之前的蓝色换成了白色居多了,侧滑效果也发生了一些变化,那我们今天来模仿实现一个QQ6.X版本的侧滑界面效果.今天我们还是采用神器ViewDragHelper来实现,之前我们以前基于ViewDragHelper的使用和打造QQ5.X效果了,基本使用方法可以点