美文网首页
Section 1: Getting Started

Section 1: Getting Started

作者: 奥个特曼 | 来源:发表于2018-07-26 09:11 被阅读22次

    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

          本文链接:https://www.haomeiwen.com/subject/uxuvmftx.html