IOS 入门(基于 IOS Apprentice 的真正面向零基础的完整解决的方案)

005 横竖屏模式以及对象、方法和数据的含义

2017-09-21  本文已影响34人  ErlichLiu

上一节

如果你没开启锁屏,在 App 中倾斜机身,就会横屏过来,屏幕宽度变宽,高度变窄就是 「Landscape」,索性我就翻译成为横屏吧,正常你竖着看手机的时候就是「Portrait」,就叫成竖屏模式吧。

在此之前,你可能从来都没对 iPhone 的横竖屏产生过疑惑,很多 App 都是既可以横屏也可以竖屏情况下运行的,通常情况下,一般都是竖屏模式。

比如说很多人在写邮件的时候,都会把手机横过来,因为更大的键盘打字会更加的方便。在竖屏模式下,iPhone SE 水平方向有 320 个 Point,垂直有 568 个 Point。对于横屏模式来说,水平和垂直方向的像素点就翻转过来了。

所以说什么是 Point ? 在一些老的设备上,比如 3GS 、iPod touch 和初代 iPad 上一个 Point 对应的就是一个像素点。所以最后导致的就是在低分辨率的屏幕上(那些图像看起来并不锐利的设备),因为每个像素都很大并且图标很大。我确定你很清楚像素。以防万一,像素就是组成屏幕的小元素。iPhone 是的屏幕像是一个巨大的母体,里面有很多有独立颜色的像素,就像电视的屏幕一样。改变像素点颜色的数值就可以改变图像的颜色。越多的像素,就可以看到越多的图像。

在采用高分辨率 Retina 屏幕的 iPhone4 及更新的设备,一
个 Point 在垂直和水平的方向上对应的都是两个像素点,所以其实在平面中一个 Point 对应了四个像素的位置。它在非常小的空间内包含了大量的像素,可以显示出更清晰的图像,从 iPhone4 开始也标志着 Retina 屏幕的普及。

在 Plus 机型上显现的更加夸张,它有三倍的分辨率,那么一个 Point 实际上时占用了 9 个像素点。你几乎无法分辨独立的像素点的存在。

以 Point 计算的屏幕

在以前只有一种尺寸的 iPhone , 但是到今天算上刚刚发布的 iPhoneX 已经有五种尺寸的 iPhone 了,这还没有算上 iPad 版本。即便是有多种尺寸的 iPhone,我们也要处理这问题。

记住 UIKit 是基于 Point 工作的,而不是基于像素点工作的,所以你只需要关注不同的屏幕尺寸对应的 Point 就可以了。像素点只是对图像设计重要,因为图像还是在按照像素点计算的。

Developer works in points, designer works in pixels.

可能你还是有些疑惑,但是不用担心,我们设计不到太多的这些知识,我们在本程序中只涉及到 iPhoneSE 的 320 * 586 Point 的版本。在这之后我们会去适配不同屏幕尺寸的iPhone。

切换 App 到横屏模式「Landscape」。


想要从竖屏「Portrait」到横屏「Landscape」模式,你需要做两件事。
1.在 Main.storyboard 中将 Portrait 换到 Landscape
2.修改 App 的Supported Device Orientations 设置。

因为它更改了屏幕的长宽尺寸,所以你会发现按钮的位置发生了变动。

需要注意的是,在 Landscape 模式下是不会再显式状态栏的。这会让用户界面显式更多的内容。

在这里你需要做一个配置,告诉 iOS 你的 App 都支持那个方向的旋转。

重新运行 App ,这时你会发现启动 App 的时候默认就是 Landscape 模式了。

对象、数据和方法

是时候该上一些理论课了,别逃跑哦。

Swift 被称作为面向对象的编程语言,这也就意味着你所作的大多数东西都会涉及到对象。在前面也提到过几次,应用程序由彼此发送消息的对象组成。

当你编写 iOS 程序时,你将用到一些系统提供给你的对象。像 UIKit 里的 UIButton 对象一样,你也会自己创造一些对象,比如 view controllers。

