首页 > 代码库 > iOS7 SDK新特性

iOS7 SDK新特性

春风又绿加州岸。物是人非又一年。WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启。在iOS7界面重大变革的背后,开发人员们须要知道的又有哪些呢。同去年一样,我会先简单纵览地介绍iOS7中我个人觉得开发人员须要着重关注和学习的内容,之后再陆续对自己感兴趣章节进行探索。计划继承类似WWDC2012的笔记的形式,希望对国内开发人员有所帮助。

技术分享

相关笔记整理例如以下:

UI相关

全新UI设计

iOS7最大的变化莫过于UI设计。或许你会说UI设计“这是设计师大大们应该关注的事情,不关开发人员的事。我们仅仅须要替换图片即可了”。那你就错了。UI的变化必定带来使用习惯和方式的转变,怎样运用iOS7的UI,怎样是自己的应用更切合新的系统,都是须要考虑的事情。

另外值得注意的是,使用iOS7 SDK(如今仅仅有Xcode5预览版提供)打包的应用在iOS7上执行时将会自己主动使用iOS7的新界面,所以原有应用可能须要对新界面进行重大调整。

详细的iOS7中所使用的UI元素的人际交互界面文档,能够从这里找到(应该是须要开发人员账号才干看)。

简单总结来说。以如今上手体验看来新的UI变化改进有例如以下几点:

  • 状态栏,导航栏和应用实际展示内容不再界限:系统自带的应用都不再区分状态栏和navigation bar,而是用统一的颜色力求简洁。

    这也算是一种趋势。

  • BarItem的button所有文字化:这点做的相当坚决。所有的导航和工具条button都取消了拟物化,原来的文字(比方“Edit”,“Done”之类)改为了简单的文字。原来的图标(比方新建或者删除)也做了简化。
  • 程序打开增加了动画:从主界面到图标所在位置的一个放大。同一时候显示应用的加载界面。

自己实验了几个现有的AppStore应用在iOS7上的执行情况:

  • Pomodoro Do: 这是我自己开发的应用,执行正常,可是由于不是iOS7 SDK打包,所以在UI上使用了之前系统的,问题是导航栏Tint颜色丢失,导致非常难看,须要尽快更新。

  • Facebook:由于使用了图片自己定义导航栏,而没有直接使用系统提供的材质,所以没什么问题。
  • 面包旅行:直接Crash,无法打开,原因未知。

这次UI大改能够说是一次对敏捷开发的检验,原来的应用(特别是拟物化用得比較重的应用)尽管也能执行。可是非常多UI自己定义的地方需要更改不说,还easy让用户产生一种“来到了还有一个世界”的感觉,同一时候能够看到也有部分应用无法执行。而对于苹果的封闭系统和仅仅升不降的特性,开发人员以及其应用必需要尽快适应这个新系统,这对于迭代高速,还在继续维护的应用来说会是一个机会。

相信谁先能适应新的UI。谁就将在iOS7上占到先机。

动态UIKit

新增了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给出了新的选择。

游戏方面

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是在系统层级进行的优化。渲染时间等都由框架决定,因此应该会有比較高的效率。

另外。Xcode还提供了创建粒子系统和贴图Atlas的工具。

使用Xcode来管理粒子效果和贴图atlas,能够迅速在Sprite Kit中反应出来。

Game Controller Framework

为Made-for-iPhone/iPod/iPad (MFi) game controller设计的硬件的相应的框架,能够让用户用来连接和控制专门的游戏硬件。參考WWDC 2013开场视频中開始的赛车演示。如今想到的是,或许这货不仅能够用于游戏…或者苹果之后会扩展其应用。由于使用普及率非常高的iPhone作为物联网的入口,似乎会是非常有前途的事情。

GameCenter改进

GameCenter一直是苹果的败笔…尽管每年都在改进。可是一直没看到大的起色。

今年也不例外。都是些小修改。不提也罢。

