【总结回顾】iOS Apprentice Tutorial 1:Getting Started

【总结回顾】iOS Apprentice Tutorial 1:Getting Started_第1张图片
书籍封面 iOS Apprentice Tutorial 1:Getting Started

这本书来来回回看了大概有三四遍了,感觉还是需要总结一下。

iOS Apprentice系列一共有四本,这是第一本。目前看的这版是第四版,V4.1,升级到了iOS 9、Xcode7和Swif2.0,适合完全没有编程基础的人和初学者来阅读。这本书的可以在RayWenderlich官网注册后订阅Newsletter免费获得:获取地址。之后的3本则需要花钱购买了,免费的话只能得到这个系列的第一本书。

1.开始开发之前要先列清单

开发一个App,首先要列一个清单,里面包括所有的你觉得需要做的事情。要尝试写出来,不全没有关系,可以慢慢补充。但是开发之前一定要列一个清单。可以按照不同的功能模块来列,然后可以把每个块分成更小的步骤,一步一步完成后,就组成了一个复杂的App。

2.组合代码之提示框

@IBAction func showAlert() {
    //第一步
    let alert = UIAlertController(title: "Hello, World",message: "This is my first app!",preferredStyle: .Alert)
    //第二步
    let action = UIAlertAction(title: "Awesome", style: .Default,handler: nil)
    //第三步,这里几个action就添加几个,比如“确认”“取消”2个选项就需要添加两个action

    alert.addAction(action)
    //第四步
    presentViewController(alert, animated: true, completion: nil)
}

3.提升用户体验之允许欧美用户横屏输入

欧美用户在输入时更喜欢横屏,比如邮件应用中,欧美用户在用手机回复邮件的时候,会喜欢把屏幕横过来,这样键盘变大了,方便敲击字母,同时输入的行数边长,能看到的东西也更多,如果你的这个界面有输入功能,请开启横屏,同时界面做好适配,适合横屏布局。

4.point和pixel

pixel是构成屏幕的最小单位(元素element)。像素越高,屏幕画质画质。
在iPhone3GS这款手机中,一个point就是一个pixel(一个点就是一个像素)。iPhone4一个point有4个pixel,横竖各两个。iPhone 6 plus一个point有9个pixel。

UIKit是以point为基本单位,不是pixel。所以在设计的时候,需要考虑point,用point衡量,而不是像素。

5.设备尺寸和point

Device Form factor Screen dimension in points
iPhone 3GS and older 3.5” 320×480
iPhone 4 and 4S 3.5” 320×480
iPhone 5, 5c and 5s 4” 320×568
iPhone 6 4.7” 375×667
iPhone 6 Plus 5.5” 414×736
iPad (all models) 7.9” and 9.7” 768×1024

6.用户体验新的特性

iOS7以后横屏的时候,手机顶部的status bar(就是显示电池电量运营商)不再显示,隐藏起来,这样App在横屏的时候能有更多的空间。这是苹果在iOS系统中提供的功能,无需开发者再次开发。但是如果要适配低版本的iOS,则需要手动写代码提供这个功能。

7.Swift语言知识之对象简介

Swift是面向对象的编程语言。

An object can have both data and functionality.关键记住这句话,对象既有数据也有功能。
Data contains something.数据包含一些东西。
Functionality does something.功能做一些事情,是一种行为。

Swift有function(函数)和method(方法)两个概念,a method is simply a function that belongs to an object.方法就是这个函数属于某个对象。如果一个函数不属于某个对象,那么它就是一个函数,如果这个函数属于某个对象,那么它就成了一个方法。

8.Calling a method和invoking a method有什么区别

没有区别,完完全全是同一个概念:调用。calling更口语化,invoking更专业术语化。
表达的都是一件事情:发送消息:跳转到你调用的这个方法,当这个方法结束时,返回这个方法最后产生的值(返回值)。

9.常用的函数(function)

print() 打印
\() 占位符或者换行符
lroundf() 将Float类型的值转换为Int类型
arc4random_uniform() 生成随机数
Int() 把数值转换为Int类型
Float() 把数值转换为Float类型
String() 把数值转换为String类型,有时候可以用"\()"代替
abs() 绝对值函数,把数值变成数值的绝对值

