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)
网友评论