
斯坦福大学IOS8公开课
文章平均质量分 67
秋雨暗千家
男儿不展凌云志,空负天生八尺躯
展开
-
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记47 文件系统Demo
本话将展示如何使用文件系统保存相机中保存的封面照片,使用一个提前准备好的封面设置Demo,在设置完imageView的image时候把新的图片保存到文件系统中。func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObjec原创 2015-10-11 22:32:58 · 2081 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记29 URL的使用
上一话中我们介绍了滑动视图的用法,这一话来写一个滑动视图的Demo,Demo中还会涉及到多线程编程的知识。新建一个工程Cassini。新建一个控制器ImageViewController,它的任务就是显示一个很大的图片。在控制器中设置两个私有变量: private var imageView = UIImageView() private var image:UIImage? {原创 2015-06-05 08:26:16 · 1422 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记30 ScrollView Demo实战
在上一话中我们创建了一个通过URL读取图片的Demo,这个Demo是不能拖动和缩放的,现在给它增加选项让它可以手动切换URL,并把图片添加到ScrollView中。向Storyboard中拖入一个splitviewController。把ImageViewController作为detail视图,把工程中自带的那个viewcontroller作为rootview,现在storyboard中的场原创 2015-06-05 10:55:20 · 1451 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记35 UITextField文本框
本话来介绍UIKit框架中的组件UITextField。 UItextField(文本框)和Label看起来看像,但是文本框是可以编辑的。在UI中使用文本框要注意,因为在模拟器上面输入文字是可以使用电脑键盘的,而在真机上,用户只能使用虚拟键盘,所以要注意。另外文本框中的文字大小、颜色等等也是可以设置的,就和在Label中一样。 每次我们点击文本框开始输入内容的时候,文本框会成为原创 2015-06-24 09:57:19 · 1319 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记28 ScrollView 滑动视图
作为移动设备,iphone的屏幕尺寸是非常有限的,超过屏幕尺寸的内容放到scrollview中,通过滑动来获取。scrollview的滑动方向可以是横向的也可以是纵向的,scrollview可以嵌套,比如把纵向滑动的scrollview放到横向滑动的scrollview中作为子视图。 在考虑添加一个scrollview的时候,我们需要设定scrollview的尺寸,这个属性叫做conte原创 2015-06-04 09:50:21 · 1568 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记34 Info.plist、Capabilities
我们的工程中有一个Info.plist文件,之前我们做本地化设置的时候已经接触过这个文件了,里面可以做很多设置。你甚至可以以XML的格式来查看它,但是通常你编辑这个文件通过点击工程目录最顶端的工程名字的方法:你在你的应用中有很多特性,在你把它们设置为enable之前是不能使用的,开关的方式也很有意思,通过一个开关来表示是否可用,比如我们之前在做地图功能的时候使用了MapKi原创 2015-06-19 10:42:01 · 1731 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记33 LifeCycle生命周期
IOS的生命周期如图所示:在APP开始运行时,进入绿色的部分,此时APP已经在运行了,但是UI还没有展示到屏幕上。然后你的控制器会被展示到屏幕上,在程序运行的大部分时间你都处于这个Active状态。当用户点击另一个APP的时候,当前的APP就可以移步到后台去了。在后台运行的时间非常的短,然后你的代码将停止运行,此时你的代码还没有被杀掉,在这个状态下什么都做不了,原创 2015-06-17 13:19:40 · 1556 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记32 NSNotification
我们之前在讲解MVC模式的时候提到过,模型的改变是通过广播的形式,然后控制器将调到响应的频率接收到模型的消息,找出模型中的变化,这些变化其中之一就是NSNotification,它是MVC中处理电台的途径之一,实际是一种模型到控制器的通讯。还有一个类叫做NSNoticicationCenter,它有一个类方法叫做defaultCenter,它类似于共享消息中心,你只需要发送消息给它,然后指定你想听原创 2015-06-16 11:27:16 · 1027 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记25 Lifecycle生命周期
本话来讲解一下控制器的Lifecycle(生命周期)。我们谈到的控制器的生命周期时,其实是在关注这个控制器在生命周期中接收到的一系列消息,这些消息伴随着整个的生命周期。为什么我们要关注生命周期?这是因为我们经常在子类中复写方法,以期望这些方法在某些特定的时刻发生作用。生命周期由创建一个控制器开始,大部分时候我们是通过storyboard初始化的,通过Identifier segue原创 2015-04-21 15:18:46 · 1928 阅读 · 3 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记18 Gestures手势
在之前几话中我们已经知道了如何去绘制视图,以及MVC模式的应用和代理的使用,这一话来讲一下如何识别手势。原创 2015-04-16 17:52:46 · 1526 阅读 · 2 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记31 Multithreading多线程
在IOS中存在着许多队列,和我们数据结构中的队列一样,这里的队列概念也是先进先出的。而每一个方法(包括闭包)都被组织在这些不同的队列中,而每一个队列都有自己的线程去运行这些队列,这就造就了多线程环境。其中有一个非常重要的队列叫做主队列,主队列是一个串行队列,所以主队列只会一个一个地执行主队列中的函数。所有的UI活动都必须发生在主队列中,所以当你想要一个函数或者是闭包的时候就会执行某些代码,这就原创 2015-06-10 19:40:11 · 1592 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记39 Alert&ActionSheet
Alert和ActionSheet是IOS中弹出消息的两个工具。 首先它们都是Modal的方式展示的。 Alert用来向用户发起询问,可以有一个(比如取消)或两个选项(比如确定和取消),也可以附带一个文本框(比如要求用户输入密码) Action Sheet从屏幕底部滑出,提供一些分支的选项,选项的数量可以大于两个。 对比如图: Action Sheet和Alert都可以使用UIAl原创 2015-07-26 20:35:44 · 1338 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记40 NSTimer
NSTimer的主要作用是延时调用某个方法。 NSTimer主要使用在run loop中,而run loop是主队列中的东西,我们不介绍run loop ,但是读者需要知道NSTimer是用在主队列中的。 比如你在玩某个游戏,每一秒中要刷新游戏分数,就可以使用NSTimer。 使用如下方法来创建一个Timer,方法定义: 下面是使用的例子: 要关闭这个timer的时候只需要调用原创 2015-07-26 21:31:14 · 1279 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记46 Persistence持久化
本话将介绍IOS中的四种数据持久化方式: Archiving SQLite File System Core Data 前面我们将结果NSUsrDefaults的用法,它是针对小数据量的持久化技术,本话的四种方式是针对大数据量的操作。 1.Archiving Archiving是一种把对象存储到硬盘上的存储方式,被存储的对象不需要所有属性的目录。只要一个对象实现了Archiving的两原创 2015-10-11 21:08:53 · 2082 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记44 Popover Segue
在上一话中我们看了一个Demo,使用modal的方式,但其实如果要考虑到适配Iphone和Ipad设备的话,默认的modal会充满屏幕,而popover可以只占据屏幕上的一小块,之前我们讲过在Iphone中使用popover看起来和modal是一样的。实则不然,popover有很多设置在Iphone中也是生效的。修改上一话中的Demo。 首先为了突出效果我们把第一个场景的背景色加深,橙色好了,然后原创 2015-08-28 22:41:42 · 1548 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
之前我们接触过了segue,这是IOS中最基本的传递方式,今天来讲解一下如何进行反向的segue。 反向过渡的使用前提是发出过渡的MVC必须是由目标MVC直接或者间接正向过渡来的。反向过渡是唯一不会创造新的MVC的过渡方式,它有下面两个适用场景: 1很适合在navigationController的栈中使用进行跳转。 2关闭一个使用modal Segue生成的MVC。 和其他的seg原创 2015-07-24 00:30:33 · 1829 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记45 Embed Segues
Embed segues是嵌入过渡,把一个MVC嵌入另一个MVC中,使用起来很简单。 只需要把需要嵌入的MVC放到另一个MVC上面即可,处理该segue的方法与其他segue没有区别,但是有一点是必须注意的,在prepareForSegue的时候,嵌入的MVC的outlet是没有初始化的,所以不要访问outlet的属性。 用法如下,拖入一个Container View,样式如下: 然后拖拽原创 2015-08-29 16:15:20 · 1490 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记43 保护NSNotification的内存安全
在之前的Demo中讲解过NSNotification的用法,NSNotification是使用NSOperationQueue实现的,所以使用NSNotification不可避免地会陷入内存问题,比如下面这个情况:在storyboard中准备两个场景。在第一个场景中显示一个label,旁边有一个按钮我们可以点击这个按钮modal segue到另外一个场景中,在其中放置一个textField输入新的n原创 2015-08-28 12:11:14 · 1568 阅读 · 2 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记42 Modal Segue(模态过渡)
modal segue会占据整个屏幕,所以使用的使用一定要小心,提前做好返回的处理,使用modal segue的好处是在执行某项操作前必须,比如我们熟悉的alert和actionsheet。 比如手机中的联系人页面,点击右上角的加号会出现一个添加联系人的页面,整个页面的划出方式就是modalsegue。通常modalsegue中的取消按钮会取消当前的操作,而确定按钮会提交当前的操作。注意modal原创 2015-08-27 15:50:04 · 1475 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记37 TableView Delegate
上一话介绍了tableView的datasource,本话来介绍另一个重要的部分delegate。 当我们点击一个cell的时候,如何跳转到另外一个mvc中呢? 像增加其他segue一样,点击cell按住control键,右键连线到另一个mvc上,然后松手,选择需要的segue类型。 如果你的cell上还有其他按钮,比如detail disclosure,你也可以选择它的segue:原创 2015-07-19 22:21:56 · 1432 阅读 · 2 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记36 TableViewDatasource
TableView是iOS开发中非常重要的内容。 TableView的作用是在一张表格中展示数据,它是UISCrollView的子类,你会看到当table中的cell条目多的时候你可以通过上下滑动屏幕来获取更多的内容。 table可以是静态的也可以是动态的(比如一个table中item的数量)。 通过datasource和delegate可以创造出非常多样化的table样式。 在展示很大原创 2015-07-19 13:05:04 · 1370 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记41 Animation动画
IOS中的动画有以下几种: 第一种是为UIView的元素添加动画。 第二种是控制器的动画,比如之前介绍的导航控制器的用法。 第三种是Core Animation,这是一个很强大的框架,但是超出了这门课程的范围。 第四种是Dynamic Animation,这种动画基于设备的物理特性,比如晃动手机、调转方向等等。 本话来讲解第一种情况: 可以诸如frame、transform、和a原创 2015-07-26 22:58:11 · 1454 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记19 为Demo添加手势
在这一话中我们将应用上一话学到的知识来为Demo添加手势识别,首先添加一个缩放的功能,其次添加一个拖动功能,使得小人的表情可以随着我们的手指改变。首先来添加一个缩放手势的识别器,我们来到FaceView的代码中,之前定义了一个属性scal用来表示表情的缩放比例,现在我需要一个非私有的方法来修改这个值: func scale(gesture:UIPinchGestureRecogni原创 2015-04-17 10:26:01 · 1602 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记17 Deledgation代理
上一话中介绍了扩展和协议的相关知识,这一话我们介绍一个很重要的概念delegation(代理),代理是协议的一个很重要的应用。我们来回顾一下代理的相关知识,它是控制器和试图通讯的关键。那么代理是如何工作的呢1.你需要创建一个代理协议,它描述了这个试图要帮别人做的事情。2.在你的视图中创建一个属性,称作代理或者有时也叫数据源,这个属性的类型就是你创建的代理协议。3.然原创 2015-04-16 15:17:21 · 1580 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记14 视图绘制Demo
这一话的任务是在视图中绘制一个小人脸,你可以控制他的嘴角弧度以表示开心后者伤心。新建一个工程,然后拖一个空的view进去,对齐蓝线然后适应尺寸,这都是我们之前讲过的内容了。然后新建一个FaceView的UIView类。然后把拖拽的视图与FaceView关联,这里有个小技巧,因为我们的视图是铺满整个屏幕的,所以你想选中view或者viewcontroller会有困难,那么按住shif原创 2015-04-15 15:06:16 · 1841 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记27 AutoLayout自动布局2
上一话中我们实现了切换密码输入的功能,这一话我们来完成登录的功能。我们创建一个Swift的类用来存储用户信息:import Foundationstruct User{ let name:String let company:String let login:String let password:String static func原创 2015-04-22 16:10:55 · 2056 阅读 · 2 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记21 深入多MVC模式、Segue过渡
上一话中我们介绍了多MVC模式并且以导航控制器为例讲解了这三个控制器管理多个MVC的工作原理。那么我们如何得到控制器所管理的MVC呢。控制器中有一个属性叫做viewControllers,它是一个UIViewController类型的数组。它里面存储的是一个系统中的所有ViewController,在分栏控制器中只会有两个控制器(Master和Detail),在导航栏控制器中会有Tab原创 2015-04-18 13:36:03 · 1765 阅读 · 2 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记23 多MVC模式Demo的实现
上一话我们对Demo的选择界面做了自动布局的相关处理,现在开始连接多个MVC的操作。首先我们需要其他工程中的文件,那么让我们打开另一个app。点击下面这个文件然后拖动我们需要的文件到新的工程目录下:注意勾选第一行,不然只是做了引用,如果你不小心删除了目标目录的话,你就找不到这些文件了,所以还是推荐做复制,这样会把文件复制到我们自己的工程目录下。那么storyboard中原创 2015-04-19 19:21:45 · 1673 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记22 多MVC模式Demo中的AutoLayout自动布局
上一话我们详细介绍了多MVC模式以及Segue过渡的时候,这一话用一个新的Demo来诠释。我们新建一个Psychologist的工程。把ViewController的名字改为PsychologistViewController。那么这个控制器是做什么用的呢?系统问你一个问题,然后你做出回答,系统会根据你的回答判断你是否开心,这样就能用上我们之前的Hppiness的项目。在视图中加入原创 2015-04-19 12:04:21 · 1565 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记4 MVC enum Tuple Dictionary
回顾一下我们上一话中的代码: @IBAction func operate(sender: UIButton) { let operation = sender.currentTitle! switch operation{ case "×": performOperation {$0 * $1}原创 2015-04-11 09:53:04 · 2937 阅读 · 12 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记26 AutoLayout自动布局1
上一话中我们讲解了viewController的生命周期。这一话来讲解一下自动布局,之前的Demo中都有涉及自动布局的知识,今天来系统讲解。之前你接触过面板上的蓝线来对齐控件,重置位置来适应系统推荐,在大纲视图中消去警告,利用尺寸检查器可以看到详细的约束等等自动布局需要大量的经验,想要掌握好它,你必须去多练多想。自动布局也可以用代码实现。那么当你旋转的时候该怎么办呢?原创 2015-04-22 09:08:01 · 3026 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记20 Multiple MVCs 多MVC模式、NavigationController导航控制器
上一话讲完了小人脸Demo,我们也了解了MVC,那么这一话我们来把Demo复杂化,看看多个MVC之间是如何协同工作的。回顾一下我们之前讲过的多个MVC的情况。IOS提供了一些控制器,它们的视图是其他MVC。这些控制器包括UITabBarController(选项卡控制器)、UISplitViewController(分栏控制器)、UINavigationController(导航栏控制原创 2015-04-18 10:08:10 · 1901 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC
继续上一话中的计算器Demo,上一话讲到类必须被初始化,类中的属性也必须被初始化,所以你不能只声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么只有声明而不需要初始化呢,这是因为它的类型依旧是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不需要再初始化它的原因。@IBOutlet weak var display: UIL原创 2015-03-31 09:53:02 · 2597 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发。首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户的顶层,分为四个层次:1.Core OS层在最下层,很多人可能不知道IOS是一个基于UNIX的操作系统,它大量借鉴了Mac os X 的内核部分,Mac OS X我们肯定不会陌生,命令行原创 2015-03-30 16:07:15 · 5604 阅读 · 5 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记5 Data Structures、Methods、Properties
在前面的几章中我们经常接触到Optional(可选型),今天来细致讲解一下可选型。在上一话中我们接触到了enum(枚举),那么有一个惊人的事实是:可选型就是一个枚举!它是一个非常简单的枚举,它是一个泛型类似于数组。就像数组的定义Array,我们给T不同的值,那么就代表不同值类型的数组,而数组的定义只有一个Array,非常的简便。可选型也是一样,看上面的例子。x是一个可选型,如果有值得话原创 2015-04-12 19:08:43 · 1763 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记6 init
这一话首先来讲写关于init的东西。首先初始化并不会经常被用到,这是因为类和结构体中的大部分属性都会通过赋值被初始化,或者有些属性是Optional的,这样即使是nil也没关系,可以在之后再给它们赋值,就好比StoryBoard中的outlet,又或者可以使用闭包来初始化,或者使用lazy来避开init,所以有很多方法来避免init,除非你确实需要一个init的时候,那么该怎么做呢?原创 2015-04-13 15:32:54 · 1321 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记10 Property List
这一话来讲一个AnyObject的应用:Property List。property list不是任何一种类型,它属于一种工具类的东西。它表面上是AnyObject,但是在后台,它是NSString、NSArray、NSDictionary、NSNumer、NSData和NSDate这六种类型中的一种,或者它们桥接到Swift中的版本。我们为什么要用property list呢,它看起原创 2015-04-14 11:04:15 · 1961 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记12 Custom Views视图绘制1
这一话来讲解一下视图的绘制和手势识别,首先介绍一下相关的结构体视图中的所有coordinate(坐标)的类型都是CGFloat,CGFloat在Swift中是结构体,在处理视图绘制和手势识别的时候我们使用的都是CGFloat,不要用我们常规的Double和Float。你可以通过使用CGFloat的初始化方法把Double或者Float类型的数据转换成CGFloat。另外一个结构体是原创 2015-04-14 18:58:56 · 1931 阅读 · 5 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记15 storyboard中的绘图 MVC模式
上一话中我们实现了对一个小人表情的绘制,但是我们需要修改代码才能实现表情的变换,而且我们也没有一个明确地模型,这很明显不符合MVC的要求,这一话中我们将要修改它已符合MVC的要求。在上一话中我们已经完成了faceView的代码,但是HappinessViewController中完全是空的,我们要修复我们的Model,但是在那之前要介绍一些storyboard中很酷的功能。打开你工程中的sto原创 2015-04-15 20:43:34 · 1698 阅读 · 0 评论 -
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记13 Drawing绘制、UIColor颜色、Fonts字体
上一话介绍了视图绘制的一些基本原理,这一话继续展开。UIBezierPath可以绘制许多有趣的图形。使用不同的构造器,比如roundedRect就是四个角被磨圆了的矩形,或者干脆是椭圆和圆。你甚至可以剪切任意的path,剪切使用addClip方法,在剪切了之后你可以针对剪切的这部分进行操作,例如你正在绘制一个卡片,这个卡片有小小的圆角效果,你可以把卡片绘制在一个矩形里面,然后把它剪切到原创 2015-04-15 10:32:19 · 1714 阅读 · 0 评论