仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1816|回复: 14
打印 上一主题 下一主题

[学习教程] IOS教程之从零入手下手学Swift计时器App开辟仓酷云

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有一些像NSCopying的接口(经@李禹龙提醒应该叫协议)不是特别用到开始不用了解NSObject创建对象的时候用+(id)alloc方法创建后需要init方法初始化本教程将从零入手下手教人人利用Swift来开辟一款iOS计时器App。
这款App的灵感来自于我家厨房的百利达计时器,平常我次要用它来把持烹调的工夫和理论番茄事情法。

<br>
它的操纵很复杂:


  • 点击复位能够对工夫清零;
  • 点击秒、1分、3分、5分能够不休增添倒计不时间;
  • 点击入手下手/中断来启动或中断倒计时;
经由过程此教程,你将进修:


  • 怎样利用Xcode
  • 怎样天真使用Swift中的语法来办理实践成绩;
  • 怎样利用基础的UI控件UIButton、UILabel来创立界面,利用NSTimer来触发准时事务,和利用UILocalNotification来完成当地提示。
项目源代码

项目托管在GitHub上,请参考这里。
创立项目

起首,翻开Xcode,新建一个项目,Xcode将提醒选择一个工程模板。因为我们将从零入手下手进修,请在左边窗口选则iOS/Application,右边窗口选择EmptyApplication,点击Next,然后在ProductName项填进SwiftCounter,Language注重选择Swift,再点击Next,选择项目保留的路径,最初点击Create便可完成项目创立。
项目新建完成后,我们能够看到工程中已主动天生了AppDelegate.swift文件。
使用代办署理类(AppDelegate)

AppDelegate类中界说了app进进分歧性命周期(包含app启动动、闲置、进进背景、进进前台、激活、完整加入)时的回调办法。实践上在app启动时,app会主动实行一个叫main的出口函数,它经由过程挪用UIApplicationMain函数来创立出AppDelegate类实例,并托付实在现app在分歧性命周期的定制举动。
屏幕(Screen)、窗口(Window)和视图(View)

在app启动完成的回调办法application:didFinishLaunchingWithOptions中,起首创立一个UIWindow对象。在此,我先复杂先容一下iOS开辟中基础UI元素:


<br>


  • UIScreen代表一块物理屏幕;
  • UIWindow代表一个窗口,在iPhone上每一个app一样平常只要一个窗口,而在Mac上一个app常常有多个窗口;
  • UIView代表窗口里某一块矩形显现地区,用来展现用户界面和呼应用户操纵;
  • UILabel和UIButton,承继自UIView的特定UI控件,完成了特定的款式和举动。
持续看application:didFinishLaunchingWithOptions中的默许完成:
  1. self.window=UIWindow(frame:UIScreen.mainScreen().bounds)self.window!.backgroundColor=UIColor.whiteColor()self.window!.makeKeyAndVisible()
复制代码
起首,它经由过程猎取主屏幕的尺寸,创立了一个跟屏幕一样巨细的窗口;然后将其背景致为红色;并挪用makeKeyAndVisible()办法将此窗口显现在屏幕上。
视图把持器(ViewController)

在iOS开辟中,次要利用ViewController来办理与之联系关系的View、呼应界面反正屏变更和和谐处置事件的逻辑。每一个ViewController都有一个view对象,定制的UI对象都将增加到此view上。
为了给计时器创立页面并完成功效,我们必要新建一个视图把持器,定名为CounterViewController:点击文件,新建文件,范例选择Swift,然后输出类名CounterViewController,断定。
我们先为其增加基本的布局代码:
  1. importUIKitclassCounterViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()}}
复制代码
个中重载的办法viewDidLoad十分主要,它在把持器对应的view装载进内存后挪用,次要用来创立和初始化UI。
在先容怎样定制计时器UI之前,我们必要先将CounterViewController的view跟app中独一的窗口Window联系关系起来。完成此操纵只需在application:didFinishLaunchingWithOptions中加一行代码:
  1. self.window!.rootViewController=CounterViewController()
复制代码
如许CounterViewController的view会主动增加到Window上,用户启动app后间接看到的将是CounterViewController中view的内容。
创立计时器UI界面

在Xcode中创立UI的办法有良多种,包含利用Nib或Storyboard文件的可视化体例,和利用纯代码的体例。因为代码创立UI是可视化创立UI的基本,本篇教程只先容利用代码创立UI的体例。
先看一下我们终极的UI最终效果:

<br>


  • 在view上方,我们将界说一个标签UILabel来显现残剩工夫;
  • 在view下方,我们界说了一排橘黄色的按钮UIButton,承受用户点击操纵;
  • 在view最下方,我们界说了启动/中断按钮和复位按钮,承受用户点击操纵。
