翻译自:iOS.Animations.by.Tutorials.v2.0

第一节(第1章) 动画属性

现在你已经看到了动画是多么的简单,你可能很想知道你的视图控件是怎么动起来的。本节将给你一个UIView动画属性的概述,然后指导你通过你的项目来探索这些动画。

并不是所有的视图属性都可以是动画的,但是所有视图动画,从最简单到最复杂,都可以通过在视图中动画属性的子集的来构建动画,就像下面的章节所概述的那样。

位置和大小

 

您可以通过改变视图的位置和frame,以使其像前一节中所做的那样使它扩大、收缩或移动。以下是您可以用来修改视图位置和大小的属性:

• bounds:通过这个属性,重新改变视图的位置和大小。

• frame:通过此属性以移动和/或缩放视图。

center:当你想把视图移动到屏幕上的新位置时,激活这个属性。

别忘了你也可以调整结构的单个成员来改变。这意味着你可以通过改变中心垂直点来移动视图,或者你可以通过缩小视图来减小frame.size.width。

Appearance外观

 

你可以通过背景颜色,全透明或者半透明来改变视图的内容。

• backgroundColor 背景颜色:UIKit有这个属性,随着时间的推移,改变背景颜色的色调

alpha 透明度:更改此属性以创建淡入淡出效果。

Transformation 转换

 

转换和上面是一样的,因为您也可以调整大小和位置。

• transform 转换:在动画的Block块中修改此属性,以激活视图的旋转、缩放或位置。

这些是底层的旋转变换,它更强大,允许你通过改变比例因子或旋转角度来实现动画的变化,而不是需要提供一个特定的边界或中心点。

这些看起来虽然是非常基本的建设,但你会惊讶于你将要遇到的复杂的动画效果!

Animation options动画选项

回顾您的动画代码,您总是传递nil到options参数上。

options参数让您可以通过UIKit自定义创建你的动画。你之前只调整了动画的持续时间和延迟,现在你可以对动画参数有更多的控制。

有一个UIViewAnimationOptions 的枚举值集合,你的可以选择不同的方式组合在动画中使用。

Repeating重复

您可以首先看看下面的两个动画选项:

• Repeat 重复:通过这个选项,是你的动画效果一直循环重复。

autoreverse:只有与Repeat 一起使用此参数,才能将你的动画达到一直重复播放的效果

在viewDidAppear()中修改密码框的动画,完成下面的重复效果:

[UIView animateWithDuration:0.5 delay:0.4 options:UIViewAnimationOptionRepeat animations:^{

_password.center = CGPointMake(_password.center.x+self.view.frame.size.width, _password.center.y);

} completion:nil];

构建并运行您的项目以查看更改的效果:

 

界面上标题和用户名控件通过动画进入屏幕中央安顿下来,但密码控件始终保持从它的位置飞入到屏幕中的动画。

如下,通过修改options选项,同时使用UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse的代码来运行程序:

[UIView animateWithDuration:0.5 delay:0.4 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{

_password.center = CGPointMake(_password.center.x+self.view.frame.size.width, _password.center.y);

} completion:nil];

同时使用UIViewAnimationOptionRepeat和UIViewAnimationOptionAutoreverse是重复动画的效果更连贯和舒服

(注意,OC中如果要启用多个选项,需要使用 | (双目运算符或)选项,将每个不同的枚举类型连贯以来,如上代码所示。)

再次构建和运行您的项目,这一次你会发现密码控件无法停留在当前界面上,实现了一种往复循环的效果!

Animation easing 动画速率

在现实生活中,事情不会突然启动或停止移动。像汽车或火车这样的物体会慢慢地加速,直到达到目标速度,除非撞到砖墙上立刻停止下来,否则它们会逐渐减速,直到最终到达目的地为止。

下面的图片详细说明了这个概念:

 

为了使你的动画看起来更真实,你可以在开始时应用同样的效果,在结束前放慢速度,一般来说是以慢速开始(ease-in)和以慢速结束(ease-out)的。

