API变化:
1、弃用 MKOverlayView 及其子类,使用类 MKOverlayRenderer;
2、弃用 Audio Toolbox framework 中的 AudioSession API,使用AV Foundation framework 中的 AVAudioSesssion 类;
3、Core Location framework中的 CLRegion 类被 CLCircularRegion 代替,不过 CLRegion 类在同时支持 geographic和beacon regions的抽 象基类中继续存在;
4、CBCentral 类中的 UUID 属性被弃用,使用属性 identifier 代替;
5、UIKit framework中变化:
UIViewController 中属性 wantsFullScreenLayout 被弃用,因为iOS7及之后,view controllers将始终支持全屏布局;
UIPopoverController 不再提供箭头方向(arrow direction)的概念,改为展示方向(presentation direction);
  • UIColor objects that provided background textures for earlier versions of iOS are gone.

  • Many drawing additions to the NSString class are deprecated in favor of newer variants.

6、libsyscall 类库中的 gethostuuid 功能被弃用;
7、iOS7及以后,如果你要获取 iOS设备的MAC地址,系统会返回 02:00:00:00:00:00。如果你需要identify设备,使用 UIDevice 的 属性 identifierForVendor 代替。(那些出于发布广告的目的使用identifier的apps,应当考虑使用 ASIdentifierManager的属性 advertisingIdentifier 代替。)
------------------------------------------------------------------华丽丽的分割线--------------------------------------------------------------------------
 
昨晚WWDC2013苹果公司推出颠覆性的iOS7,目前来看,扁平化的设计没有赢得很多人的赞赏,其实我也有一点不是很明白,在审美上扁平化比拟物化更好看么?为什么要追求扁平化?不是为了颠覆而颠覆?
不过,与早先版本在视觉上有较大差异的iOS7,对于开发者来说,有一些需要注意的地方。比如
1、虚化控件的边界,透明的状态栏使布局全屏化,并提供在app运行时修改状态栏风格的方法;
2、如果你的app需要同时满足iOS6和iOS7,对于系统的UI,在iOS7中,会使用iOS7的扁平化风格,比如alertView,UIActionView;
总之,没有变化太多的地方。
 
此文根据苹果公司提供的文档TransitonGuide.pdf编写。
 

每个app必须要满足的有以下三个条件:

1、升级app图标。在iOS7中,app图标是120*120像素(高分辨率)。

2、升级启动界面使其包括状态栏区域,如果之前不是这样。

3、在设计的时候,要支持视网膜屏和iPhone5,如果你之前没有这么做的话。

需要满足(非必须):

1、确保app界面的内容可以通过半透明的UI元素进行辨别---就像bars、keyboards以及透明的状态栏;在iOS7中,试图控制器将使用全屏布局。

2、重新设计定制 bar button icons. 在iOS7中,bar button icons 扮演不在那么重要的角色,并且风格上有一些改变。

3、通过使用布局来设计没有边框的buttons,不要再使用提供的button背景图片。

4、使用硬编码来检测UI values,比如大小sizes和位置positions,并用系统动态提供的values来代替。当布局改变的时候,使用Auto Layout来自动适应。

5、检查你的app的places,如果UIKit的controls和views的metrics(度量)和风格的变化影响布局和显示的话。

6、采用动态风格。在iOS7中,用户可以调整他们看到的app中文字的大小。只有当你使用动态设计,才能让text根据用户指定的文字大小适当的改变。

7、确保你的app不会根据新的控制中心的手势或者导航控制器的返回swipe手势做出不合适的响应,特别是你在自定义手势识别的时候。

8、重新学习阴影(drop shadows)、渐变(gradients)和斜面(bezels)的使用。因为iOS7的审美是平滑和有层次感的------不再强调在UI元素上拟物化效果的使用------你可能会重新考虑这些效果。

9、如果有必要,为iOS6把你的app进行最优化的升级----比如使用自动布局(Auto Layout)和故事板(storyboards)------并且确保app中没有使用被弃用的API。

但是如果你一定要继续支持iOS6

Note: 在运行iOS7的设备上,所有的系统UI----像警告框alerts和通知notifications---将使用iOS7界面风格,即使你的app正在使用之前的UI设计。

① Using Interface Builder to Support Multiple App Versions

