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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • 一个人听着歌发呆 脑袋里全是你的名字 你在城市另一边 还把我拒之门外 我看不到你的心 于是坐下哭了起来 有三行情书...
    黑色的荷包蛋阅读 450评论 0 0
  • 等你 文/清颜(鄂尔多斯) 心里,总有一缕缕梦绕魂牵 叫你停步 前方,总有温暖的目光 为你回眸 左手拉一把亲亲的人...
    清颜诗文阅读 626评论 0 3
  • 最早接触阅读方法是读了彭小六老师的文章《如何在21天速效治疗拖延症晚期》而后发现了阿何老师并参加了他的思维导...
    C瑞阅读 245评论 0 0
  • 本周过多的时间都用在关注区块链资产的价格浮动上了,虽没有操作,只是傻呵呵地看。真是“智商随着价格浮动而波动啊”.....
    Mimosa1228阅读 317评论 0 1