《Motion Design for iOS》(三十七)

现在,让我们从上到下动画屏幕上的其他元素。每个都需要比前一个开始得稍微慢一点。同时我想要控制app启动后动画开始的时间,来看看我如何管理。

CGFloat initialDelay = 1.0f;
CGFloat stutter = 0.3f;

// 动画箭头图片
[UIView animateWithDuration:2.1 delay:initialDelay
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [arrowView setFrame:CGRectMake(0, 0, windowWidth, 45)];
} completion:NULL];

// 动画Ministry of Fun文字
[UIView animateWithDuration:2.1 delay:initialDelay + (1 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [ministryView setFrame:CGRectMake(0, 57, windowWidth, 28)];
} completion:NULL];

我设置了两个CGFloat变量,一个initialDelay值来存储延迟时间,一个stutter来存储每个动画之间细微的延迟。这个数字对我们动画效果整体的感觉和流动感都非常重要。动画之间太长的延时会让他们觉得不连贯,太短就不足以形成我们想要构建的波浪效果。

回到代码:第一个动画的delay属性就是initialDelay变量的值,因为这是来到屏幕上的第一个动画。第二个动画block的delay值为initialDelay+(1*stutter)。这表示它会等待开始的延迟时间,然后会等待stutter值乘以1的时间。接下来的所有动画都会遵循这个公式作为延时,并且每次都会加1倍stutter。这可以确保他们的动画之间都是同样的延时。

这里是现在看起来的样子。





我觉得这个看起来不错。老实说,只动画两个元素很难看出波浪效果是不是好的,因为你无法获取一个整体的真实感受,除非动画一系列的元素。所以让我们动画屏幕上的其他元素。

[UIView animateWithDuration:2.1 delay:initialDelay + (2 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [addButton setFrame:CGRectMake(0, 102, windowWidth, 45)];
} completion:NULL];

[UIView animateWithDuration:2.1 delay:initialDelay + (3 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [firstRow setFrame:CGRectMake(0, 170, windowWidth, 80)];
} completion:NULL];

[UIView animateWithDuration:2.1 delay:initialDelay + (4 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [secondRow setFrame:CGRectMake(0, 170+80, windowWidth, 80)];
} completion:NULL];

[UIView animateWithDuration:2.1 delay:initialDelay + (5 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [thirdRow setFrame:CGRectMake(0, 170+160, windowWidth, 80)];
} completion:NULL];

[UIView animateWithDuration:2.1 delay:initialDelay + (6 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [fourthRow setFrame:CGRectMake(0, 170+240, windowWidth, 80)];
} completion:NULL];

[UIView animateWithDuration:2.1 delay:initialDelay + (7 * stutter)
    usingSpringWithDamping:0.6 initialSpringVelocity:0 options:0 animations:^{
    [fifthRow setFrame:CGRectMake(0, 170+320, windowWidth, 80)];
} completion:NULL];

现在我们动画了所有的元素到位置上了,让我们看看效果。





对我来说感觉还不太对。动画的延时还是有点太长了,破坏了想要的波浪感。看起来一点也没有流动感。让我们降低延时,把stutter变量的值从0.3降为0.15来看看效果。





很接近了,但我认为我们可以再缩小一点点延迟时间来让它更有天然的流动感,就像每个元素都牵引了下一个。让我们将stutter变量降为0.6。





现在我们有些成果了。我认为它看起来很棒并且有非常好的波浪动作。让我们和Jakub原始的动作做一些比较。





看起来我们匹配得很接近!所以从这个例子中学到了什么呢?

  • 基于block的UIView动画方法中的弹簧的damping值是一个抽象值,对获取一个好的感觉并没有什么用。这就是为什么我喜欢用真实的弹簧动作(不需要设置持续时间的),比如JSWSpringAnimation提供的那种。
  • 当实现一个像这个一样内置的动画时,调整动画之间的延时是得到一个好的波浪形动作的关键点。


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

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

时间: 2024-08-29 16:59:46

《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》(三十九)

