Section 1: Getting Started

Chapter 1: Introduction

都是自己瞎写的

Chapter 2: The One-Button App

Make a programming to-do list

作者的建议是在开始编程之前,先做一个 to-do list, 把整个程序开发分割成可控的小块,你就能找到足够简单的着手点。

What happens when you press Run?

Xcode首先会编译你的源码,也就是:把Swift翻译成iPhone能够理解的机器码。

编译器是Xcode的一部分,它将你的Swift源码转换成可执行的二进制码。它会将所有的不同元素放在一起来构建app(例如:源文件、图片、storyboard文件等等,并将它们放到application bundle中)。这个过程也被称作building app。如果有任何错误,这个构建将会失败。如果没有错误,Xcode会拷贝application bundle到iPhone,并启动app。

The anatomy of an app

一个app实际上是由可以互相发送消息的对象构成的。在iOS中,所有app都是事件驱动的,也就是对象监听特定的事件发生并执行它们。

app就是坐等某些事情发生。当用户点击屏幕的时,app会被短暂地‘唤醒’来执行相应的动作,然后就又回到‘睡眠’状态直到下次事件发生。

app永远不会退出运行,直到用户终止它或者崩溃。它大部分的时间都是在等待输入的事件,然后处理这些事件,然后回到‘睡眠’状态。

Chapter 3: Slider and Labels

Portrait vs. landscape

UIKit and other frameworks

iOS提供了很多以框架或工具包形式构建的模块。UIKit框架提供用户界面控件,例如:buttons, labels和navigation bars。

另外一些框架,例如:Foundation,它提供很多基础模块用来构建app;Core Graphics,用来绘制一些基本的形状;AVFoundation,用来播放音频和视频。

iOS的一整套框架被统称为Cocoa Touch

Objects

可以把对象想象成你程序中的一个构建模块。

编程人员喜欢把相关的功能封装到对象中。这个对象负责解析文件,那个对象知道如何绘制图像到屏幕上,另一个对象可以执行一个复杂的计算。

程序中每个对象都负责一个特殊的方面。在一个成熟的app中,你将会发现很多不同的对象。

Data and methods

一个对象可以同时拥有数据和功能。

  • 数据:当你将button拖拽到storyboard中时,button实际上就变成了视图控制器的数据的一部分。数据的意思是包含某些东西。在这种情况下,视图控制器包含button。

  • 功能:某些事。

为对象提供功能的被称作method(方法)。

一个例子:

你想要举办一个聚会,但是你忘了买冰激凌。幸运的是,你邀请了名字为Steve的对象,他正好住在便利店的隔壁。因此当准备聚会的时候,你给Steve对象发送了一条消息,告诉他带一些冰激凌过来。

计算机现在切换到了Steve对象,并逐条执行buyIceCream()方法中的指令,从上到下。

buyIceCream()方法执行完成,计算机返回你的throwParty()方法并继续向下执行,因此你和你的朋友们就可以吃到Steve带过来的冰激凌了。

Steve对象也有数据。在他去便利店之前,他有钱数据。到便利店后他把钱数据变成了冰激凌数据。

Message

“Sending a message”其实就是计算机跳到你正在调用的方法,方法执行完成后再返回到原来暂停的地方。

Functions and methods

函数和方法就是指:如何将多行代码结合到一个独立的单元。它们的区别是函数不属于某个对象,而方法属于。

Chapter 4: Outlets

arc4random_uniform(100)函数是随机获取一个从0到99之间的整数。

Chapter 5: Rounds and Score

本节主要包括:

  • Get the difference: 计算目标值和用户选择值的差。

  • Other ways to calculate the difference: 另一种计算差值方式。

  • What's the score?: 基于差值计算用户的得分。

  • The total score: 计算用户所有回合的总得分。

  • Display the score: 在屏幕上显示用户得分。

  • One more round...: 完成更新回合数和显示回合数。

Chapter 6: Polish

本节主要包括:

  • Tweaks: 小的UI改动使游戏看起来更好。

  • The alert: 改进alert功能,在alert消失后更新屏幕显示。

  • Start over: 重置游戏。

Self in closure

在闭包中必须显示的使用self来引用控制器。

Chapter 7: The New Look

本节主要包括:

  • Landscape orientation revisited: 更改项目让横屏支持的更好。

  • Spice up the graphics: 使用自定义图片替换原来的UI。

  • The about Screen: 添加“关于”页面,并在UI上优化这个页面。

Blending in

设置小于100%的不透明度(opacity)将会使颜色轻微的透明,部分透明可以使颜色和背景混淆在一起,显示起来更柔和。

The slider

Xcode有一个很便捷的功能:添加图片字面量到你的代码中。

let thumbImageNormal = UIImage(named: "SliderThumb-Normal")

可以变成:

let thumbImageNormal = Sli

你的代码就会像这样:

The About Screen

加载本地html文件

if let url = Bundle.main.url(forResource: "BullsEye", withExtension: "html") {
    if let htmlData = try? Data(contentsOf: url) {
        let baseURL = URL(fileURLWithPath: Bundle.main.bundlePath)
        webView.load(htmlData, mimeType: "text/html", textEncodingName: "UTF-8", baseURL: baseURL)
    }
}

Chapter 8: The Final App

本节主要包括:

  • Support different screen sizes: 确保app可以在不同的iPhone和iPad屏幕上正确运行。

  • Crossfade: 加入一些动画使新游戏开始的过渡更有活力。

  • The icon: 添加app图标。

  • Display name: 设置应用的名字。

  • Run on device: 怎样配置才能在真实设备上运行。

Crossfade

startNewGame()中添加如下代码:

...
startNewRound()
// Add the following lines
let transition = CATransition()
transition.type = kCATransitionFade
transition.duration = 1
transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseOut)
view.layer.add(transition, forKey: nil)

你可能感兴趣的:(Section 1: Getting Started)