您可以从四种不同的减速选项中选择:

• Linear:此选项不适用于动画的加速或减速(它代表以相同速度开始至结束的过渡效果)在这本书中,你将在第3章“转换”的最后时段使用到它。

• CurveEaseIn:这个选项表示你的动画以加速(由慢到快)的形式开始。

• CurveEaseOut:这个选项表示你的动画以慢速(由快到慢)的形式结束。

• CurveEaseInOut:这个选项表示你的动画将是以加速的形式开始以慢速的形式结束(由慢到快,再由快到慢)。

为了更好地理解这些选项如何给动画添加视觉效果,您将尝试项目中的一些选项。

再次修改密码控件的动画代码,如下所示:

[UIView animateWithDuration:0.5 delay:0.4 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionCurveEaseOut animations:^{

_password.center = CGPointMake(_password.center.x+self.view.frame.size.width, _password.center.y);

} completion:nil];

编译并运行您的项目;注意密码空间是如何平稳的减速直到达到它的最右边的位置,然后它又返回到了屏幕的左侧:

 

这看起来动画更自然,因为这就是你期望事情在现实世界中移动的方式。

现在尝试相反的效果:让动画以加速的形式进入的界面中,修改相同的代码,上述代码用UIViewAnimationOptionCurveEaseIn替换UIViewAnimationOptionCurveEaseOut,代码如下:

[UIView animateWithDuration:0.5 delay:0.4 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionCurveEaseIn animations:^{

_password.center = CGPointMake(_password.center.x+self.view.frame.size.width, _password.center.y);

} completion:nil];

编译并运行您的项目;观察密码控件跳回到最右边位置的效果。这看起来不自然,不像前面的动画那样赏心悦目。

通过两种不同的效果你已经对更自然更舒服的一种动画形式有所了解,最后,让我们用UIViewAnimationOptionCurveEaseInOut代码试一试效果;UIViewAnimationOptionCurveEaseInOut也是UIKit动画效果中默认的动画效果。

您已经了解了各种动画选项如何影响您的项目,以及如何使动作看起来流畅自然。

在继续进行之前,将您一直在玩的代码中的options选项的参数更改为nil:

[UIView animateWithDuration:0.5 delay:0.4 options:nil animations:^{

_password.center = CGPointMake(_password.center.x+self.view.frame.size.width, _password.center.y);

} completion:nil];

现在你知道基本动画是如何工作的,下面为你准备了更多炫目的动画技巧。

从A点运动到B点的动画?哼–哪能这么容易!

在下一章中,您将探索如何使用弹簧驱动动画。(Boing Boing Boing Boing…………!)

挑战

如果这一章是你第一次在iOS中创建一个视图,你的可能会感觉有点迷糊。别担心不论你刚开始时候是怎么样的,你只需几章之后就能掌握很好的动画技巧。

但是现在,有一个非常简单的挑战在等着你,你将创造一个属于你自己的动画。

挑战1:让云朵逐渐显现出来

在ViewController中你有四朵云:cloud1、cloud2 cloud3,和cloud4。您的任务是在应用程序启动时将它们隐藏。

您可以大致决定您将采取的解决方案,但这里列出了您需要完成的基本步骤:

1. 在viewwillappear()中设置四朵云的alpha属性为0。

2. 在viewdidappear()使四个单独的调用animatewithduration(_:延迟:选项:动画:完成:)。如果你使用四个动画的持续时间为0.5,延迟时间分别为0.5、0.7、0.9和1.1,你会得到一个好看自然的效果。

3. 在每个动画Block中,将各自的云视图的alpha更改为1。这会使云层褪色。

当你运行的时候,你应该看到一个很好的过渡效果,使界面中的云朵控件,一个接一个出现:

 

屏幕上的所有视图都有了良好的动画效果,但是-等等…登录按钮不是动画!

 

等等-下一章你会解决的

 
 

