游戏app编写时是如何让简单代码编写变成那些栩栩如生的动画的

&>&&>&&>&正文
AI是如何让游戏世界栩栩如生?我们听听育碧怎么说
22:36:30 来源:游民星空[原创] 作者:Catcher_L 编辑:梁萧 浏览:loading
友情提示:支持键盘左右键“← →”翻页
用手机访问
扫一扫,手机浏览
相关新闻:
综合热点资讯
单机游戏下载
游民星空联运游戏扫一扫下载手机客户端
扫描我,关注团购信息,享更多优惠
||网络安全
| | | | | | | | | | | | | | | |
||电子电工
汽车交通| | | | | | | | | |
||投资理财
| | | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
||外语考试
| | | | | | | | |
| 视频教程|
Android Web Game App高级编程
构建适合在移动或桌面浏览器中运行的下一代多人网络游戏应用
定价:¥69.00
校园优惠价:¥59.34 (86折)
促销活动:
商品已成功飞到您的手机啦!快登录手机站看看吧!
下载客户端
> 微信关注“互动出版网”,便捷查询订单,更多惊喜天天有
原书名:Pro Android Web Game Apps: Using HTML5, CSS3, and JavaScript
原出版社:
ISBN:0上架时间:出版日期:2014 年3月开本:16开页码:508版次:1-1
所属分类:
  构建适合在移动或桌面浏览器中运行的下一代多人网络游戏应用
