春风又绿加州岸,物是人非又一年。WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启。在iOS7界面重大变革的背后,开发者们需要知道的又有哪些呢。同去年一样,我会先简单纵览地介绍iOS7中我个人认为开发者需要着重关注和学习的内容,之后再陆续对自己感兴趣章节进行探索。计划继承类似WWDC2012的笔记的形式,希望对国内开发者有所帮助。
相关笔记整理如下:
总览 开发者所需要知道的iOS7 SDK新特性
工具 WWDC2013笔记 Xcode5和ObjC新特性 http://onevcat.com/2013/06/new-in-xcode5-and-objc/
UIKit动力学 WWDC2013笔记 UIKit力学模型入门 http://onevcat.com/2013/06/uikit-dynamics-started/
SpriteKit入门 WWDC2013笔记 SpriteKit快速入门和新时代iOS游戏开发指南 http://onevcat.com/2013/06/sprite-kit-start/
后台应用运行和多任务新特性 WWDC2013笔记 iOS7中的多任务 http://onevcat.com/2013/08/ios7-background-multitask/
iOS7中弹簧式列表的制作 WWDC 2013 Session笔记 - iOS7中弹簧式列表的制作 http://onevcat.com/2013/09/spring-list-like-ios7-message
iOS7中自定义ViewController切换效果 WWDC 2013 Session笔记 - iOS7中的ViewController切换
UI相关
全新UI设计
iOS7最大的变化莫过于UI设计,也许你会说UI设计“这是设计师大大们应该关注的事情,不关开发者的事,我们只需要替换图片就行了”。那你就错了。UI的变化必然带来使用习惯和方式的转变,如何运用iOS7的UI,如何是自己的应用更切合新的系统,都是需要考虑的事情。另外值得注意的是,使用 iOS7 SDK(现在只有Xcode5预览版提供)打包的应用在iOS7上运行时将会自动使用iOS7的新界面,所以原有应用可能需要对新界面进行重大调整。具体的iOS7中所使用的UI元素的人际交互界面文档,可以从这里找到(应该是需要开发者账号才能看)。
简单总结来说,以现在上手体验看来新的UI变化改进有如下几点:
状态栏,导航栏和应用实际展示内容不再界限:系统自带的应用都不再区分状态栏和navigation bar,而是用统一的颜色力求简洁。这也算是一种趋势。
BarItem的按钮全部文字化:这点做的相当坚决,所有的导航和工具条按钮都取消了拟物化,原来的文字(比如“Edit”,“Done”之类)改为了简单的文字,原来的图标(比如新建或者删除)也做了简化。
程序打开加入了动画:从主界面到图标所在位置的一个放大,同时显示应用的载入界面。
自己实验了几个现有的AppStore应用在iOS7上的运行情况:
Pomodoro Do: 这是我自己开发的应用,运行正常,但是因为不是iOS7 SDK打包,所以在UI上使用了之前系统的,问题是导航栏Tint颜色丢失,导致很难看,需要尽快更新。
Facebook:因为使用了图片自定义导航栏,而没有直接使用系统提供的材质,所以没什么问题。
面包旅行:直接Crash,无法打开,原因未知。
这次UI大改可以说是一次对敏捷开发的检验,原来的应用(特别是拟物化用得比较重的应用)虽然也能运行,但是很多UI自定义的地方需要更改不说,还容易让用户产生一种“来到了另一个世界”的感觉,同时可以看到也有部分应用无法运行。而对于苹果的封闭系统和只升不降的特性,开发者以及其应用必须要尽快适应这个新系统,这对于迭代快速,还在继续维护的应用来说会是一个机会。相信谁先能适应新的UI,谁就将在iOS7上占到先机。
UIKit的力学模型(UIKit Dynamics)
这个专题的相关笔记
UIKit动力学 WWDC2013笔记 UIKit力学模型入门 http://onevcat.com/2013/06/uikit-dynamics-started/
新增了UIDynamicItem委托,用来为UIView制定力学模型行为,当然其他任何对象都能通过实现这组接口来定义动力学行为,只不过在UIKit中可能应用最多。所谓动力学行为,是指将现实世界的我们常见的力学行为或者特性引入到UI中,比如重力等。通过实现 UIDynamicItem,UIKit现在支持如下行为:
UIAttachmentBehavior 连接两个实现了UIDynamicItem的物体(以下简称动力物体),一个物体移动时,另一个跟随移动
UICollisionBehavior 指定边界,使两个动力物体可以进行碰撞
UIGravityBehavior 顾名思义,为动力物体增加重力模拟
UIPushBehavior 为动力物体施加持续的力
UISnapBehavior 为动力物体指定一个附着点,想象一下类似挂一幅画在图钉上的感觉
如果有开发游戏的童鞋可能会觉得这些很多都是做游戏时候的需求,一种box2d之类的2D物理引擎的既视感跃然而出。没错的亲,动态UI,加上之后要介绍的Sprite Kit,极大的扩展了使用UIKit进行游戏开发的可能性。另外要注意UIDynamicItem不仅适用于UIKit,任何对象都可以实现接口来获得动态物体的一些特性,所以说用来做一些3D的或者其他奇怪有趣的事情也不是没有可能。如果觉得Cocos2D+box2d这样的组合使用起来不方便的话,现在动态UIKit+SpriteKit给出了新的选择。
游戏方面
这个专题的相关笔记
SpriteKit入门 WWDC2013笔记 SpriteKit快速入门和新时代iOS游戏开发指南 http://onevcat.com/2013/06/sprite-kit-start/
iOS7 SDK极大加强了直接使用iOS SDK制作和分发游戏的体验,最主要的是引入了专门的游戏制作框架。
Sprite Kit Framework
这是个人认为iOS7 SDK最大的亮点,也是最重要的部分,iOS SDK终于有自己的精灵系统了。Sprite Kit Framework使用硬件加速的动画系统来表现2D和2.5D的游戏,它提供了制作游戏所需要的大部分的工具,包括图像渲染,动画系统,声音播放以及图像模拟的物理引擎。可以说这个框架是iOS SDK自带了一个较完备的2D游戏引擎,力图让开发者专注于更高层的实现和内容。和大多数游戏引擎一样,Sprite Kit内的内容都按照场景(Scene)来分开组织,一个场景可以包括贴图对象,视频,形状,粒子效果甚至是CoreImage滤镜等等。相对于现有的 2D引擎来说,由于Sprite Kit是在系统层级进行的优化,渲染时间等都由框架决定,因此应该会有比较高的效率。
原文转自:http://onevcat.com/2013/06/developer-should-know-about-ios7/