Swift学习笔记02

先照着做……

Posted by ARay on March 12, 2018

已经学会了怎么做一个只有一个页面的应用。

现在准备继续学习下一步的工作了。

应用的工作原理

一个应用如何工作?

一个应用是由对象组成的,而这些对象之间可以相互发送消息。

iOS中,应用是事件驱动的。

对象会等待某些特定的事件发生,然后进行处理。

iOS的应用大多数时间都在……无所事事?

直到我们触碰屏幕的时候,应用会花上几个微妙的时间来处理这个事情,然后接着无所事事,直到下一个事件的到来。

作为一个程序员,扮演的角色就是编写一些代码,当你的对象接收到事件发生的消息后对它们进行处理。

回到现在做的这个应用上,按钮这个对象做了什么呢?

  1. 按钮的Touch Up Inside(点击)事件和视图控制器的showAlert是关联在一起的。
  2. 在showAlert中,视图控制器向UIAlertController对象发送另一条消息addAction。
  3. 为了显示弹出警告提示框,试图控制将发送消息presentViewController。

整个应用都是由使用类似方式来相互交流的对象组成的。

这种事件驱动模型和PHP脚本的工作方式是不一样的。

PHP代码会从头到尾顺次执行,直到抵达代码尾部,然后退出。

应用则不同,除非我们强制关闭(或者自己崩溃了),否则是不会主动退出的。它们会等待输入事件的发生,然后立即处理这些事件,完成后继续等待下一个事件

不管哪种类型的事件,应用所做的每一件事都是由某种事件来驱动的。


UIKit和其他框架(frameworks)

iOS中提供了很多建筑程序“大厦”用的基础材料,我们将其称之为frameworks(框架),或者说“kits(组件)”。

UIKit这个框架是最基本也是最重要的一种,其中提供了用户界面的一些控件,比如按钮,标签,导航栏等。使用它可以管理视图控制器,同时处理一切和应用的用户界面相关的事情。(UI的全称就是User Interface)

在应用中,所有以UI为前缀的对象都来自于UIKit。

开发一款iOS应用的时候,可以说da部分间都在和UIKit这个框架打交道。其它的框架也各自有各自的用途。比如Foundation框架提供了构建APP的很多基本要素。Core Graphics框架用于在界面上绘制基本形状, 如直线,矩阵,渐变和图形等。AVFoundation框架用于播放声音。当然还有其它更多的框架。

iOS的完整框架又被称之为Cocoa Touch。


切换设备显示模式

横屏和竖屏的概念很简单。

point和pixel在iOS上的对应关系

但是需要注意的是point(点)这个概念。

对于iOS来说,point(点)不等于pixel(像素)

pixel(像素),是任何一个屏幕的最小显示单位。

对于老的设备而言,一个point对应的就是一个pixel。

对于Retina(视网膜屏)来说,一个point对应的是垂直和水平方向上的各2个pixel。

对于iPhone3GS来说,320 * 480 point对应的就是320 * 480 pixel。

对于iPhone4S来说,320 * 480 point对应的就是640 * 960 pixel。

iOS机型的屏幕尺寸和相应的分辨率(以Point为单位)

设备类型 屏幕尺寸 屏幕分辨率(Point)
iPhone4S及以前的机型 3.5 320*480
iPhone 5,5c,5S,SE 4 320*568
iPhone 6,6s,7,8 4.7 375*667
iPhone 6,6s,7,8 PLus 5.5 414*736
iPhone X 5.8 375*812
iPad 7.9,9.7 768*1024
iPad Pro 12.9 1024*1366

需要牢记的是,UIKit使用的单位是point(点),而不是pixel(像素)。

开发者以point为单位,设计师以pixel为单位。

让应用在横屏模式下工作

为了将应用从竖屏模式切换为横屏模式,需要完成三件事情。

  • 让Main.storyboard中的视图使用横屏显示
  • 更改设备的“Supported Device Orientations”设置