《Android Web Game App高级编程――使用HTML5、CSS3、JavaScript》能够让我们对游戏开发的整个过程有一个深入的理解,创建属于我们自己的多人在线游戏。本书将理论和实践并重,对Android平台上的网页游戏开发进行了深入浅出的探讨。通过一些前沿技术在浏览器中构建游戏引擎、建立实时的服务器通信,借助人工智能和富媒体创建神奇的游戏体验。
《Android Web Game App高级编程――使用HTML5、CSS3、JavaScript》通过一些激动人心的游戏项目,让你亲历并见证游戏开发方方面面的技术和实践。主要包括以下内容:
设置开发环境、运行应用程序、调试和剖析代码
在浏览器中使用图形和动画
优化渲染――让游戏运行得更快
处理事件和用户输入
创建等轴测游戏引擎
学习3D编程和WebGL的一些基础知识
使用JavaScript创建完善的服务器端支持
使用人工智能让游戏更丰富多彩
Juriy Bura是一位独立的咨询师,他经常游走于乌克兰基辅和瑞士苏黎世之间。他主要擅长桌面和移动平台上的游戏和实时网页应用开发。他是Deadline Solutions(/about.html)的合伙人。作为乌克兰JavaScript User Group的一位领导者,Juriy经常在该组织的会议上发言。他是一位充满激情并一直谋求如何把浏览器功能发挥到极致的Web开发人员。Juriy具有7年以上的Java和JavaScript的开发经验,他确信游戏开发领域的每一行代码都充满着最大的乐趣。
业余时间,Juriy常和家人呆在一起,或是到一家全是“极客”的小俱乐部里与他人一起玩桌游。Juriy的博客地址是,也可以通过@juriy追随他。
Paul Coates不仅是一位自由文字编辑,同时也是英语教师。他常工作的城市有英国特伦特河畔的柏顿和乌克兰基辅。他负责确保Juriy所写内容的英文表达正确,这样便于出版。Paul教不同年龄段的学生说英语,也从事英文、俄文以及乌克兰文作品的文字编辑和校对工作。Paul的爱好有电子游戏、电影以及旅行。
Paul偶尔也写博客,博客地址是,偶尔也可以通过@Psyklax追随他。
《Android Web Game App高级编程――使用HTML5、CSS3、JavaScript》
所需要的组件 2
Java开发工具包 5
集成开发环境 5
Web服务器 10
Android SDK和模拟器 12
面向对象编程 20
移动浏览器简介 28
本章小结 29
浏览器中的图形:canvas元素 31
游戏剖析 31
在浏览器中绘图 32
HTML基础设置 33
canvas的概念 34
坐标系统 36
  游戏就是在快乐中学会某种本领的活动
  ―― 拉夫·科斯特
  当初网页游戏的发展,并不像今天一样充满机遇和一帆风顺。在客户端网络游戏鼎盛的年代,网页游戏似乎很少被人重视。玩法粗糙,画面简陋是那个年代网页游戏的体现。在客户端网游美轮美奂的画面和不同玩法面前,网页游戏显得苍白无力。直到Web 2.0的普及,才迎来了网页游戏的大发展,我们现在所熟知的网页游戏类型实际上是伴随着社交游戏的东风发展起来的。当“偷菜”一词成为2009年最为流行的网络词汇的时候,国内的网页游戏发展才如日中天。
  HTML5的到来让人兴奋不已,因为它可以将丰富多彩的桌面应用带入浏览器中。但时下到处“横行的”IE8版本以下的浏览器,让人感觉HTML5技术普及之日还遥遥无期。但随着Android、iOS等平台的移动用户日益增多,基于Webkit内核的移动浏览器让HTML5大展宏图。即使HTML5和Flash之间的争论方兴未艾,但HTML5的出现必将对移动Web应用程序开发特别是网页游戏的开发产生重大影响。
  我们望眼欲穿的HTML5“神器”真的来了!除了更丰富的标签,HTML5还引入了大量新的JavaScript API(比如canvas API),这些新的API无疑会引发新一轮的JavaScript框架大战,谁将成为下一个jQuery?MooTools,Prototype还是YUI?此外,Node.js的出现把客户端JavaScript逻辑带到了服务器端。当喧嚣过后,也许在未来的某个时间,HTML5和JavaScript会像C一样成为一种永恒的经典。虽然这个过程中会有版本的变更、还会有喋喋不休的争议,但只要Web标准不变,HTML和JavaScript的组合仍将是Web开发人员手中最强大的“武器”。
  所有这些都为网页游戏的开发注入了新的活力,打开本书您就能了解这些方面的内容(当然这些只是本书的冰山一角)。本书的作者Juriy Bura是一位资深的游戏和实时网页应用开发方面的专家。相信通过阅读本书,读者朋友们一定能体会到他精湛的技术水平!
  本书的英文原版600多页,几乎超过了一块板砖的厚度!但Juriy Bura和他的技术编辑Paul Coates让本书的表达深入浅出,更易于读者阅读和理解,在翻译过程中译者也试图保持这种风格。
  本书的前言部分、第1章到第10章由明道洋翻译,第11章到17章以及附录A部分由田钟晓翻译,全书由明道洋统稿。
  本书的翻译也得到了作者Juriy Bura热情无私的帮助,他曾多次于百忙中抽出宝贵的时间回答译者的邮件提问。
  此外,感谢中科院深圳先进技术研究院的何晨光老师,以及清华大学出版社的编辑们,他们在本书的翻译过程中提出了很多宝贵的指导意见,他们的帮助确保了本书的顺利翻译和出版。
  翻译是一项艰苦的工作(但也乐在其中),虽然译者始终保持着一种审慎的态度,但囿于水平,译文中的不当之处还请广大读者批评指正。读者可通过或通过此邮箱账号在Google+上与译者保持联系。
  这是一本为当今最有前景的移动平台―― Android开发JavaScript 网页游戏的书籍。游戏开发很富有挑战性,其目的是通过不同的方式来模拟生活。如果想让这种模拟更具有现实感、更令人信服,那么就需要应用很多知识和技巧。电子游戏是一个充满数学的领域,最明显的体现就是程序开发,同时也要涉及运动学、光学、声学、人工智能、艺术、音乐和讲故事等。
  为什么要使用JavaScript和HTML5?如果读者手里正捧着这本书,那么可能已经找到了这个问题的答案。我的这个疑问可能会让人感到不解,这是由于JavaScript是开发人员可以自由使用的最受欢迎的客户端跨平台解决方案。从台式计算机、智能手机到平板电脑、电视机顶盒,每一个接入互联网的设备都有浏览器,毫无疑问每个浏览器都有JavaScript。一个用标准HTML5堆栈开发的应用程序可以运行在大多数平台上。想让您的游戏更快吗?想让台式计算机、移动设备以及平板电脑都能运行您的游戏吗?想让您的游戏运行在Windows、Linux、iOS以及Android平台上吗?想让用不同语言开发的游戏不需要重新编码就能运行在不同的设备上吗?所有这些问题,HTML5都能解决!
  本书的目的是让大家对最常见游戏类型背后的思想和开发方法有一个深入的理解。我不大喜欢技术手册。为了能够立竿见影,流线型的技术手册通常以牺牲重要细节为代价。然而,能快速达到目的“如何做”的方法看起来也许更快捷,但它通常会给读者带来知识缺口,并且这种缺口最终还得由读者自己去填补。当然除了最大限度地涵盖一切基本概念外,本书也有大量这种“如何做”的范例。
  这就是为什么书中有很多数学的原因,但这不可避免―― 书中确实有那么几个数学公式。对于一个真正的游戏开发人员,不具备相当数量的数学知识是不可能的。但本书并不要求你具备非常专业的数学知识,只要掌握那些为应付各学科学习必备的数学知识就足够了。精通数学的读者,可能会觉得书中的一些解释未免太直白了,那就请随意跳过它们。
  本书将刻意回避使用目前诸如jQuery、prototype.js或Underscore.js等“瑞士军刀式”的样式库。我实在不想让书中的示例和它们有什么硬性的联系,当然这里面也不乏很多优秀的库函数。每个程序开发者都有自己的个人偏好,我就发现与库无关的代码是最友好的。
  本书主要内容
  这是一本介绍如何使用HTML5和JavaScript进行Android游戏开发的书。它将指导您从一个空白HTML页面开始直到完成一个有动画、声音、没完没了的对话、支持多用户的HTML5游戏开发。
  本书主要包括以下内容:
  如何用Canvas元素进行一些游戏元素的绘制;如何使用“精灵”(sprites)和“精灵”表单;如何捕获用户输入。
  如何开发激动人心的3D世界―― 包括WebGL,一种最有前景的Web游戏开发API。
  如何借助Node.js(一种把JavaScript的魅力带到服务器端的工具)开发多人游戏。
  如何实现不同用户之间的实时通信;如何让用户在在线比赛中相互竞争。借助JavaScript,所有这些问题都将迎刃而解,没有必要去了解其他服务器端语言就可以编写高效的服务器端代码。
  如何让计算机控制的角色表现智能,在AI算法的帮助下自己做决策,找到通向游戏世界的路。
  如何添加不错的声效。
  如何在Android Market上发布我们的“杰作”。
  该书将涉及游戏开发的一些优化算法,这些优化算法并不仅仅局限于JavaScript。一旦精通了它们,将能快速地掌握其他平台上的游戏开发。理解3D渲染或路径查找机制,将有助于我们构建任何平台上的游戏,并不仅仅只局限于网页上的游戏开发。
  总之,该书主要和游戏开发有关,同时也将告诉您如何编写世界上最激动人心的应用程序。如果这么做了,那么乐在其中!
  与本书无关的内容
  总的说来,本书和Web编程没有多大关系,书中不会涉及“HTML是什么”或者“HTTP如何工作”这样的问题。我假定本书的读者已经了解如何编写最基本的JavaScript代码并且能把代码嵌入到HTML页面。您不必是一位Web方面的开发专家,但起码要理解编程语言的一些核心概念。操作符、函数、对象以及变量这些术语对你来说应该是耳熟能详的。如果这些概念让你感觉不大舒服,也许你应该从Terry McNavage的JavaScript for Absolute Beginners (Apress, 2010)开始。
  Terry的这本书并不是关于如何开发游戏的,书中没有关卡创建、角色性格塑造或虚拟世界的经济学设计之类的内容,有关博弈、故事、情节、人物以及游戏设置诸如此类的任何内容同样也超出了本书的讨论范围。而这些方面的话题又是极其让人感兴趣,有一些书籍专门进行这些方面的探讨。这里我要给大家推荐这样一本书:由Richard Rouse III编写的Game Design: Theory and Practice, Second Edition(Jones & Bartlett,2004)。
