Parts of UIKit Document Learning(2个月前,过长分割

1.accessibility programming(针对需要VoiceOver,语音辅助功能用户支持开发的预留)

2.UIImagePickerControllerSourceTypeCamera 类型照片的photo metadata是可以访问的,可以访问到图片的地理位置信息等

3.Adopting 3D touch on iPhone,在ios9+中,可以实现一些手机的新特性开发以达成快速访问手机功能

4.Adopting Multitasking enhancements on iPad,iPad中支持多任务环境处理

5.App Icons on iPad and iPhone 屏幕尺寸说明

6.Auto Layout Guide(专门的自动布局的文档)(*)

Auto Layout 是根据视图的限制(constraints)来动态计算所有视图的位置和大小的

外部变化(External Changes)

当父级视图的大小或形状改变时,额外的变化就会发生。基于这些变化,你需要更新视图体系的布局到最佳使用空间的状态。以下是一些会引发额外变化的情况

。用户重新设置窗口的大小(OS X)

。用户进入或离开iPad的Split视图(IOS)

。设备旋转(IOS)

。新激活的呼叫或视频引发的导航条出现或消失(IOS)

。你想支持不同大小的类

。你想支持不同类型的屏幕

大部分上述情形都是运行时发生的,所以他们需要你的app来动态响应。否则,像适配不同屏幕大小,代表了app需要适应不同的环境。尽管屏幕大小不会在运行时改变,创造一个自动适配的屏幕让你可以应对各种情况,无论是4s,6plus甚至于aPad。Auto Layout同样是一个关键技术对于需要支持iPad的Slide Over和Split View功能。

内部改变(Internal Changes)

当你的用户交互界面中的视图或控制器改变时内部变化就会发生。

以下是一些常见的引发内部改变的情况:

。随着app改变引发的内容呈现

。app支持国际化

。app支持Dynamic Type(IOS)

当app内容变化时,新内容可能需要一个新的布局。这种情况通常在显示文本或显示图片内容时发生。例如,一个新app需要根据每个新闻的大小来调整它的布局。还有,一个照片拼接需要处理图片大小和比例的各种情况

国际化是让app可以支持不同的语言,宗教和文化的一个进程。一个国际化app的布局需要考虑这些情况以正确设置各种内容。

国际化对于布局有三个重要影响。首先,当你将你的交互界面转换成不同的语言,那些图标需要不同的大小。德语,例如,通常会逼英语需要更多的空间。而日语则更少。

第二点,日期和数字的呈现方式可能会根据地区有所不同,甚至在语言没有改变的情况下也会发生。尽管这些差异相较于语言差异是细微变化,用户交互界面依旧需要适应这些微细的差异。

第三点,改变语言不单单会影响文本的大小,可能也会同时改变布局的结构。不同的语言采用不同的布局方向。英语,举例而言,使用从左到右的布局方向。但阿拉伯语和希伯来语是采用从右到左的布局方向的。通常而言,用户接口中元素的顺序需要匹配布局的方向。如果一个按钮在英语中是位于右下方,在阿拉伯国家中它需要位于左下方。

最后,如果你的app支持dynamic type,也就是用户可以自己在app中改变字体大小的。这可能会改变用户交互过程中的文本相关元素的高度和宽度。如果用户再app运行时改变字体大小,字体和布局需要做对应调整

Auto Layout Versus Frame-Based Layout

有三种主要的途径来实现一个用户界面的布局。你可以通过编程布局用户界面,你可以使用自动调整来响应一些变化,或者你可以使用Auto Layout。

传统的方式,app通过编程设置每个视图在体系中的frame来实现界面排布。frame定义了视图在其父坐标系中的起点,高度和宽度

这种方式下,你需要计算每个视图的大小和位置。而且,如果有变化发生,你需要重新计算所有被影响的视图。

许多情形下,编程定义视图框架的方式提供了最大的拓展性和权限。当一个变化发生,你可以做什么想要做的变化响应。然而因为你需要自己管理这些变化,不拘一格简单的用户界面可能需要一个客观的过程来设计、调试和管理。创造一个真正可适应的用户交互会增加很多额外的工作负担。

你可以使用autoresizing masks来帮助减少这些劳动。一个autoresizing mask定义了当一个视图的父视图框架改变时它如何变化。这减少了那些用来使用额外变化的布局编写。

但是,autoresizing masks只支持一个相对较小的可能布局情况。对于复杂的用户界面,你需要通过编码变化来增加autoresizing masks。另外,autoresizing masks只使用那些额外变化的情况。它们不支持内部变化。

尽管autoresizing masks 只是编程布局的一个过程性的解决方案,auto layout代表了一个完整的全新实现。相较于之前的考虑视图的框架,你现在只需要思考视图间的关系

Auto Layout通过使用一系列的限制来定义用户交互界面。限制(Constraints)代表了两个视图的关系。Auto Layout会通过这些限制来计算每个视图的大小的位置。这样实现了能够动态响应各种外部和内部变化的布局。

通过设置限制来创造特定视图的逻辑和通过代码来编写的逻辑差异非常大。幸运的是,掌握Auto Layout不比掌握任何其他编程任务更难。两个基本步骤,首先,你需要理解基于限制布局的逻辑,其次有需要学习相关的api。在学习其他编程技巧是经常使用这套步骤。Auto Layout没有什么特别的。

这个指南剩下的部分是用来帮助你减少Auto Layout过度的. Auto Layout Without Constraints章节描述了一个高度抽象以减少用户交互界面的内置布局。 Anatomy of a Constraint 章节提供了你需要用来理解Auto Layout交互设计的内在理论。Programmatically Creating Constraints和Auto Layout Cookbook章节详细描述了api。最后Auto Layout Cookbook呈现了很多各个难度层级的布局范例,你可以在你自己的工程里面学习他们,Debugging Auto Layout提供了建议和工具用来修复出错的内容。

7.Camera Programming Topics for IOS,IOS中有两种可以拍照和拍视频的方法

使用 UIImagePickerController类提供的功能来拍照

使用AV Foundation framework提供的类(貌似PHAsset基于的Photo没有提供拍照解决方案)

使用这两种方法,都可通过管理 media metadata,来访问类似于GPS定位信息等的拍摄信息

8.cocoa编辑环境下的ios特性

动画:

Core Animation是用户交互中的有效执行动画

Core Animation的关键技术是layer(CALayer)

动画必须有一个目标,一个类型,以及计时信息

一些内在属性会引发动画,比如frame或opaque变化等,是因为layer内置的属性设定了动画机制

不同的平台呈现views和core animation动画的方式不一样(这里不同的平台是指uikit framework的uiview 与 Appkit framework的nsview 类的区别,后者尚未接触过)

9.Collection视图(集合视图)(一个有意思的问题,可以探究这个是否为framework体系,这个是如何实现和加载的?)

集合视图提供了一种弹性可变的布局来展现一组的有序数据。

一个集合视图可以管理数据驱动视图的虚拟呈现

流除了支持网格式还支持其他横向的展现(我貌似就用过网格式)

手势能被用于单元格来进行布局操作

定制布局能让你展现比网格更丰富的内容

10.converting to storyboards release notes(缺失)

11.detecting phone numbers and links in an iPhone application 识别手机号码和链接

iPhone os3.0后(IOS3.0?),文本视图和网页视图提供了手机号码,邮件地址和网页链接的识别功能。

通过配置dataDetectorTypes的属性来设置或者直接在nib文件中勾选设定

12.关于文档交互(Document Interaction)

从ios4.2开始,提供了技术以支持显示一些iphone不直接支持的文档预览。IOS同时提供了一个系统级的文件类别注册,让你的app而已处理通过其他已安装app打开的文件。这些支持技术包括UIKit框架中的UIDocumentInteractController类

从4.2开始,Quick Look框架为许多文档类型提供了内置的打印支持。如果你想提供定制的打印和复制,你要给对应文档的交互控制器添加对应的代理方法实现

预览文件或展示配置

使用一个文档交互控制器(UIDocumentInteractionController类的实例)可以提供支持来控制应用不直接支持的文件,像iWork文档,PDF文件,图片文件等

注册支持的文件类型

如果你的应用可以打开特定类别的文件,你可以在info.plist中注册对应选项。在其他应用需要打开这个类别文件时,你的应用会被包含在推荐的打开文件选项框中

13.文件选择器

文件选择器可以让用户选择应用沙箱之外的文档。包括存储在云端的文档,或者是由第三方拓展提供的文档。用户可以直接打开这些文档,编辑替换。这种方式简化了app间的文档共享方式,允许实现更复杂的工作流(workflow(这是一个办公软件的可切入口))。例如,用户可以用多个app编辑一个文档。

文档选择器允许应用间共享app

共享文档会带来一定的复杂度你的app必须处理的。

开放iCloud驱动支持以便访问文档

14.关于基于文档的app

uikit框架提供了管理多种文档的办法,这些文档都包含了一系列特定数据存储在app沙箱或云端

15.ios中的绘制和打印(*)

这篇文档包含了三个相关主题

。绘制定制UI视图。定制的UI视图可以让你绘制一些无法用标准的UI元素轻易绘制的内容。例如,一个画图程序或许需要一个定制视图提供给用户来完成绘图,或者一个拱桥游戏中需要一个定制视图让它可以绘制一些小精灵

。绘制脱离屏幕的位图(bitmap)以及pdf内容。无论你是计划随后显示图片内容还是将它们导出到一个文件中,或者将图片内容通过AirPrint支持的打印机打印,离屏绘制让你可以不阻断工作流达成这个目的。

。给App添加AirPrint支持。IOS打印系统让你可以差异化的绘制内容到页面中。

概况

IOS本地的绘图主包含了三个技术:UIKit,Core Graphics和Core Animation。UIKit提供了视图以及一些视图内置的高优先级的绘制函数,Core Graphics提供了额外的可以支持UIKit视图的绘制方法(低优先级),Core Animation则提供了可以将转场特效以及动画应用到UIKit视图的能力。Core Animation同样对视图的拼接有效果(compositing)

定制视图允许了更大的绘制拓展性

这个文档描述了如何使用内置的绘制技术在定制的UI内绘制内容。这些技术,包括Core Graphics和UIKit框架,支持2D绘制。

在你考虑使用一个定制视图前,你应该关心是否真的需要这么做。本地绘制适用于处理更复杂的2D布局需求。然后,因为定制视图是进程敏感的,在你使用本地绘制技术时你需要限制绘制的数量。

作为替代定制绘制的方式,IOS app可以用几种其他方式来完成屏幕内绘制。

。使用标准内置视图。标准视图可以让你需要做任何具体的绘制内容来实现一些通用原始的界面,包括列表,集合,弹出框,图片,进程条,表格等。使用内置的视图不单可以保证app间用户界面风格的延续性,通用节省了开发时间。你可以通过阅读 View Programming Guide for IOS 来确定一个内置视图是否满足你的需求。

。使用Core Animation layers。Core Animation让你可以通过使用动画和转场特效来创建复杂的,图层级的2D视图。Core Animation对于标准动画视图是一个不错的选择,或者是用一个复杂的方式来组合视图以呈现深度幻想的内容,同样可以实现文档中描述过的定制绘制视图组合。要了解更多关于Core Animation的内容,可以阅读Core Animation Overview

。在一个定制视图或GLKit视图中使用 OpenGL ES技术。OpenGL ES框架提供了一系列定位在游戏开发或高内容频率类似于虚拟原型app和机械艺术设计app 的开放标准的绘制库工具。它提供了从OpenGL ES2.0到OpenGL ES v1.1。更多关于OpenGL 绘制的内容,请见 OpenGL ES Programming Guide for IOS

。使用web内容。UIWebView类让你可以在app中显示基于web的用户界面。更多关于如何在web 视图中显示web content内容信息,请见 Using UIWebVIew to display select document types 和 UIWebView Class Reference

根据你需要创建的app类型,可能会使用少量或完全不需要使用定制绘制代码。尽管immersive类app传统上广泛使用了定制绘制代码,工具或产品类app则经常用标准视图和控制器来显示这些内容。

绘制代码的使用应该尽量被限制在需要动态的显示内容时使用。例如,一个绘图app需要使用绘制代码来跟踪用户的绘制指令,一个拱桥类(arcade-style)游戏可能需要根据游戏环境改变来连续更新屏幕。在这些情形下,你需要选择一个合适的绘制技术来绘制一个定制视图以合适处理事件和更新显示。

另一方面,如果你的app界面的大部分内容是固定的,你可以通过UIImageView类在运行时使用一个或多个图片文件来显示这些内容。你可以根据需要来呈现一些图片视图来构建界面。你也可以使用UILabel类或按钮以及内置的其他一些控制器来显示特定的文本。例如,一个黑板类游戏的电子版可以通过少量或无定制绘制代码来创立。

因为定制视图更加进程敏感(意味着更少的CPU支持),如果你能通过标准视图实现的内容,你应该优先用标准视图。同样,你应该让你的定制视图尽量的小,尽量只包含所需要的内容,或者直接用标准视图来实现所有情况。如果你需要通过定制绘制来组合标准UI元素,考虑使用Core Animation layer来基于一个标准视图来实现定制绘制以便尽可能少的绘制信息。

几个使用本地绘制技术的重要概念

当你使用UIKit和Core Graphics来绘制时,你需要了解几个概念以便完成绘制。

。对于drawRect:方法,UIKit创建了一个graphics context以呈现内容。这个graphics context包含了绘制系统执行绘制命令所需要的信息,包括,类似于填充和stroke颜色,字体,clip区域,线宽度等参数。对于bitmap images和pdf内容,你可以创建或绘制到一个定制的graphics context中。

。UIKit有一个默认的坐标系,其远点在视图的左上方。正向值是向下以及向右的区域。你可以改变这个坐标系相对于内置视图或窗口的大小,方向和定位信息,通过改变current transformation matrix,这个内容是定义了一个坐标系空间如何放置在设备屏幕上的。

。在iOS中,逻辑坐标空间(logical coordinate space),它描述了点间的距离,并不代表设备坐标系中的空间,设备坐标系控件是以像素丈量的。对于更高的精度,点可以用浮点数来描述。

相关章节:iOS Drawing Concept

UIKit,Core Graphics 和Core Animation为你的app提供了很多绘制工具

UIKit和Core Graphics提供了许多配套的绘制工具可以呈现graphics contexts,Bezier paths,images,bitmaps,transparency layer,colors,fonts,PDF content,以及绘制rectangles和clipping areas。另外,Core Graphics有一些line attributes,color spaces,pattern colors,gradients,shadings和image masks相关的函数。Core Animation框架让你可以使用通过其他技术创造的内容来创建动画流。

相关章节:iOS drawing concepts,drawing shapes using bezier paths,drawing and creating images,generating pdf content

Apps can draw into offscreen bitmaps or pdfs

app来实现离屏绘制内容十分有用

。offscreen bitmap contexts 在进行按级别(scaling)上传图片图片或将内容呈现到图片文件中以存储或者使用Core Graphics来生成复杂图片内容显示时经常使用。

。offscreen pdf contexts在绘制用户内容来打印时经常使用

在你创建了offscreen context后,你可以将它们写入就像你在定制视图中调用drawRect:一样。

相关章节:drawing and creating images,generating pdf content

Apps对于打印内容有一系列的参数可以配置

从ios4.2起,apps可以通过使用AirPrint来完成无线打印。等部署一个打印任务时,有三种方式来将打印内容传递给UIKit框架

。可以直接传递给框架一个或多个可打印的对象;这样的对象需要关联最小的app。他们是NSDate,NSURL,UIImage或包含或指定图片数据或pdf内容的ALAsset类 的 实例。

。可以指定一个打印格式器给打印任务。打印格式器(print formatter)是一个可以多页呈现特定类型内容(类似平铺的文本或网页)的对象

。可以指定一个页包装器(page renderer)给打印任务。页包装器通常是一个UIPrintPageRenderer类子类实现的一个实例,它可以部分或全面绘制要被打印的内容。一个页包装器可以用一个或多个打印格式器来协助完成打印

相关章节:打印

让app适配更高光谱的屏幕很简单(high-resolution) (貌似是在说2x和3x这码事)

一些设备有high-resolution屏幕,所以你的app必须做好能够运行在这些设备以及一些lower-resolution屏幕上的准备。IOS处理许多工作时需要处理不同的光谱,但是你的app需要做剩下的事。你的任务包括提供特定名字光谱的图片以及修改你的层相关和图片相关的代码以便采用当前的比率

相关:Supporting High-Resolution Screens In Views

16.错误处理编程指南 (*)

每个程序都需要处理运行时的错误。一个程序,例如,或许无法打开一个文件,或者无法转换一个XML文档。通常,这类错误都需要提示用户。或许程序应该尝试找到引起问题的原因

Cocoa(以及Cocoa Touch)为开发者提供了编码工具来解决这个问题:Foundation中的NSError类以及应用中的Application Kit中的新的函数和机制支持错误处理。一个NSError对象概括了错误的信息,包括指出错误起源的信息以及本地化的字符串用以做错误提示。在应用中,有一个结构允许应用中不同的对象来重新定义错误对象中的信息以便从错误中恢复。

重要:NSError类在OS X和IOS中同样适用,错误响应和错误恢复API以及机制只在Application Kit中适用(OS X)

你应该读一下这个文档以理解NSError API以及结构,以知道该如何使用它们

这个文档的结构

Error Handling Programming Guide for Cocoa 有下述文章:

。Error Objects,Domains,and Codes描述了NSError对象的属性,尤其是其domain和错误代码,讨论了错误对象的user info字典的可能内容,包括本地化的字符信息以描述错误

。Using and Creating Error Objects 描述了如何评估一个错误,如何用NSError对象来显示错误信息,以及如何实现方法以通过指针来返回NSError对象

。Error Responders and Error Recovery描述了Application Kit结构如何在对象链中实现错误传递的,在每个对象呈现前提供了一个定制错误的机会。它童谣讨论了恢复尝试的角色定位,一个被设计在用户请求时尝试从错误中恢复

。Handling Received Error讨论了如何,在错误响应链对象中国,你处理一个接受的错误并且定制它

。Recovering From errors解释了一个用户请求尝试从错误中恢复的过程

下面两个章节是和IOS相关的,Error Object,Domain,and Codes以及Using and Creating Error Objects

了解

“The Document Architecture Supports Robust Error Handling”在Document-Based App Programming Guide for Mac提供了一些关于通过NSError指针参数来重写方法的有价值的建议

Types of Dialogs 和 When to Use Them 提供了关于IO X中弹出框格式和内容的建议。iOS Human Interface Guidelines提供了一些类似的iOS上的弹出建议。在呈现错误信息前你可以总结一些这些建议。同样的看一下下述文档讨论的Cocoa编程相关的领域

Assertions and Logging Programming Guide(both platforms)

Dialogs and Special Panels(alerts on OS X)

Sheet Programming Topic(OS X)

UIALertView Class Reference(IOS)

Exception Programming Topics 讨论了如何传递和处理异常。在The Objective-C Programming Language中描述的关键词 @try @catch @throw @finally是用来做异常处理的

17.IOS事件处理指南(*)

用户通过一些列的方式来操作ios设备,比如触摸屏幕或摇晃设备。ios会向你的app解释用户是什么时候以及如何来操作硬件,并将这些信息传递给app。你的app响应动作越自然和直观,用户越难感知这些处理。

概括

事件是一些一些发送给app的对象通知app用户的行为。在ios中,事件可以采取很多种格式:多点触控事件,动作事件以及用来控制多媒体的事件。最后一种事件类型被叫做 远程控制,因为它可以从一个外部设备发出。

UIKit让你的app更容易检测到手势

iOS app识别触控的组合以一定的方式响应他们,例如,捏合手势时拉近屏幕内容,轻弹时滚动内容。实际上,一些手势很常用以至于直接内嵌到了UIKit中。例如,UIControl的子类,比如UIButton和UISlider,响应特定的手势-轻压按钮或抓一下slider。当你配置这些控制器,他们会发送一个action信息到一个target对象上当触摸发生时。你可以接触控响应机制通过使用手势识别器。当你绑定一个手势识别器到一个视图上,这个视图整体会像一个控制器一样,响应你指定的任何手势。

手势识别器为事件处理逻辑提供了一个高优先级的抽象。手势识别器对于实现触控是推荐的方式-app上的事件处理,因为手势识别器有强大功能以及可重用和一定适配性。你可以使用内置的手势识别器并且定制它的行为。或者你可以创建自己的手势识别器以识别一种新的手势。

相关章节:Gesture Recognizers

一个事件按照特定的路径寻找其处理对象

当IOS识别了事件,它将这个事件传递给看起来最相关的原始对象来处理这个事件,比如,触控所发生的那个视图。如果原生对象不能处理这个事件,ios会继续将这个事件传递给更广范围的对象直至找到一个对象可以处理这个事件。这个对象的序列被称为 响应链(responder chain),ios事件是按响应链路径传递的,它同时将相应责任传递给了事件。这种设计让事件狐狸更加合理和动态。

相关章节:Event Delivery:The Responder Chain

一个UIEvent包含了一个Touch,Shake-Motion或Remote-Control Event

许多事件都是UIKit的UIEvent类的实例。一个UIEvent对象包含了你的app所需的决定如何响应这个事件的信息。当用户行为发生时-例如,一个手指触摸了屏幕并且在其表面移动-ios持续的发送事件对象给app以处理。每个事件对象都有一个类型-touch,shaking motion或remote control 以及一个分类

相关章节:Multitouch Event,Motion Event 和Remote Control Events

一个app接受多点触控事件当用户触摸其视图时

根据你的app,UIKit控制器和手势识别器或许对于所有的app触控事件处理就足够了。尽管你的app有一些定制视图,你也可以使用手势识别器。作为一个手指的规则,你可以写定制的触控事件处理当你的app需要响应与其自己相关的触控时,例如在一个触控下绘制。在这些情况下,你可以使用低优先级的事件处理。你实现触控方法,在这些方法中,你分析触控事件以便合理的响应。

相关章节:Multitouch Event

当用户移动设备时app接受动作事件

动作事件提供了关于设备定位,方向以及运动的信息。通过响应动作事件,你可以添加一些微小但是强大的功能。重力感应(accelerometer)和陀螺仪(gyroscope)数据让你可以检测倾斜,旋转和摇晃

相关章节:Motion Events

当用户操作多媒体控制器时app会收到远程控制事件(remote control event)

iOS 控制器以及外部设备发送远程事件给app。这些事件让用户可以控制视频和音频,例如通过头戴设备调整音量。处理多媒体远程控制事件让用户可以更好的处理命令。

相关章节:Remote Control Event

前提

这个文档假设你熟悉了下述内容:

。iOS app开发的基础概念

。创造你的app用户界面的不同要素

。视图和视图控制器是如何工作以及如何定制他们

如果你对于这些概念不熟悉,可以阅读Start Developing IOS App(Swift)。然后,阅读View Programming Guide for IOS 和 View Controller Programming Guide for IOS

同样

ios设备提供触控和设备数据是同样的方式,大部分ios设备都有gps和指南硬件可以检测到一些你的app可能感兴趣的底层数据。Location and Maps Programming Guide讨论了如何接受和处理地理信息

对于高级手势识别技术类似于curve shooting and applying a low-pass filter,可见WWDC 2012:Building Advanced Gesture额Recognizers

许多模板项目在IOS Referee Library中都有代码使用手势控制器处理事件。包括:

Simple Gesture Recognizers是一个理解手势动作的完美开始。这个app模拟了如何是被tap,swipe和rotate手势。这个app通过显示和在触控坐标执行一个图像动画来响应每个手势

Handling Touches Using Responder Method and Gesture Recognizers 包含了两个项目来演示如何处理多点触控来抓取屏幕内的圆。一个版本使用了手势识别器,另外一个则用定制的触控事件处理函数。后面的版本对于理解触控步骤尤其有用因为它在手势发生时显示了当前发生的内容

MoveMe通过响应触控事件来演示一个视图动画。看这个实例代码以便更好的理解定制触控事件

18.朝向改变时处理呈现视图控制器

两种需要处理的情形

如果popover 控制器被UIPopoverController的一个target矩形区域使用下述方法呈现了 -presentPopoverFromRect:inView:permittedArrowDirections:animated:

如果popover控制器时被一个菜单按钮展现的,这个菜单按钮在旋转完成后会被移除的。

UIApplication的 -didRotateFromInterfaceOrientation:

19.如何让我的app出现在一个特定文件的打开方式列表中?

文件打开配置的方法

20.IOS是如何确定你的app的语言的(*)

要决定app的语言,ios不只是考虑用户手机设定中的语言选项(通用-语言区域)也会同时考虑app声明支持的本地化语言设置。以下是详细步骤:

1.ios首先寻找用户最倾向使用的语言,也就是系统语言设置选项里面的第一个

2.然后app会检查这个语言是否被app支持。IOS会在你的app bundle里面寻找一个.lproj文件夹来匹配你的优先语言。如果这个文件夹存在,ios确定你的app可以本地化这种语言并且就选择它作为app的语言。否则,ios会选择下一个语言来重复上述步骤。

ios支持的方言或许会轻微改变上述步骤。如果一个用户倾向的语言是一个地区性的语言并不被你的app支持,ios会在放弃前尝试一个更通用的语言来回滚这个检查。例如,如果你的用户倾向的语言是British English但是你的bundle中并不包含一个en-GB.lproj或en_GB.lproj文件夹,IOS会在你的bundle中寻找一个en.lproj文件夹,如果它存在那么会选择英语作为app适配语言。

提示:一个.lproj文件夹是一个存储了特定语言资源的目录。参见Localized Resources in Bundles和Language and Locale IDs了解更多信息

3.如果用户倾向语言中没有一个是你的app支持的,那么ios会选择你的app开发语言作为app语言(CFBundlDevelopmentRegion)

提示:确认设置了app的CFBundleDevelopmentRegion。如果你采用基础的本地化(Base Localization),确保CFBundleDevelopmentRegion的值匹配你的Base.lproj文件夹中的内容。

一旦你的系统选择了一个语言作为app的本地化语言,对应匹配的.lproj文件夹会被用来定位和本地化资源。如果你的app的UI或者系统-系统了系统UI(比如文本编辑菜单,UIDatePicker,UIImagePickerController和UILocalizedIndexedCollation)被以一个错误的语言显示,确保你的app包含了它支持所有语言的.lproj文件夹并且这些文件夹都被正确命名了。如果你的app不使用任何的.lproj文件夹来管理本地化资源,却被使用CFBundleLocalizations定义了支持的语言

重要:app的语言选项值(在app的Information节录下面)是由存在的.lproj文件夹而不是你的app在iTunes Connect中的配置决定的。如果你看到你的app中的语言选项中不包含你需要支持的语言,检查你的app bundle是否包含了合适了.lproj文件夹。如果你额app并没有使用.lproj文件夹管理本地化资源,确保app的

CFBundleLocalizations定义了所需要支持的语言。

(做一个test来支持语言设定,因为这个很重要)

21.如何退出视屏镜像播放(直播内容貌似可以参见一下这章节的)

Displaying Content on an External Display

22.视频:ios7技术讨论:设计时尚的app part1

23.视频:ios7技术讨论:ios7下应用的交互设计

24.ios7场景切换指南(error link)

25.问题:app的登录背景图不出现了(分析答者分析问题的思路)

q:为什么我的Default-Landscape.png不以竖屏方式展现在app中

IPhone apps和常规在IPhone上运行的app一样,总是以portrait(竖屏)方式登录。在登录后,系统才会根据这顶旋转到所支持的方向。

26.以横屏模式打开应用(横屏是大部分游戏开发的基础~~~)

这个文档描述了如何开始让你的iPhone应用以横屏的方式使用

介绍

界面方向和状态栏

登录图片

配置app窗口

实现app的试图控制器的方法

设计视图

让你的app在登录后旋转为竖屏

文档版本历史

介绍

IPhone应用通常是以竖屏的方式登录来一赔主屏幕的方向。然而,需要应用只有以横屏的方式登录会更合适。这个文档描述了如何在iPhone和IPod Touch上让应用以横屏要实施的一些变化设置。

提示:虽然技术上这些部分支持可以被应用到iPad应用上,但是推荐iPad应用还是需要支持所有的方向。

界面方向和状态栏

在应用的target下的General 选项下,只选定Supported Device Orientation的Landscape Left 和Landscape Right选型。

这里的配置会关联到应用信息列表中的UISupportedInterfaceOrientations 键值

UISupportedInterfaceOrientations的键值会决定app登录时状态栏如何定位。在IOS 7以及更低版本,如果UIInterfaceOrientationPortraint值被呈现,状态栏会被一直设定为竖屏方向。否则,状态栏会在UISupportedInterfaceOrientation下根据第一次出现时的朝向来决定位置

UISupportedInterfaceOrientations键值的缺失会让你的app在登录后无法旋转。这提供了一种快速的方法可以限制界面的方向而不需要通过实现-supportedInterfaceOrientations的方法。参见View Controller Programming Guide可以了解更多的信息。

警告:特定的内置视图只能以竖屏方式显示。显示这些视图控制器的某一个但是没有将UISupportedInterfaceOrientations键值设定为UIInterfaceOrientationPortrait时会抛出一个异常。参见Allowing Your App to Rotate Into Portrait Orientation After Launch 可见更多信息

登录图片

IPhone app的登录图片总是被调整到与竖屏方向屏幕尺寸大小相符。对于需要横屏登录的app,你需要用常用的图片编辑软件将登录图片旋转以保证图片尺寸的连续性

避免使用asset分类来管理横屏app的登录图片。除了iPhone 6Plus的登录图片,asset分类假定所有的iPhone登录图片都是横屏的。当你的app编译完成后,每一个登录图片的接口都被添加到UILaunchImages键值的编译后的信息属性中。UILaunchImageOrientation的每一个接口的键值都是Portraint。这些接口会在登录时被忽略因为UILaunchImageOrientation键值与登录的方向不匹配(Landscape Left或Landscape Right)。如果系统在登录时找不到一个合适的登录图片那么现实的结果是在登陆期间显示一个空白的画面。

相对而言,如果你的app只支持ios8以及以上版本你应该使用一个Launch File。否则,你需要将登录图片以资源的形式添加到文件夹中并且在app的应用属性列表中添加UILauchImages键值。确保设置相册分类为失效对于通过选择在应用的target的General目录 Launch Image Source菜单下的“不要使用相册分类”管理登录图片

图片示范

。。

你可能感兴趣的:(Parts of UIKit Document Learning(2个月前,过长分割)