为了能保留和援用这些UI控件,我们要为它们创立属性:
  1. ///UIControlsvartimeLabel:UILabel?//显现残剩工夫vartimeButtons:UIButton[]?//设置工夫的按钮数组varstartStopButton:UIButton?//启动/中断按钮varclearButton:UIButton?//复位按钮
复制代码
注重,一切的UI变量范例前面都带了?号,暗示它们是Optional范例,其变量值能够为nil。Optional范例实践上是一个列举enum,内里包括None和Some两品种型。nil实际上是Optional.None,非nil是Option.Some,它经由过程Some(T)来包装(wrap)原始值,具体注释请参考Swift之?和!。
Swift中非Optional范例(任何不带?号的范例)必需经由过程设置默许值或在机关函数init中完成初始化。后面有提到,ViewController中的UI控件次要是在viewDidLoad办法中举行创立和初始化的,以是我们必需将UI控件设置为Optional范例。
其次,思索到工夫按钮的款式和功效基础不异,并且今后大概会增添或删减相似按钮,我们利用一个数组timeButtons来保留一切的工夫按钮。同时,由于每一个按钮的显现题目跟点击后增添的工夫分歧,我们还必要界说一个数组timeButtonInfos来保留分歧按钮的信息:
  1. lettimeButtonInfos=[("1分",60),("3分",180),("5分",300),("秒",1)]
复制代码
timeButtonInfos在初始化以后不会再有改动,以是我们利用let将其界说为常量。它是一个数组,个中每一个元素是一个元组(tuple),包括了对应按钮的题目和点击后增添的秒数。
因为UI创立的代码对照多,全体写到viewDidLoad中会很乱。以是接上去,我们界说了3个办法,分离用来完成3部分UI控件的创立:


  • 创立倒计时残剩工夫的标签
  1. ///UIHelpersfuncsetupTimeLabel(){timeLabel=UILabel()timeLabel!.textColor=UIColor.whiteColor()timeLabel!.font=UIFont(name:nil,size:80)timeLabel!.backgroundColor=UIColor.blackColor()timeLabel!.textAlignment=NSTextAlignment.Centerself.view.addSubview(timeLabel)}