Xcode5 的 Interface Builder 拥有一个新功能可以帮助你在继续支持更早版本的同时,把你的应用移植到iOS7.

Get a preview of how the UI updates you make affect an earlier version.

预览你对UI的升级对earlier version的影响

  1. While viewing the iOS 7 storyboard or xib file on the canvas, open the assistant editor.

  2. Open the Assistant pop-up menu. (The Assistant pop-up menu is the first item to the right of the back and forward arrows in the assistant editor jump bar.)

  3. In the menu, scroll to the Preview item and choose the storyboard or xib file.

Toggle between viewing app UI in iOS 7 and iOS 6.1 or earlier.

iOS7和iOS6.1及更早版本的UI之间的切换

Follow these steps to switch between two versions of the UI:

1. Open the File inspector in Interface Builder.

2. Open the “View as” menu.

3. Choose the version of the UI you want to view.

② Supporting Two Versions of a Standard App 

如果standard app的两个版本需要有类似的布局,使用Auto Layout来创建UI,这在两个版本的iOS都会显示正常。为了支持iOS的多版本,为Auto Layout指定单一约束可以在storyboard或xib文件中自动调整views和controls。

如果standard app的两个版本需要类似的布局,并且你没有使用Auto Layout,使用offsets。在iOS7中使用offsets,首先升级UI,然后为每个元素在iOS7 UI中的新位置的origin,height和width赋值。

③ Loading Resources Conditionally 有条件的加载资源

一种辨别app是否运行在iOS7系统或更早版本的方法是写一个宏macro,用来检测系统版本。

NSUIntegerDeviceSystemMajorVersion();

