《Motion Design for iOS》(二十七)

是时候添加一些动画了。为了警告框的显示,如我之前所说,我们想要覆盖层从完全透明(不可见)变成半透明。我们还想要添加两个动画到警告框中:将不透明度从0.0动画到1.0,以及将比例从大于1.0动画到1.0。这就是iOS 7的警告框做的事情,所以我们要模仿它。

首先让我们处理两个不透明度的动画(覆盖层和警告框视图),因为不透明度动画一般不需要任何高级的弹簧动作,让我们使用一些简单的基于block的UIView动画。

// 淡入灰色的封盖层和警告框视图
[UIView animateWithDuration:.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut
    animations:^{
    overlayView.alpha = 0.3f;
    alertView.alpha = 1.0f;
} completion:NULL];

我们同时在一个block中动画覆盖层和警告框视图的不透明度。这是因为我想要覆盖层和警告框在同一个动画和同样的时间中呈现给用户,所以为什么不一起动画它们呢?我将持续时间调整到比三分之一秒略少。我是通过尝试很多时间、运行动画、并做出对这个类型动画合适的选择来得出这个时间的。当显示一个重要的信息给用户时,比如警告框,使用一个柔和的动画时间是比较好的,这样实际的过渡会显得更重要。不要太快地显示出来,一个稍缓慢的时间会让信息显得更有分量和势头,且用户应该关注。

现在是时候动画警告框的比例了。这次我确实想用一个更加高级的弹簧动作来让进入比起上面例子中基于block的简单的淡入动画更有趣。在标准iOS警告款视图中,苹果公司没有弹动警告框,而是使用了一个缓慢衰减的动画来慢慢到达最终值。我们会协调弹簧动画的damping和stiffness属性来达到这样的效果。

// Scale-animate in the alert view
JNWSpringAnimation *scale = [JNWSpringAnimation animationWithKeyPath:@"transform.scale"];
scale.damping = 14;
scale.stiffness = 14;
scale.mass = 1;
scale.fromValue = @(1.2);
scale.toValue = @(1.0);

[alertView.layer addAnimation:scale forKey:scale.keyPath];
alertView.transform = CGAffineTransformMakeScale(1.0, 1.0);

这个动画的关键路径是“transform.scale”,因为这就是layer上我们想要操作的属性。还记得我们第一次创建这个UIView并设其transform属性为CGAffineTransformMakeScale(1.2, 1.2)么?这就是我们开始的的fromValue,即当前的比例尺寸,我们要将其动画回1.0的比例,这是正常的尺寸和大小。

这就是现在动画看起来的样子。





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

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

时间: 2024-09-30 05:58:26

《Motion Design for iOS》(二十七)的相关文章

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

《Motion Design for iOS》(二十五)

现在我们已经了解了Core Animation的基础并且使用了优秀的框架JNWSpringAnimation来模仿弹簧系统,是时候来开始写一些真实的示例代码了. 仿制一个iOS AlertView 重现一个熟悉的界面元素是一个很好的熟悉动画开发的方式.首先,让我们创建我们自己的标准iOS警告视图.这是内置的警告视图的样子. 在本指南之前的章节中,我解释了分解一个动画的各个组成部分有多么重要,这样你就可以准确地构建它.仅仅说"警告框动画进入屏幕"是不够的,你需要准确地知道发生了什么.让我

《Motion Design for iOS》(三十二)

现在让我们添加我们的图标按钮. // 添加图标 UIButton *icon = [UIButton buttonWithType:UIButtonTypeCustom]; [icon setImage:[UIImage imageNamed:@"map-icon"] forState:UIControlStateNormal]; [icon addTarget:self action:@selector(didTapMapIcon:) forControlEvents:UIContr

《Motion Design for iOS》(四十二)

构建立即响应的按钮 你玩过Loren Brichter的游戏Letterpress吗?我很喜欢的Loren构建的一个关于界面的东西可能不是每个人都明显喜欢的:我喜欢每个按钮在用户按下时立即切换到一个不同的状态的样子.绝对不会延迟.这不是一个简单实现的行为,因为即使你可以将一个图片设为UIButton的UIControlStateHighlighted状态图,它也只会在点击发生后一小会启动,而且它不允许更进一步的代码来运行它.如果我想要在用户点击一个UIButton后立即运行一个动画,我就不得不自

《Motion Design for iOS》(二)

流动的现实动画的起源 在1981年,迪士尼长期动画师Ollie Johnston 和 Frank Thomas(迪士尼九大元老的成员--1920年代和1930年代迪士尼的原始动画团队)写了一本名为<Disney Animation: The Illusion of Life>的书,概括了他们在迪士尼早期卡通工作中倡导人物动画的基本原则. 这12个基本动画原则在<Disney Animation: The Illusion of Life>一书中被详细的描述,并且这本书现在被工作于此

《Motion Design for iOS》(十二)

自然的动作 标准的动画时间曲线是好用的,但还可以更好,而且它们不足以让你的用户觉得对你的界面感到惊奇和愉悦,因为它们仍然是机器人的感觉,而不是如人类或受外力驱动的物体般完全流动性和自然.如果我们想要让动画变得真正的自然,我们就需要去观察自然世界以及真实的物体的行为,这样我们就可以模仿其动作.这就是软件中迷人.自然的动画的秘密本质:让你的物体动作符合物理法则,这样你界面中的元素就仿佛有了质量和动量,就如在屏幕上滑动或就在你的用户手指下方一般. 所以自然的动作时怎样的呢?符合物理法则的移动例子是什么

《Motion Design for iOS》(二十六)

现在让我们着手我们的警告框界面,为了便于在这个demo中实现,会仅仅是一个简单的图片而不是一个有label和按钮的纯代码的界面.让我们开始创建这个界面. CGFloat alertDimension = 250; CGRect alertViewFrame = CGRectMake( self.window.bounds.size.width/2 - alertDimension/2, self.window.bounds.size.height/2 - alertDimension/2, al

《Motion Design for iOS》(二十一)

一旦你完成你动画的完美动作,你只需要插入阻尼.刚度和质量值到你的动画代码中,然后无论你动画什么都会和你之前正确的值的动作一样. 我们也需要让JNWSpringAnimation对象知道我们想要动画属性的开始和结束值是什么.这是用来绘制弹簧和关键帧值的. JNWSpringAnimation *scale = [JNWSpringAnimation animationWithKeyPath:@"transform.scale"]; scale.damping = 9; scale.sti

《Motion Design for iOS》(二十二)

球的动画是从其原始尺寸增加到两倍大然后立即跳回其原始尺寸.这确实是我们上面所写代码的准确行为,但球在动画完成后跳回到起原始尺寸的原因却是需要重点理解的. Core Animation在任何给出的时间内会维持三个你的层的集合或者树.每个层树都会在你的界面显示过程中扮演一个重要的角色. 模型层树.模型层树反映了一个layer静止不动画时的所有属性.比如说,当我们设置redBall.layer.cornerRadius到50来让它变成球时,我们就是在模型层上设置属性.模型层上的值是你的app交互的最多