《Motion Design for iOS》(三十一)

创建Jeff Broderick的地图动画

在本指南的前面,我提到了一些Jeff Broderick设计并发布到Dribbble的很棒的动画。





如我所说,这里有一些不懂得动画。首先,当地图的图标被点击时,应用的主界面(包括导航栏)同时有不透明度和比例的动画来让其淡出到黑色的背景中并且有一点点缩小。同时,地图伴随着不透明度和比例的动画显著地显现到界面的前面来。地图还会向屏幕上方移动一点,就像过度动画一样。地图图标会保持在原位。

在我们编码重现Jeff的动画前,先看一眼我们创建的最终的动画效果。





我们通过一些简单的UIImageViewUIButton来重新开发这个动画,因为它们可以准确地得到动画的感觉,但在真实的地图中这会是一个真实的可伸缩的地图视图。

首先,让我们添加代表app主界面的图片。

// 添加app的主背景图片
self.appBackground = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20,
    self.window.bounds.size.width, 548)];
self.appBackground.image = [UIImage imageNamed:@"app-bg"];
[self.window addSubview:self.appBackground];

我们添加了一个图片属性为“[email protected]”的简单的UIImageView。app的运行时很聪明,你只用写“app-bg”它就会在app包的图片资源中找到“[email protected]”。这个视图被添加为类的@property了,这样我们就可以在之后的代码中引用它。这里显示了如何声明一个@porperty。

@property (assign) UIImageView *appBackground;

这个@property既可以定义在类的.h文件的@interface中,也可以定义在.m实现文件的@interface块中来让其私有。在苹果的开发者网站的Objective-C指南中可以阅读更多关于程序的属性的内容。

最后,我们将UIImageView作为主屏幕的一个子视图添加进去。这是一个快速的模型,否则我会创建另一个UIViewController的子类来装载我们的UI代码。

如果我构建并运行,这就是app目前看起来的样子。





非常棒!现在让我们添加地图,它会是透明的,并且会伴随着变化开始。我们会在主应用图片后立即添加它,因为我们想要最后添加图标按钮,这样它就会使z轴上最高的,也就是在其他视图的顶部。

// 添加地图视图
self.mapView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 62,
    self.window.bounds.size.width, 458)];
self.mapView.image = [UIImage imageNamed:@"map-arrow"];
self.mapView.alpha = 0.0f;
self.mapView.transform = CGAffineTransformMakeTranslation(0, 30);
self.mapView.transform = CGAffineTransformScale(self.mapView.transform, 1.1, 1.1);
[self.window addSubview:self.mapView];

想在Swift下开发这些例子么?这里就是Swift下的上面Objective-C的代码。

self.mapView =
    UIImageView(frame: CGRectMake(0, 62, self.window!.bounds.size.width, 458))
self.mapView!.image = UIImage(named: "map-arrow")
self.mapView!.alpha = 0.0
self.mapView!.transform = CGAffineTransformMakeTranslation(0, 30)
self.mapView!.transform = CGAffineTransformScale(self.mapView!.transform, 1.1, 1.1)
self.window!.addSubview(self.mapView!)

地图视图的frame开始会在左上角,但会距离顶部62像素,这样就会正好位于我们要添加的地图按钮的下方一点点。图片属性被设为“map-arrow”,这只是一个地图图片,我将其和一个箭头放在一起,来模仿Jeff在他的动画中所涉及的样子。

一开始,这个视图会是完全透明的,所以alpha属性被设为0。有两个变换添加到视图中:第一个将视图往下移动30像素,第二个将其从正常尺寸拉伸到1.1倍。

这里是它现在看起来的样子,我注视了alpha那一行,这样我们就可以看到地图在哪。





这看起来是动画开始的准确位置了。



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

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

时间: 2024-11-10 21:05:55

《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》(四十一)

就如JNWSpringAnimation一样,你可以调整想要模仿的弹簧动作的属性.这里是上个例子中相关的部分. scale.springBounciness = 20.0f; // Between 0-20 scale.springSpeed = 1.0f; // Between 0-20 Pop允许你调整弹簧的弹性和速度.每个值都可以从0到20.就如iOS 7中基于block的弹簧动画一样,这些值都是算入弹簧动作方程式的真实值的一个抽象.而不同于iOS 7的是,我认为Pop在抽象这些值时做的很

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

我在我自己的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》(二十一)

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