在Xcode的Interface Builder中打开Main.storyboard,在View as:iPhone SE面板中,将Orientations改成landscape。

将按钮移回视图中间位置。

  • 从iOS Simulator的菜单栏上选择Hardware-Rotate Left或是Rotate Right,也可以按住command键,然后按左右箭头切换模拟器朝向。

横屏模式下,界面不会显示iPhone的状态栏,这样可以让应用充分的利用空间。

这是手动调节,实际上有一个配置选项让iOS知道应用的显示方向。一般情况下,从模板新建的应用同时支持ortrait和Landscape布局。

在Xcode中点击Project Navigator(项目导航)顶部的项目图标,在右侧的General选项卡中的Deployment Info下面有一个Device Orientations。取消Portrait选项就OK了。


关于对象和方法

Swift属于所谓的”面对对象”的编程语言,也就是说你要做的大多数事情都和某种类型的对象有关。一个应用就是由彼此可以发送消息的对象组成的。

开发一款iOS应用的时候,通常会用到系统提供给你的一些对象。 比如UIKit框架里面的UIButton对象。同时也会制造属于自己的对象,比如视图控制器。

对象(object)究竟是个什么东西?

如果把要开发的产品比作一栋大楼,那么对象就是修建这栋大楼的砖块。

程序猿们喜欢把有一定关联的功能放到对象里面去,这个对象可以解析某个RSS feed,那个对象可以在屏幕上绘制一个图像,还有个对象可以执行杂的计算。每个对象都负责程序中的某个特定部分。

在一个完整的应 中存在着多种 同的对象。

对于这个应用来说,也包含了几个不同的对象。

最常用的就是Viewcontroller这个视图控制器。

按钮也是一个对象,提示对话框也是。

在iOS应用里面,对象无处不在。

一个对象既有数据(data),也有功能(functionality)。

  • 当我们把按钮拖曳到storyboard里面的时候,它就成了视图控制器的一种数据(data)。数据总是包含着一些东西。在这里,视图控制器就包含了按钮。
  • 功能,就是执行一些具体的操作。为这个按钮添加的showAlert动作,就是一个功能。

按钮本身也有自己的数据和功能。

按钮上的标签文本内容和颜色,在屏幕上的位置,自身的高度和宽度等等,都是它的数据。

按钮的功能则是:它能发现玩家触碰到它,然后触发一个动作作为响应。

方法

在iOS开发中,一个对象的功能通常被称为method(方法)

其它的编程语言可能会换个叫法,比如“函数”,“过程”,“ 子程序”之类……

但是在Swift里面的术语是方法。

方法就是属于某个对象的功能

showAlert动作就是一个方法。

在Swift中识别方法很简单,代码前面使用func(function的缩写)方法的名字后面是括号()。

@IBAction func showAlert(){}
方法的概念

用个例子来说明一下

我(这个对象)在家里准备今晚的晚饭,但是忘记买青菜。

没有青菜就不能做晚饭,所以我给老婆(另一个对象)发送消息让她买点青菜。

这时候系统会切换到叫老婆(另一个对象),然后执行她的方法(买青菜),从头到尾依次执行。一旦她的方法完成,系统就会回到我(这个对象)的方法,继续其他的事情。

老婆(另一个对象)也有自己的数据。买青菜前,她知道自己有钱(数据)。在商店里和售货员交换了钱的数据,结果是用钱的数据的减少换来了青菜的数据的增加。做完这件事之后,她带着青菜回家。

“发送消息”实际上比字面上的意思更复杂。

我们可以用它来帮忙理解对象之间是如何交流的,系统只是简单地从准备晚餐(方法)跳转到买青菜(方法)然后再跳转回来。

通常来说,“调用方法”和“触发方法”都是一回事,系统会跳转到你要调用的方法,然后在执行完毕其中的代码后,返回到之前的方法。

一个很重要的事情是,对象都有自己的方法和数据对象可以查看其他对象的的数据,以及让其他对象执行他们的方法。这些事情放在一起,就组成了一个完整的应用。