NSUIntegerDeviceSystemMajorVersion(){
staticNSUInteger _deviceSystemMajorVersion =-1;
staticdispatch_once_t onceToken;
dispatch_once(&onceToken,^{
         _deviceSystemMajorVersion =[[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue];

});

return _deviceSystemMajorVersion;

}
#define MY_MACRO_NAME (DeviceSystemMajorVersion()<7)

Updating the UI

① Layout and Appearance

1、试图控制器属性wantsFullScreenLayout被弃用,提供以下属性:

edgesForExtendedLayout: UIExtendedEdge类型,用来描述一个rectangle的四个边界,默认是UIRectEdgeAll.

extendedLayoutIncludesOpaqueBars

automaticallyAdjustsScrollViewInsets

2、iOS7中,视图控制器支持views之间自定义切换动画。见UIViewControllerAnimatorAnimatorTransitioningProtocol Reference 和UIViewControllerInteractiveTransitioningProtocol Reference

3、 iOS7给予视图控制器在app运行时更改状态栏风格的权限。实现:

给app的Info.plist添加key,UIViewControllerBasedStatusBarAppearance并赋值为YES。

一种动态改变状态栏风格的好方法是实现preferredStatusBarStyle,在动画块block中,更新状态栏appearance并调用setNeedsStatusBarAppearanceUpdate.

4、 你可以通过设置window的属性tintcolor设置整个app的颜色风格

window.tintColor =[UIColor purpleColor];//该purpleColor会按照层级自动传递给window的subviews

如果你不设置window的tintColor,app会使用系统默认颜色。但是默认颜色是nil,which means that the view uses its parent’s tint. It also means that when you ask a view for its tint color, it always returns a color value, even if you haven’t set one.(没搞明白啥意思)

Note:在iOS6中属性 tintColor 用来tint导航条、tab条、工具栏、搜索栏、scope bars的背景。在iOS7中,使用barTintColor属性来代替。

5、iOS7使用动态风格,这可以在app中更容易的展示great-looking text。

使用UIFont的方法 preferredFontForTextStyle 来定义一个font,代替给font的names和sizes赋值的方式。

② Bars and Bar Buttons

在iOS7中,status bar是透明的(transparent),navigation bars,tab bars,toolbars,search bars 和 scope bars 是半透明的(tranlucent)。

大部分的bars模糊处理它们的背景,除非你为此bar设置了背景图片。

barPosition:如果自定义bar的背景图片需要extend,使用此属性进行描述;

UIBarPositionTopAttached 表示一个bar位于屏幕的顶部并且他的背景扩展到导航栏的区域;

UIBarPositionTop 表示一个bar位于its local context的顶部,例如,位于一个popover的顶部,并且不为状态栏提供背景。

1、The Status Bar

UIStatusBarStyleDefault 展示黑色内容,当状态栏背后是浅色内容时使用

UIStatusBarStyleLightContent 展示浅色内容,当状态栏背后是深色内容时使用

有时,导航栏或者搜索栏的背景图片会扩展到状态栏的背后。

在iOS7中,你可以在app运行时控制状态栏的风格,实现方法见Updating the UI1.3。
2、Navigation Bar
如果你想使用自定义图片代替默认的chevron,需要创建一个自定义mask image。详见UINavigationBar Class Reference.

如果你使用UIBarPositionTopAttached bar positon 或导航控制器的导航栏创建一个导航栏的背景图片,要确保图片包含状态栏区域!特别注意,使用高为128个像素的高分辨率的背景图片!

不要使用特别长的背景图片来给导航条展示阴影效果,这在iOS7中不管用,因为超出的高度会扩展到状态栏区域。如果你想添加给导航栏添加阴影,使用属性shadowImage创建自定义背景图片。

3、Search Bar and Scope Bar

同样如果使用UIBarPositionTopAttached 创建search bar的背景图片,要确保图片高度要包含状态栏的高度。

displaysSearchBarInNavigationBarUISearchDisplayController的属性,可让你在导航栏中添加search bar。

note:A scope bar can't appear by itself; it must be attached to a search bar.

4、Tab Bar 

如果你想为tab bar item创建自定义的icon,使用 UITabBarItem 的属性selectedImage 来设置item的选中状态的图片,如果你不提供选中状态的icon,那么两种状态会使用相同的icon。

5、Toolbar
 

③ Content Views

1、Activity
系统提供两种风格:
looks like a fully rendered app iconlooks similar to a bar button item
2、Collection View
iOS7支持自定义layouts转换动画,见UICollectionViewTransitionLayout Class Reference.
3、Image View
添加属性 tintColor,When the image view contains a template image—that is, an image that specifies theUIImageRenderingModeAlwaysTemplate rendering mode—tintColor is applied to the image.
4、Map View
map view 呈现地理数据,并支持内嵌Maps app所能提供的大部分功能。
iOS7中,提供新类 MKOverlayRenderer 来在map view创建一个overlay。
为map view 添加 3D 展示效果,为map view 的属性 camera assign一个camera对象 MKMapCamera ,详情见MKMapView Class Reference.
5、Page View Controller
使用方法 pageViewControllerPreferredInterfaceOrientationForPresentation和 pageViewControllerSupportedInterfaceOrientations 设置优选和支持的方向。
6、Scroll View

iOS7中,可通过设置 UIViewController的属性 automaticallyAdjustsScrollViewInsets 来设置scroll view的insets。

7、Table View

8、Text View

确保使用 UIFont 的方法 preferredFontForTextStyle 来定义 text view 展示的text。

9、Web View

A web view is a region that can display rich HTML content.

④ Controls 

没啥好介绍的,都是视觉上的变化。

Note:iOS7中,UIButtonTypeRoundedRect 使用 UIButtonTypeSystem 重新定义。

⑤ Temporary Views

Note:当一个临时视图(Temporary Views)显示时,iOS7会自动模糊化后面的标准视图。你需要通过你的代码来控制这种custom views的颜色变化。

(咳咳,不是说iOS7会自动调整么,为什么还要开发者用代码控制?表示不明白。。。。)

1、Action Sheet

iOS7 不再使用 UIActionSheetStyle。

IOS7的变化的更多相关文章

  1. CGBitmapContextCreate函数参数详解 以及在 ios7下变化

    函数原型: CGContextRef CGBitmapContextCreate ( void *data,    size_t width,    size_t height,    size_t ...

  2. App升级iOS7体会

    本文转自App升级iOS7体会. xcode5 GM版已经发布,虽然还是pre-release版,但离最终版不远了.对于没有用到新特性的app面临的最大问题就是UI的变化.Apple提供了UI Tra ...

  3. iOS7的十个更“佳”:简洁直观更受青睐

    转自:http://www.25pp.com/news/news_27792.html iOS7自发布以来一直是褒贬不一,虽然苹果还只是发布了第二个测试版,但普通用户早已经在纠结到底该不该升级iOS7 ...

  4. UI1_第一天_iOS概述

    iOS:移动操作系统  ------------>ios7.0变化大,倾向于扁平化 UI:用户界面,即各种页面元素 创建工程 Xcode ios -->Application —>模 ...

  5. ios和android一并学习的体会

    如果说为什么要同时学习这两种不同的移动平台,其实有一定的“闲”的因素在里面. 相对于ios,android我是早半年接触的.最开始学习的时候也就是j2ee学习的延续,通过看视频连带看书学了大概一个月的 ...

  6. iOS8新特性之基于地理位置的消息通知UILocalNotification

              苹果在WWDC2014上正式公布了全新的iOS8操作系统. 界面上iOS8与iOS7相比变化不大,只是在功能方面进行了完好.                             ...

  7. iOS8指纹识别TouchID

    苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,只是在功能方面进行了完好.iOS8通知中心更加强大,支持消息直接回复操作,并支持Quic ...

  8. iOS 7 隐藏特性

    当 iOS7 刚发布的时候,全世界的苹果开发人员都立马尝试着去编译他们的app,接着再花上数月的时间来修复任何出现的故障,甚至重做app.这样的结果,使得人们根本无暇去探究 iOS7 所带来的新东西. ...

  9. 对于iOS 7 隐藏特性和解决之道

    当 iOS7 刚发布的时候,全世界的苹果开发人员都立马尝试着去编译他们的app,接着再花上数月的时间来修复任何出现的故障,甚至重做app.这样的结果,使得人们根本无暇去探究 iOS7 所带来的新东西. ...

随机推荐

  1. 2017 Fzu校赛 [Cloned]

    A - Salty Fish 海边躺着一排咸鱼,一些有梦想的咸鱼成功翻身(然而没有什么卵用),一些则是继续当咸鱼.一个善良的渔夫想要帮这些咸鱼翻身,但是渔夫比较懒,所以只会从某只咸鱼开始,往一个方向, ...

  2. python 之 time模块、datetime模块(打印进度条)

    6.9 time 模块 方法 含义 备注 time.time() 时间戳 1561013092.997079 time.strftime('%Y-%m-%d %H:%M:%S %p') 结构化时间st ...

  3. background-attachment:fixed不兼容性

    ios系统和某些移动端background-attachment:fixed不兼容性,没有任何效果,但可以hack一下就可以了,代码如下: ps:想在哪个标签加背景,可以在它class后:before ...

  4. mysql issue:

    ####0 https://yq.aliyun.com/ziliao/53466 首先,很荣幸你找到了这篇文章... 如果你忘记了mysql的密码不妨试试以下这个方法. 1.打开my.cnf  代码如 ...

  5. C8051开发环境

    1 keilC51 2 Silicon Laboratories C8051Fxxx uVision Driver_4 C:\Keil9 3  Silicon Laboratories Configu ...

  6. 拖拽调整Div大小

    今天写了一天这个jquery插件: 可以实现对div进行拖拽来调整大小的功能. (function ($) { $.fn.dragDivResize = function () { var delta ...

  7. SQL SERVER 同一个表并且是同一个时间字段进行相减

    表AID NUM TIEM1 10 2012-06-10 10:10:002 20 2012-06-10 20:10:003 20 2012-06-10 20:10:004 10 2012-06-10 ...

  8. CF1142A The Beatles

    思路: 令p表示步数,l表示步长.由于p是使(l * p) % (n * k) == 0的最小的p,所以p = (n * k) / gcd(n * k, l). 设l = k * x + r,则由题意 ...

  9. Linux 网卡驱动的安装

    一.网卡驱动安装的一般思路 1.首先从硬 件安装,检查网卡本身故障 2.检查网卡芯片型号(注意不是硬件品牌) 常见的网卡芯片有Intel RC82545EM/Realtek 8139D/ Broadc ...

  10. zblog忘记后台密码怎么办 官方解决方案

    刚装的zblog还没开始研究,结果发现密码弄错了进不去后台,也是醉了 为节省时间,直接用官方方案,就是一个无密码进后台的文件.下载后把文件上传至网站根目录,然后直接访问后台修改密码 zblog密码找回 ...