770)this.width=770;' />
系列图书推荐 ¥98.00¥78.40
同类热销商品¥108.00¥86.40
订单处理配送
北京奥维博世图书发行有限公司 china-pub,All Rights Reserved如何实现Ping App的转场动画
招聘信息:
原文:作者:译者:远的风景,あ夂寒ツ匿名社交网络App 制造商最近发布了一个新App叫做,用户可以收到他们感兴趣内容的消息。Ping突出的是主导主屏幕和菜单之间转场的动画,如图所示。每次见到一个完美的动画,我都会思考要是我讲怎么样去在iOS上实现这个动画。在这个教程中,你将会学习用Swift实现这个很酷的动画。在这个过程中,你将会用到图形图层、遮罩、theUIViewControllerAnimatedTransitioning协议,以及UIPercentDrivenInteractiveTransition类等等。注意:本教程假定你了解基本的iOS开发和Swift语言。如果你是新手,可以参看我们网站上的。总体策略在Ping中,动画发生在从一个控制器过渡到另一个控制器。在iOS中,你可以通过将两个视图控制器放在一个UINavigationController中来自定义视图控制器之间的动画,并使用iOS7中的UIViewControllerAnimatedTransitioning协议来动画转场。在以下内容中,你可以了解更多详细细节,不过本质上该协议允许你:指定动画的时间创建一个可以引用两个控制器的容器视图实现任何你想到的动画?你将会用UIView动画或Core Animatio动画实现这些。实现策略下面具体讨论怎么实现圆形的过度效果。描述这个动画效果如下:屏幕右上角有个圆形按钮可控制视图的出现。换句话说,圆作为一个Mask显示边框内的东西,隐藏边框外的东西。你可以在CAlayer上使用遮罩,并用其alpha channel决定要展示图层的哪个属性。1的alpha值展示下面的图层内容,0的alpha值则隐藏下面的内容,中间部分局部地展示图层的内容,以下用图示解释这个意思:现在你已经了解了遮罩,下一步要决定使用哪种遮罩。由于动画带有圆形遮罩,所以最自然的选择是CAShapeLayer。想要动画这个圆形,你需要简单增加圆形遮罩的半径。开始注意:这个章节是为想从头构建项目准备的,如果你是一个资深的iOS开发者,你可以越过此章节直接从开始。在Xcode中选择File\New\Project新建工程,接选择 iOS\Application\Single View Application.给工程命名为CircleTransition,选择开发语言为Swift,设备为iPhone。打开Main.storyboard,你会发现有一个single view controller,但是过度效果需要几个控制器之间切换。首先你要把控制器嵌入到导航控制器中,选定好视图控制器,选择 Editor\Embed In\Navigation Controller。接下来需要隐藏导航栏,打开Xcode右边的工具栏选择第四个tab(Attributes Inspector )取消Shows Navigation Bar的选定框。现在添加视图控制器到Storyboard(故事板)中,使用导航控制器水平地链接各个视图控制器。选择一个新的视图控制器,在右边的工具面板中选择第三个tab(Identity Inspector),更改类类型为ViewController,这样就与Xcode创建的ViewController类文件一致了。接下来,在每个视图控制器右上角添加一个按钮。双击每个按钮,按下退格键,将按钮的标题设置为空字符串。设置每个按钮的背景为黑色。现在用AutoLayout设置按钮的位置设置。选择第一个视图控制器的按钮,设置如下:点击右边和顶部红色括号,设置为10设置宽度和高度为44设置Update Frames为Items of New Constraints点击Add 4 Constraints,按钮的大小和位置就设置好了,重复为每个视图控制器设置按钮。最后设置按钮的形状,通过设置corner radius把按钮形状设置为圆形。在右边的工具面板中选择第三个tab(Identity Inspector)中用 User Defined Runtime Attributes设置按钮的layer的cornerRadius参数。运行的时候将会见到按钮形状为圆形,而在IB中按钮形状不是圆形。现在给每个视图控制器设置不同的背景色。给第一个视图控制器设置绿色背景色,第二个设置黄色背景色。给两个视图控制器都添加上image views,设置高宽都为300 points, 选择右下角的Align选项,让它们居中展示在父视图中,并选择Horizontal Center in Container和Vertical Center in Container.通过Resolve Auto Layout Issues将它们的Frame调整到正确值,然后Update Frames,这是canvas看起来是这样的:下载图片和版,接着把它们赋给image view,并设置image view的content model为Aspect Fit。设置完后canvas如下所示:链接起来恭喜!你已经完成了App的框架。现在可以开始链接按钮的响应事件了。右击第一个视图控制器的按钮,然后拖动action outlet到第二个视图控制器。接着显示一个弹出的菜单:选择show。当按钮被按下时,第二个视图控制器被push进来。打开Xocde的右边the Attributes Inspector命名segue的identifier为PushSegue.编译并运行该应用程序以确保推出第二个视图控制器。现在你已经将按钮连接在第二个视图控制器上,试试弹出视图控制器,所以你需要些一个在ViewController类中写一个方法:@IBAction?func?circleTapped(sender:UIButton)?{
??self.navigationController?.popViewControllerAnimated(true)
}同时添加一个弱引用的属性:@IBOutlet?weak?var?button:?UIButton!回到故事版中,对两个视图控制器如下操作:右击按钮拖曳Touch Up Inside圆形到视图控制器的顶部右击按钮,同时拖住引用的outlet到每个view controller中,并链接到视图控制器的button属性。编译并再次运行,现在你已经有了一个功能完善的push和pop动画。自定义动画如果你跳过了前面的章节,可以直接下载,这样你可以直接使用完成配置的视图控制器和按钮。自定义push或pop动画需要实现UINavigationControllerDelegate协议的animationControllerForOperation方法。新建一个文件,命名NavigationControllerDelegate,实现UINavigationControllerDelegate协议。class?NavigationControllerDelegate:?NSObject,UINavigationControllerDelegate?{
????}接着打开Main.storyboard , 把UINavigationControllerDelegate赋给storyboard的UINavigationController的委托。要实现这一步,可在右边库中搜索object,并拖拽到左侧Navigation Controller Source的下面。现在点击object,在右边Identity Inspector中,将其类更改为NavigationControllerDelegate.接下来,右击左面板中的UINavigationController,将object赋给UINavigationController的委托,并将其委托属性拖拽到NavigationControllerDelegate 对象上:返回NavigationControllerDelegate,并添加如下占位符方法:?func?navigationController(navigationController:?UINavigationController,?animationControllerForOperation?
operation:?UINavigationControllerOperation,?fromViewController?fromVC:?UIViewController,?toViewController?
toVC:?UIViewController)?->?UIViewControllerAnimatedTransitioning??{
??return?nil
}注意方法的主体是空的,某个时候你将会用到它。该方法接受两个需要转场的视图控制器,这将返回一个实现UIViewControllerAnimatedTransitioning的对象。所以你需要创建其中一个。想要完成这一步,你需要通过File\New\File创建一个新的Cocoa Touch类,并将其命名为CircleTransitionAnimator.声明实现the UIViewControllerAnimatedTransitioning协议:class?CircleTransitionAnimator:?NSObject,?UIViewControllerAnimatedTransitioning?{接下来你要为协议添加所需方法:添加第一个方法:func?transitionDuration(transitionContext:?UIViewControllerContextTransitioning)?->?NSTimeInterval?{
????return?0.5
}在该方法中,你需要返回动画的持续时间。如果你希望动画持续0.5s,那可以返回0.5:下一步,将该属性添加到类:weak?var?transitionContext:?UIViewControllerContextTransitioning?你会需要它来储存转场上下文环境。下一步添加第二个所需方法:func?animateTransition(transitionContext:?UIViewControllerContextTransitioning)?{
??self.transitionContext?=?transitionContext
??var?containerView?=?transitionContext.containerView()
??var?fromViewController?=?transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)?as!?ViewController
??var?toViewController?=?transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)?as!?ViewController
??var?button?=?fromViewController.button
??containerView.addSubview(toViewController.view)
??var?circleMaskPathInitial?=?UIBezierPath(ovalInRect:?button.frame)
??var?extremePoint?=?CGPoint(x:?button.center.x?-?0,?y:?button.center.y?-?CGRectGetHeight(toViewController.view.bounds))
??var?radius?=?sqrt((extremePoint.x*extremePoint.x)?+?(extremePoint.y*extremePoint.y))
??var?circleMaskPathFinal?=?UIBezierPath(ovalInRect:?CGRectInset(button.frame,?-radius,?-radius))
??var?maskLayer?=?CAShapeLayer()
??maskLayer.path?=?circleMaskPathFinal.CGPath
??toViewController.view.layer.mask?=?maskLayer
??var?maskLayerAnimation?=?CABasicAnimation(keyPath:?"path")
??maskLayerAnimation.fromValue?=?circleMaskPathInitial.CGPath
??maskLayerAnimation.toValue?=?circleMaskPathFinal.CGPath
??maskLayerAnimation.duration?=?self.transitionDuration(transitionContext)
??maskLayerAnimation.delegate?=?self
??maskLayer.addAnimation(maskLayerAnimation,?forKey:?"path")
}逐步解读代码:1.在超出该方法范围外保持对transitionContext的引用,以便将来访问。2.创建从容器视图到视图控制器的引用。容器视图是动画发生的地方,切换的视图控制器是动画的一部分。3.添加toViewController作为containerView的子视图。4.创建两个圆形UIBezierPath实例:一个是按钮的尺寸,一个实例的半径范围可覆盖整个屏幕。最终的动画将位于这两个Bezier路径间。5.创建一个新的CAShapeLayer来展示圆形遮罩。你可以在动画之后使用最终的循环路径指定其路径值,以避免图层在动画完成后回弹。6.在关键路径上创建一个CABasicAnimation,从circleMaskPathInitial到circleMaskPathFinal.你也要注册一个委托,因为你要在动画完成后做一些清理工作。接着在同一个类中执行animationDidStop()进行清理:override?func?animationDidStop(anim:?CAAnimation!,?finished?flag:?Bool)?{
??self.transitionContext?.completeTransition(!self.transitionContext!.transitionWasCancelled())
??self.transitionContext?.viewControllerForKey(UITransitionContextFromViewControllerKey)?.view.layer.mask?=?nil
}第一行是告知iOS动画的完成。由于动画已经完成了,所以你可以移除遮罩。最后一步是实际使用CircleTransitionAnimator.回到NavigationControllerDelegate.swift,并调整此前你添加的stub方法:func?navigationController(navigationController:?UINavigationController,
?animationControllerForOperation?operation:?UINavigationControllerOperation,
?fromViewController?fromVC:?UIViewController,
?toViewController?toVC:?UIViewController)?->?UIViewControllerAnimatedTransitioning??{
????return?CircleTransitionAnimator()
}简单调整后会返回一个新的CircleTransitionAnimator实例。编译并运行app,最终动画效果如下:恭喜,现在你已经重制了Ping app中的动画。如果这是你想要的效果,那可以在此打住了,但是如果你想了解如何实现动画的交互,请继续阅读!交互式手势动画动画运行正常后,你可以将关注自定义视图控制器转场的另一个特性:交互手势。由于点击操作已经是很老套的了,所以你可以通过实现这个特性来增加UI的深度。交互式手势从调用navigationController:interactionControllerForAnimationController:开始。这是一个UINavigationControllerDelegate方法,有望返回一个符合UIViewControllerInteractiveTransitioning的对象。iOS SDK提供了UIPercentDrivenInteractiveTransition类,该类已经在这个协议中实现,并且为你做了不少交互式手势处理。打开NavigationControllerDelegate.swift,并添加该属性和新方法:var?interactionController:?UIPercentDrivenInteractiveTransition?
func?navigationController(navigationController:?UINavigationController,?
interactionControllerForAnimationController?animationController:?UIViewControllerAnimatedTransitioning)?->?UIViewControllerInteractiveTransitioning??{
??return?self.interactionController
}回头思考下这个轻扫返回手势,很明显,你需要一个手势识别器。你将要为导航控制器添加手势识别器。你需要一个导航控制器的引用,打开NavigationControllerDelegate.swift并添加以下属性:@IBOutlet?weak?var?navigationController:?UINavigationController?打开Main.storyboard,右击左侧Navigation Controller Delegate object,将属性和导航控制器连接起来,然后从navigationController属性中 拖到storyboard中的导航控制器上。返回NavigationControllerDelegate.swift并实现awakeFromNib():override?func?awakeFromNib()?{
??super.awakeFromNib()
??var?panGesture?=?UIPanGestureRecognizer(target:?self,?action:?Selector("panned:"))
??self.navigationController!.view.addGestureRecognizer(panGesture)
}这一步会创建UIPanGestureRecognizer,并将该对象添加到导航控制器的视图上,并得到panned:方法中的手势回调函数。下一步,实现该方法://1
@IBAction?func?panned(gestureRecognizer:?UIPanGestureRecognizer)?{
??switch?gestureRecognizer.state?{
??case?.Began:
????self.interactionController?=?UIPercentDrivenInteractiveTransition()
????if?self.navigationController?.viewControllers.count?>?1?{
??????self.navigationController?.popViewControllerAnimated(true)
????}?else?{
??????self.navigationController?.topViewController.performSegueWithIdentifier("PushSegue",?sender:?nil)
??case?.Changed:
????var?translation?=?gestureRecognizer.translationInView(self.navigationController!.view)
????var?completionProgress?=?translation.x/CGRectGetWidth(self.navigationController!.view.bounds)
????self.interactionController?.updateInteractiveTransition(completionProgress)
??case?.Ended:
????if?(gestureRecognizer.velocityInView(self.navigationController!.view).x?>?0)?{
??????self.interactionController?.finishInteractiveTransition()
????}?else?{
??????self.interactionController?.cancelInteractiveTransition()
????self.interactionController?=?nil
??default:
????self.interactionController?.cancelInteractiveTransition()
????self.interactionController?=?nil
}代码分解如下:.Began: 只要识别了手势,那么它会初始化一个UIPercentDrivenInteractiveTransition对象并将其赋给interactionController属性。如果你切换到第一个视图控制器,它初始化了一个push,如果是在第二个视图控制器,那么初始化的是pop。Pop非常简单,但是对于push,你需要从此前创建的按钮底部手动完成segue.反过来,push/pop调用触发了NavigationControllerDelegate方法调用返回self.interactionController.这样属性就有了non-nil值。.Changed: 这种状态下,你完成了手势的进程并更新了interactionController.插入动画是项艰苦的工作,不过苹果已经做了这部分的工作,你无需做什么事情。.Ended: 你已经看到了pan手势的速度。如果是正数,转场就完成了;如果不是,就是被取消了。你也可以将interactionController设置为nil,这样她就承担了清理的任务。default: 如果是其他任何状态,你可以简单取消转场并将interactionController设置为nil.构建并运行app,从左向右轻扫,你会看到相同的动画,但是是在你的手指控制之下。下一步这是希望你能喜欢这篇主要为了实现一个简单但非常酷的转场动画的文章。你可以在自己的app中实现类似Ping中的效果,也可以通过改变背景色和动画速度来更改其外观和整体感觉。这篇文章中有不少东西,包括使用图形图层、遮罩、UIViewControllerAnimatedTransitioning协议、UIPercentDrivenInteractiveTransition类以及其他等。如果有任何问题,欢迎交流。若需转载,请写明来源和译者!
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量6581点击量5654点击量4721点击量4339点击量3227点击量2894点击量2753点击量2492点击量2422
&2016 Chukong Technologies,Inc.
京公网安备89

我要回帖

更多关于 简单代码编写 的文章

 

随机推荐