iOS.Animations.by.Tutorials.v2.0汉化(二)的更多相关文章

  1. iOS.Animations.by.Tutorials.v2.0汉化

    翻译自:iOS.Animations.by.Tutorials.v2.0 前五章将向你介绍动画API-UIKit框架.这个API是专门设计来帮助你轻松轻而易举的为视图控件赋予生命,同时避免了核心动画的 ...

  2. iOS.Animations.by.Tutorials.v2.0汉化(四)

    第三章 转换 在前面的两章,你学习了如何创建基于视图位置和透明度alpha的动画属性的动画.但是,如果您希望在视图上添加动画或删除动画,您将如何处理呢? 您可以使用前几章的方法来设置进出界面的动画效果 ...

  3. iOS.Animations.by.Tutorials.v2.0汉化(三)

    第2章:Springs 在前一章中,您学习了如何创建UIKit的基本动画,包括如何提供起始值和结束值随着时间的UIKit,自动为你创建一个动画. 到目前为止,你的动画一直是单方向的流体运动.当你激活一 ...

  4. AndroidStudio V2.0.0.汉化

    汉化包下载:http://pan.baidu.com/s/1kVKYUjH AndroidStudio V2.0.x.版汉化工作介绍 resource_en.jar------> resourc ...

  5. UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版

    软件名称:UPX3.03+UpolyX.5 Shell v1.0 汉化绿色版软件类别:汉化软件运行环境:Windows软件语言:简体中文授权方式:免费版软件大小:635 KB软件等级:整理时间:201 ...

  6. Androidstudio2.0.0汉化教程及汉化包。

    ()Eric为大家带来Androidstudio2.0.0的简单汉化教程,许多小伙伴喜欢使用中文版的AS那么没有中文的AS只能靠自己汉化取得更好的体验. 第一步下载AS2.0.0汉化包,我有链接给大家 ...

  7. Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程

    Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimension ...

  8. WPBakery Page Builder页面生成器6.0 汉化版

    WPBakery Page Builder 是一个可视化编辑器插件 ,相较于WP自带的编辑器使用起来更加方便,同时功能更 加强大,完全的可视化操作,使用比较简单,国外有多款主题需要使用插件. WPBa ...

  9. phpstorm8.0汉化版下载

    下载地址http://www.52z.com/soft/161911.html 汉化包:http://www.7down.net/soft/20586.html phpStorm汉化方法 1.安装原版 ...

随机推荐

  1. 【转】linux shell 逻辑运算符、逻辑表达式详解

    shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测 ...

  2. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  3. IDEA精髓快捷键

    删除一行:Ctrl+X 快速查找:Ctrl+F 打开文件目录结构: Ctrl+F12 可以把代码包在一个块内:Ctrl+Alt+T 替换文本:Ctrl+R, Alt+Shift+Up/Down,上/下 ...

  4. 编译和解释性语言和python运行方式

    1.编译型语言和解释性语言 编译型语言:在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了.程序执行效率高,依赖编译器,跨平台性差些.如C. ...

  5. [Bug] 解决 Sql Server 数据库死锁问题

    SELECT request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName FROM sys.dm_tra ...

  6. JAVA并发编程学习笔记------线程的三种创建方式

    创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...

  7. python3操作pymsql模块

    pymysql是python中操作mysql的模块. 1.pymysql模块的安装 pip3 install pymysql 也可以使用pycharm这个IDE工具来安装pymysql这个模块. 2. ...

  8. python小白之路

    阅读目录: 第一章:计算机基础 计算机硬件.操作系统.网络协议 第二章:python基础 初识python.常量变量.输入输出运算符.条件与循环语句.数字与字符串.列表与字典.元组与集合.阶段小测.字 ...

  9. 洛谷 [P1801] 黑匣子

    这道题是一道splay裸题,然而身为蒟蒻的我并不会,所以这道题我维护的是一个大根堆与一个小根堆结合起来的类似沙漏的结构. 本题难点在于询问的不是最大最小值,而是第K小值,所以我们想到了维护这样两个堆, ...

  10. 原生js贪吃蛇

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...