10.Functions 和 methods的异同

我们通过第7条知道了对象(Object)由数据和功能构成,Functionality does something。我们可以用方法method给对象提供功能(functionality),我们还可以用函数function给对象提供功能。方法method和函数function是Swift把多行代码封装成单一聚合的单元(这句话可能翻译有误,请看原文:Functions and methods are how Swift programs combine multiple lines of code into single, cohesive units.)

两者的区别在于function不属于任何对象(object),然后方法method属于某个对象。大部分的function可以在任何地方被调用。

Swift提供了非常大的函数库,里面有很多有用的函数。我们之前介绍的lroundf(),print()就是其中函数。

11.变量的作用域

(这段感觉我理解了英文的意思,但是翻译起来总是不太准确,等待高手指正)

1.全局变量。整个程序执行过程中都有效。它的生命周期是整个程序执行过程。
2.实例变量。拥有这个变量的对象有效时,这个变量有效,一旦对象生命周期结束,实例变量的声明周期也就结束了。
3.局部变量。只在调用此方法时有效,一旦方法执行完毕,局部变量的生命周期也就结束了。

下面是英文原文:

  1. Global scope. These objects exist for the duration of the app and are accessible from anywhere.
  2. Instance scope. This is for variables such as currentValue. These objects are alive for as long as the object that owns them stays alive.
  3. Local scope. Objects with a local scope, such as the slider parameter of sliderMoved(), only exist for the duration of that method. As soon as the execution of the program leaves this method, the local objects are no longer accessible.

12.随机数函数使用举例

arc4random_uniform() 生成随机数
1到100之间的随机整数:Int(arc4random_uniform(100)) + 1
0到99之间的随机数(含小数):arc4random_uniform(100)

13.self(更多请见22)

startNewRound()等同于self.startNewRound()
完整的格式是:
receiver.methodName(parameters)
接收者.方法名(参数值)

14.报错信息:is not convertible to

如果报错信息中有‘something’ is not convertibleto ‘something else’字样,那么说明你目前试图混合不同的数据类型,而不同的类型的值是无法混合的,所以会报错。解决方法就是,把其中某个类型进行转换,都成为同样的类型。
比如Int()就可以把其他类型的数值转换为Int整型类型。

15.Action methods 和 normal methods的区别

两者没有区别,都是方法。
Action methods以@IBAction开头,这个@IBAction允许Interface Builder(界面)看到此方法是和某个控件相关联的,例如按钮,slider。
没有@IBAction开头表示此方法没有和某个控件关联。

16. 常用缩写

i = i * -1 等同于 i *= -1 等同于 i = -i 还可以使用绝对值函数abs()
i = i + points 等同于 i += points

17.配套使用组合

使用modal这个segue跳转页面时,可以使用dismissViewController来关闭跳转的页面。

18.slider设置代码:

slider这个控件的图片设置和外在显示的改变目前还不能通过Storyboard来完成,只能通过代码来完成各种设置,下方是常用的代码:

//设置滑动按钮的显示图片
let thumbImageNormal = UIImage(named: "SliderThumb-Normal")
slider.setThumbImage(thumbImageNormal, forState: .Normal)

//设置滑动按钮按住时的显示图片
let thumbImageHighlighted = UIImage(named: "SliderThumb-Highlighted")
slider.setThumbImage(thumbImageHighlighted, forState: .Highlighted)

let insets = UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)

//设置左侧横轴的外表
if let trackLeftImage = UIImage(named: "SliderTrackLeft") {
    let trackLeftResizable = trackLeftImage.resizableImageWithCapInsets(insets)
    slider.setMinimumTrackImage(trackLeftResizable, forState: .Normal)
}

//设置右侧横轴的外表
if let trackRightImage = UIImage(named: "SliderTrackRight") {
    let trackRightResizable =trackRightImage.resizableImageWithCapInsets(insets)
    slider.setMaximumTrackImage(trackRightResizable, forState: .Normal)
}

19.局部变量和实例变量的区别