介绍Facebook的Pop 在2014年4月,Facebook的工程师Kimon Tsinteris发布了Pop,Facebook构建用来支撑他们app Paper的一个弹簧动画框架.这个框架的起源其实早于Facebook,Kimon构建了其中的大部分用来支撑他被Facebook于2011年收购的电子书公司Push Pop Press.你可能记得Push Pop Press,它获得了苹果的设计奖,作为iPad的电子书,为被称为"Our Choice"的AI Gore所构建. 点击观看

《Motion Design for iOS》(三)

过渡,焦点和乐趣 当SDK第一次发布时我就开始思考设计和构建iOS app的动画.经过这次思考和所有这些app,我意识到有三个我要为一个iOS app(或者任何数字产品)想象.设计和构建一个动画的关键原因: 过渡:在两个视觉状态之间突出一个平滑的运动,让用户适应新界面而不是被推进去.像这样的平滑过渡可以减轻对于不熟悉的界面的精神负担. 焦点:引导用户关注界面上的一个重要的或者最近更新的特殊部分,尤其是那些需要用户立即操作的元素. 乐趣:通过使用奇思妙想或意料之外的动作让一个平凡的交互更加吸引人且

《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》(二十七)

是时候添加一些动画了.为了警告框的显示,如我之前所说,我们想要覆盖层从完全透明(不可见)变成半透明.我们还想要添加两个动画到警告框中:将不透明度从0.0动画到1.0,以及将比例从大于1.0动画到1.0.这就是iOS 7的警告框做的事情,所以我们要模仿它. 首先让我们处理两个不透明度的动画(覆盖层和警告框视图),因为不透明度动画一般不需要任何高级的弹簧动作,让我们使用一些简单的基于block的UIView动画. // 淡入灰色的封盖层和警告框视图 [UIView animateWithDurati

《Motion Design for iOS》(三十八)

我在我自己的iPhone app Interesting中也使用了波浪形的动画.来看看我的app的动画并构建它. 动画Interesting的Stories Into Position 当我的新闻app Interesting首次打开时,我会发起一个网络请求来拉取最近的文章.当请求返回时,我需要用UITableView来放置文章数据,每行一篇文章.一些app选择在数据返回时淡入列表,一些会将行一行行地滑动到位置上,而其他的则立即显示行,没有任何动画.我选择使用一个内置的类似我们刚刚构建的音乐播放

《Motion Design for iOS》(三十)

现在让我们为我们的警告框视图创建一个不同类型的动作,从屏幕的中央出来并带有一些弹性动画来获取用户的注意.这就是它看起来的样子. 这是一个更简单的动画,因为我们只动画了警告框transform的一个属性,即scale.我们设置它的初始scale为0来建立我们的警告框视图. lofter 2016/6/30 9:15:45 alertView.transform = CGAffineTransformMakeScale(0, 0); 和之前一样,我们想要给覆盖层和警告框一个淡化的动画,不过这一次我们

《Motion Design for iOS》(三十三)

即使这些动画可以通过一个淡出动画曲线来完成,我也想使用含有相同damping和stiffness值得弹簧动画,这样我就可以减缓速度.这里不会有弹性,只是非常平滑的过渡. CGFloat dampingStiffness = 16.0f; // 主app背景的比例动画 JNWSpringAnimation *scale = [JNWSpringAnimation animationWithKeyPath:@"transform.scale"]; scale.damping = dampi

《Motion Design for iOS》(三十四)

构建Jakub Antalik的音乐播放器 Jakub是斯洛伐克的一名出色的设计师,已经设计了一些经常发布到Dtibbble去的非常有创造力的界面.其中一个作品非常打动我,那是一个很有趣的例子,证明了界面上每次操作一个元素的断断续续的动画是如何抓住用户的眼球的.在本指南的早期我展示了一个他设计的音乐播放器,含有一些很酷的内置动画,这里我们再看一下. 所以这里他明显使用到的技术是什么?他操纵了动画的开始时间.通过让每个元素比另一个元素慢一点动画到屏幕上的位置,并按照行的顺序操作屏幕上的每一个元素,