多任务强化

  • 常常须要下载新内容的应用如今能够通过设置UIBackgroundModesfetch来实现后台下载内容了,须要在AppDelegate里实现setMinimumBackgroundFetchInterval:以及application:performFetchWithCompletionHandler:来处理完毕的下载。这个为后台执行代码提供了又一种选择。只是考虑到Apple假设继续严格审核的话,可能仅仅有杂志报刊类应用能够取得这个权限吧。

    另外须要注意开发人员仅仅仅能指定一个最小间隔,最后下没下预计就得看系统娘的心情了。

  • 相同是后台下载。曾经仅仅能推送提醒用户进入应用下载,如今能够接到推送并在后台下载。

    UIBackgroundModes设为remote-notification,并实现application:didReceiveRemoteNotification:fetchCompletionHandler:

为后台下载,开发人员必须使用一个新的类NSURLSession,事实上就是在NSURLConnection上加了个后台处理,使用类似,API十分简单,不再赘述。

AirDrop

这个是iOS7的重头新功能,用户能够用它来分享照片,文档,链接,或者其它数据给附近的设备。可是不须要特别的实现,被集成在了标准的UIActivityViewController里,并没有单独的API提供。

数据的话。能够通过实现UIActivityItemSource接口后进行发送。大概苹果也不愿意看到超出他们控制的文件分享功能吧。毕竟这和iOS设计的初衷不一样。

假设你不使用UIActivityViewController的话。可能是无法在应用里实装AirDrop功能了。

地图

Apple在继续在地图应用上的探索。MapKit的改进也乏善可陈。我一直相信地图类应用的瓶颈一定在于数据,可是对于数据源的建立并非一年两年可以完毕的。Google在这一块凭借自己的搜索引擎有着得天独厚的优势。苹果还差的非常远非常远。

看看有哪些新东西吧:

  • MKMapCamera。能够将一个MKMapCamera对象加入到地图上,在指明位置,角度和方向后将呈现3D的样子…大概能够想象成一个数字版的Google街景..
  • MKDirections 获取Apple提供的基于方向的路径。然后能够用来将路径绘制在自己的应用中。这可能对一些小的地图服务提供商产生冲击,可是还是那句话,地图是一个数据的世界,在拥有完备数据之前。Apple不是Google的对手。

    这个状况至少会持续好几年(也有可能是永远)。

  • MKGeodesicPolyline 创建一个随地球曲率的线。并附加到地图上。完毕一些视觉效果。
  • MKMapSnapshotter 使用其拍摄基于地图的照片,或许各类签到类应用会用到
  • 改变了overlay物件的渲染方式

Inter-App Audio 应用间的音频

AudioUnit框架中增加了在同一台设备不同应用之间发送MIDI指令和传送音频的能力。比方在一个应用中使用AudioUnit录音,然后在还有一个应用中打开以处理等。

在音源应用中声明一个AURemoteIO实例来标为Inter-App可用,在目标应用中使用新的发现接口来发现并获取音频。 想法非常好,也算是在应用内共享迈出了一步,只是我对如今使用AudioUnit这种低层级框架的应用数量表示不乐观。或许今后会有一些为更高层级设计的共享API提供给开发人员使用。毕竟要从AudioUnit開始处理音频对于大多数开发人员来说并非一件非常easy的事情。

点对点连接 Peer-to-Peer Connectivity

能够看成是AirDrop不能直接使用的补偿。代价是须要自己实现。MultipeerConnectivity框架能够用来发现和连接附近的设备,并数据传输。而这一切并不须要有网络连接。

能够看到Apple逐渐在文件共享方面一步步放开限制,可是当然全部这些都还是被限制在sandbox里的。

Store Kit Framework

Store Kit在内购方面採用了新的订单系统,这将能够实现对订单的本机验证。这是一次相应内购破解和有可能验证失败导致内购失败的更新,苹果希望藉此降低内购的实现流程,降低出错,同一时候遏制内购破解泛滥。前者可能没有问题,可是后者的话。由于objc的动态特性。决定了仅仅要有越狱存在,内购破解也是早晚的事情。只是这一点确实方便了没有能力架设验证server的小开发人员。这方面来说还是非常好的。

最后

当然另一些其它小修改,包含MessageUI里加入了附件button,Xcode開始支持模块了等等。完整的iOS7新特性列表能够在这里找到(临时应该也须要开发人员账号)。

最后一个好消息是,苹果放慢了废弃API的速度,这个版本号并没有特别重要的API被标为Deprecated,Cheers。

- See more at: http://onevcat.com/2013/06/developer-should-know-about-ios7/#sthash.rWMKWACE.dpuf

iOS7 SDK新特性