局部变量
实例变量(instance variable全局变量?等我查一下Swift翻译团队的翻译再更新这个地方)
局部变量。只在调用此方法时有效,一旦方法执行完毕,局部变量的生命周期也就结束了。而实例变量的生命周期和view controller(或者拥有此实例变量的对象)一样长。常量也是如此。
a local variable only exists for the duration of the method that it is defined in, while an instance variable exists as long the view controller (the object that owns it) exists. The same thing is true for constants.

20.方法中的局部变量

每一次方法被调用时,此方法的局部变量和常量都会重新被创建,之前的旧的值就会被新的值取代。

21.组合代码之提示框点击按钮调用方法

let action = UIAlertAction(title: "OK", style: .Default, handler: { 
action in 
self.startNewRound()
self.updateLabels()
} )

handler后面的大括号就是一个闭包,你可以把闭包当做是没有名字的方案method。闭包里面的代码不会立即执行,只有用户点击OK按钮后,才会执行。

@IBAction func showAlert() {
    //第一步
    let alert = UIAlertController(title: "Hello, World",message: "This is my first app!",preferredStyle: .Alert)
    //第二步
   let action = UIAlertAction(title: "OK", style: .Default, handler: {action in self.startNewRound() self.updateLabels() } )
    //第三步,这里几个action就添加几个,比如“确认”“取消”2个选项就需要添加两个action
    alert.addAction(action)
    //第四步
    presentViewController(alert, animated: true, completion: nil)
}

22.Self使用介绍

我们在21闭包中看到,闭包中的方法前面都有self,而在ViewController中并没有使用self。self表示view controller自己。通常情况下,给view controller发送消息时,我们无需使用self开头,但是这里有一个例外:就是在闭包中你需要使用self开头来表示view controller自己。这是Swift语言的规定,记住就好。如果你在闭包中忘记使用self开头,Xcode会发现这个错误然后报错。至于为什么要有这个规定,那是因为闭包可以捕捉变量,闭包的这个特性能够带来惊人的效果,我们在之后的书籍中会介绍。

23.组合代码之添加网页:

override func viewDidLoad() {
    super.viewDidLoad()
    //步骤一:在应用的bundle中找到BullsEye.html这个文件
    if let htmlFile = NSBundle.mainBundle().pathForResource("BullsEye",ofType: "html") {
        //步骤二:把这个BullsEye.html文件加载到一个NSData对象中
        if let htmlData = NSData(contentsOfFile: htmlFile) {
            //步骤三:如何web view这个控件显示NSData对象中的内容
            let baseURL = NSURL(fileURLWithPath:NSBundle.mainBundle().bundlePath)
            webView.loadData(htmlData, MIMEType: "text/html",textEncodingName: "UTF-8", baseURL: baseURL)
         }
     }
}

24.组合代码之过渡动画

//步骤一:创建过渡动画常量
let transition = CATransition()
//步骤二:设置过渡类型
transition.type = kCATransitionFade
//步骤三:设置过渡持续时间
transition.duration = 1
//步骤四:设置计时函数
transition.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseOut)
//步骤五:把上面四步创建的动画添加到目标对象中
view.layer.addAnimation(transition, forKey: nil)

25.如何修改App在iPhone主屏幕的名称:

Info.plist文件中:添加Bundle display name一栏,然后在这一栏后面输入你想显示的名称。

26.Info.plist

Info.plist文件像是设置文件,放置一些无法放到其他地方的属性,例如版本号,例如是否有status bar等待。Xcode7下无需手动编辑Info.plist文件,可以直接在Project Settings界面更改即可。
如果你看不懂Info.plist文件,没有关系,好多人看它也费劲。

27.1x,2x和3x图片

Xcode 7中,只有2x一个位置,仍然可以选择multiple选项,设置多种。

1x
能运行iOS 9且使用1x图片的设备只有iPad 2和iPad mini。开发纯iPhone应用不必考虑1x。

2x
使用2x图片的设备非常广泛:iPhone 4S, iPhone5, 5c 和5s, iPhone 6,所有的Retina iPad设备。

3x
使用3x图片的设备:iPhone 6 Plus

如果你开发的应用仅限于iPhone的iOS 9 以及更高系统,那么没有必要使用1x的图片。

你可能感兴趣的:(【总结回顾】iOS Apprentice Tutorial 1:Getting Started)