所以什么才是一个对象?将对象视为程序的构建模块。程序员喜欢将相关功能分组到对象中。比如有的对象专门负责解析文件,有的专门负责在屏幕上绘制图像,还有的负责复杂的运算等等。

每个对象都处理程序中的一个部分,所以在一个 App 中会有很多个不同的对象,几十个甚至上百个都可能。

即便是刚刚开始的一个小的 App 都包含着几个不同的对象。到目前为止,你花时间最多的对象就是 ViewController,「Hit Me!」这个按钮也是一个对象,以及弹出的提示框也是,写着「Hello World 」的文本也是对象。

在这个 App 里同样有个叫做 AppDelegate 的对象,你甚至在这个课程里会经常忽视它的存在(如果你好奇的查看源码),实际上它无所不在。

一个对象可能会同时具有数据和方法:

按钮本身就既是包含数据又事实现功能的方法。按钮的数据就是文本,和 Label 的颜色啊,它在屏幕上的位置,宽和高等等。按钮同样有实现功能的方法:它能识别用户的点击操作,然后触发一个操作来响应用户。

提供某些功能的方法一般称为方法。在其他编程语言里可能会被称为「程序」或者「子程序」或者「函数」。你同样可以在后面的 Swift 中看到函数的例子;方法是简单的函数同属于对象。

showAlert 的行为就是一个方法的典型例子。你可以告诉它这是一种方法,因为在该行写着 func(对 function 的缩写),后面跟着一个对圆括号。

你仔细观察ViewController.swift 剩下的代码,会发现有好几个这样的方法,比如 viewDidLoad 和 didReceiveMemoryWaring 方法。

为了方便你使用,Xcode 会有一些方法的模板,这些方法也通常在 view controllers 里,从某个角度来说,当你需要的时候,只要在方法体里填充上就可以了。

或许关于方法的概念还是有点困惑,这里有个例子可以帮助你理解。

我们来想象一个这幅图中应用到的方法场景,你想举办一个 Party ,但是忘了买冰淇淋。幸运的是,你邀请了一个名叫 Steve 的朋友,他就住在附近并且离便利店很近,没有冰淇淋的 Party 怎么行?所以在 Party 上的某个时刻,你发送消息给 Steve ,告诉他买一些冰淇淋回来。

这时候计算机就会跳转到 Steve 这个对象并执行 buyIceCream() 这个方法。然后一条一条地执行,直到这个方法完成,然后计算机会返回到你的 throwParty() 方法,然后继续执行剩下的代码,所以你和你的朋友就都可以吃到冰淇淋了。

Steve 对象同样有数据可言,在去商店之前他要有钱,到了商店他要换一些硬币(数据的转换)。当然还有一条重要的数据就是冰淇淋啦。当这些数据处理完毕,他会带着冰淇淋(数据)返回到 Party 中啦。

上文提到的「发送消息」其实就是在调用 Steve 的 buyIceCream() 方法啦。这算是一个很好理解对象间通信的方法啦。计算机可以简单地从 throwParty() 跳转到 buyIceCream() 方法,然后再返回。

通常术语来讲就是「调用方法」(calling a method & invoking a method)。这也意味着跟「发送消息」的含义一样。计算机会跳转到你调用的方法,执行完调用的方法后回到刚才调用方法的位置后继续执行代码。

很重要的一点要记住:对象是有方法 (调用买冰淇淋的方法) 和数据 (就是买的冰淇淋啊) 的。

对象在某种程度上是可以看对方的数据的,但也不尽然(比如 Steve 可能不会让你偷看他的钱包),对象也可以其他对象执行他们的方法,这就是你的 App 做的事。

那这个小节就讲到这了,赶快回顾一下这一节都讲了什么问题吧。

下一节我将带着你把所有剩下的控件都添加到 storyboard 上,并告知你每个控件的用法以及关于事件的绑定,还有一个重要的数据结构「String」(字符串)。

上一篇下一篇

猜你喜欢

热点阅读