复制代码
这个办法起首利用默许机关函数UILabel()创立了一个UILabel实例并赋值给timeLabel属性。然后将timeLabel文本色彩设置为红色、字体设置为80号巨细的默许字体、背景致设为玄色,标签中的文本设置为居中对齐。详细UILabel的利用办法,请参考UILabel。
必要注重的是,在赋值时,每一个timeLabel后都带上了一个!号,这是由于timeLabel实践上是Optional范例,它像一个黑盒子一样包装了(wrap)原始值,以是在利用它的原始值时必需先用!操纵符来拆包(unwrap),具体注释请参考Swift之?和!。
最初,我们将timeLabel增加到了把持器对应的view上。


  • 创立一组工夫按钮
  1. funcsetuptimeButtons(){varbuttons:UIButton[]=[]for(index,(title,_))inenumerate(timeButtonInfos){letbutton:UIButton=UIButton()button.tag=index//保留按钮的indexbutton.setTitle("(title)",forState:UIControlState.Normal)button.backgroundColor=UIColor.orangeColor()button.setTitleColor(UIColor.whiteColor(),forState:UIControlState.Normal)button.setTitleColor(UIColor.blackColor(),forState:UIControlState.Highlighted)button.addTarget(self,action:"timeButtonTapped:",forControlEvents:UIControlEvents.TouchUpInside)buttons+=buttonself.view.addSubview(button)}timeButtons=buttons}
复制代码
起首我们创立了一个空数组,用光降时保留天生的按钮。接上去,思索到在timeButtons中指定地位index的button对应的是timeButtonInfos中不异地位的信息,我们必要取得这个index。
经由过程利用enumerate全局函数我们能够为timeButtonInfos创立一个包括index和数组中元素(也是元组)的元组(index,(title,_))。因为临时用不到timeButtonInfos中元组的第二个参数(点击增添的工夫),我们利用_替换定名,暗示不天生对应的变量。
接着在每次轮回入手下手,我们创立了一个UIButton实例。每一个承继自UIView的类(包含UIButton)都承继了属性tag,它次要用一个整数来标志某个view。此处,我们将按钮信息地点的index赋值给button.tag,用来标志button对应的信息所处的地位。
接着我们设置了按钮的题目、背景致、分歧点击形态下的题目色彩等,详细UIButton的利用办法请参考UIButton。
除显现感化,按钮还能够呼应用户的点击操纵。我们经由过程addTarget:action:forControlEvents:办法给button增加了能够呼应按下按钮并抬起操纵的回调办法:timeButtonTapped:。
最初我们将这个一时按钮到场buttons数组,并将此按钮增加到视图上。
当一切按钮创立终了,我们将这个一时按钮数组赋值给timeButtons,以便利往后援用。


  • 创立2个操纵按钮
  1. funcsetupActionButtons(){//createstart/stopbuttonstartStopButton=UIButton()startStopButton!.backgroundColor=UIColor.redColor()startStopButton!.setTitleColor(UIColor.whiteColor(),forState:UIControlState.Normal)startStopButton!.setTitleColor(UIColor.blackColor(),forState:UIControlState.Highlighted)startStopButton!.setTitle("启动/中断",forState:UIControlState.Normal)startStopButton!.addTarget(self,action:"startStopButtonTapped:",forControlEvents:UIControlEvents.TouchUpInside)self.view.addSubview(startStopButton)clearButton=UIButton()clearButton!.backgroundColor=UIColor.redColor()clearButton!.setTitleColor(UIColor.whiteColor(),forState:UIControlState.Normal)clearButton!.setTitleColor(UIColor.blackColor(),forState:UIControlState.Highlighted)clearButton!.setTitle("复位",forState:UIControlState.Normal)clearButton!.addTarget(self,action:"clearButtonTapped:",forControlEvents:UIControlEvents.TouchUpInside)self.view.addSubview(clearButton)}
复制代码
下面办法平分别为startStopButton设置了点击后的回调办法startStopButtonTapped:;为clearButton设置了点击后的回调办法clearButtonTapped:。
接着,我们复杂界说了这几个所需的按钮按下回调办法:
  1. ///Actions&CallbacksfuncstartStopButtonTapped(sender:UIButton){}funcclearButtonTapped(sender:UIButton){}functimeButtonTapped(sender:UIButton){}funcupdateTimer(timer:NSTimer){}
复制代码
然后在CounterViewController的viewDidLoad办法中,我们经由过程挪用下面界说好的UI创立办法来创立主页面:
  1. ///OverridesoverridefuncviewDidLoad(){super.viewDidLoad()self.view.backgroundColor=UIColor.whiteColor()setupTimeLabel()setuptimeButtons()setupActionButtons()}
复制代码
在Xcode中利用快速键CMD+R运转app,发明料想中的界面并没有呈现,这是由于我们还没有设置每一个UI控件的地位和巨细。
实践上,一切承继自UIView的UI控件类都可使用init:frame:机关函数来创立指定地位、巨细的UI控件。
假如你的app只撑持一种偏向的屏幕(好比说竖屏),如许做是没成绩的;但假如你的app必要同时撑持竖屏和横屏,那末最好重载ViewController中的viewWillLayoutSubviews办法。这个办法会在ViewController中的视图view巨细改动时主动挪用(反正屏切换会改动视图把持器中view的巨细),也供应了最好的机会来设置UI控件的地位和巨细。
以是我们在CounterViewController中重载此办法,并为每一个UI控件设置了符合的地位和巨细:
  1. importUIKitclassCounterViewController:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()}}0
复制代码
<p>在iOS设备中,视图坐标系是以左上角(0,0)为原点,利用CGRect布局体来暗示一个矩形地位,利用CGRectMake
除了在程序加载的时候把我的view加载到他上目前我还没用到过其他的苹果一直很推崇MVC的程序结构视图模型控制器简单说就是视图负责显示内容模型负责所有数据的保存结构或者一些其他数据操作控制器是用来协调视图和模型举车的发动机系统的例子
变相怪杰 该用户已被删除
沙发
发表于 2015-1-21 07:17:14 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
兰色精灵 该用户已被删除
板凳
发表于 2015-1-24 11:32:45 | 只看该作者
看《iPhone 4与iPad开发基础教程》,跟着一步步来
再现理想 该用户已被删除
地板
发表于 2015-1-24 12:04:41 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
5#
发表于 2015-2-1 09:58:09 | 只看该作者
培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
山那边是海 该用户已被删除
6#
发表于 2015-2-2 11:42:54 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
小魔女 该用户已被删除
7#
发表于 2015-2-5 23:40:44 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
若相依 该用户已被删除
8#
发表于 2015-2-8 08:29:35 | 只看该作者
在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。
第二个灵魂 该用户已被删除
9#
发表于 2015-2-25 03:17:14 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
愤怒的大鸟 该用户已被删除
10#
发表于 2015-3-1 02:41:10 | 只看该作者
down下code4app网站的每个分类的代码挨着看
金色的骷髅 该用户已被删除
11#
 楼主| 发表于 2015-3-7 12:31:24 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
小女巫 该用户已被删除
12#
发表于 2015-3-9 12:47:28 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
若天明 该用户已被删除
13#
发表于 2015-3-13 01:17:12 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
乐观 该用户已被删除
14#
发表于 2015-3-20 09:03:48 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
再见西城 该用户已被删除
15#
发表于 2015-4-10 04:43:13 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 21:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表