1.1 什么是iOS
iOS是由苹果公司开发的移动操作系统。苹果最早于2007年1月9日的Macworld大会上公布这个系统,原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhoneOS,所以2010WWDC大会上宣布改名为iOS。
i->我 i->intelligence (智能) i->innovation(创新) i->internet(网络 ) iCEO -> interim(临时)iOS
2007年10 iOS1.0 —— 革命的开始(iPhone Runs OS X)一个不能更换铃声和壁纸,不能运行后台程序,甚至根本没有第三方应用的手机,许多新奇的玩法,像3.5英寸480*320分辨率的大屏幕、多点触控的交互方式以及从未⻅过的简洁UI,尽管iPhone的出现起初只是为了挽救在当时急剧萎缩的iPod市场
2008年3月 iOS 2.0 ——真正的iOS,生态环境初建成
当年7月推出App Store,这是iOS历史上的一个重要里程碑,它的出现开启了iOS和整个移动应用时代。收入三七分成的制度和良好的生态环境迅速吸引了大量开发者。
2009年3月 iOS 3发布—— 再度完善
Phone OS 3.0更像是填补前两代系统的空白。例如键盘的横向模式、新邮件和短信的推送通知等,
2010年6月 iOS 4发布 ——高颜值模式
iPhone OS操作系统在这一代正式更名为iOS。乔布斯及其设计团队为界面上的图标设计了复杂的光影效果,让让界面看上去更加漂亮。除了操作系统之外,与iOS4同期的iPhone4也是前所未有的漂亮,首次引入了前后双玻璃的设计,厚度也仅有9.2mm,创下了全球最薄智能手机的记录。
2011年6月 iOS 5发布 —— 你好,siri
为苹果用户带来了一项非常重要的新功能:Siri。调戏Siri就成了iPhone 4S用户的一大乐趣。iOS5时代还有一项重大的改变:App Store终于支持人民币支付了。
2012年6月 iOS 6发布——扭曲的世界苹果采用了全新设计的地图软件,
2013年6月 iOS 7发布——扁平化只是开始
乔纳森带领的设计团队这一次彻头彻尾重新设计了iOS系统。在这个版本中还添加了中国人较为喜爱的九宫格输入法
2014年6月 iOS 8发布——更加开放的系统
苹果对旗下所有平台进行了整合,使其生态环境愈发完善。Continuity功能的加入使苹果旗下的产品联系更紧密了,利用iOS 8中新增的Continuity,可以继续在另一台iOS设备上未做完的事情了。
2015年9月 iOS 9发布——降低升级⻔槛
最令人意外的是苹果这次把iOS 9的升级⻔槛控制在与上一代的iOS8相同,支持的升级设备与iOS 8相同,也就是说连iPhone4s也可以取得升级,iPhone 4s作为历史最受欢迎的iPhone手机之一,这无疑是一个天大的好消息。为什么苹果的标志是被咬了一口,为了区别于樱桃
1.2 什么是UI
UI全程User Interface(用户接口)通过UI我们和程序进行交互,传入我们的请求,反馈运行的结果。如果仅限于iOS程序,看得⻅摸得着的都是Ui,推荐的书:《UIKit框架详解》术语:UI、APP、API
- UI: User Interface (用户界面/接口)
- App: Application (应用程序)
- API:Application Programming Interface (应用程序编程接口)1.3 使用空模板创建一个IOS工程
//空模版存放路径
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Li-brary/Xcode/Templates/Project Templates/iOS/Application
Product Name :项⺫名称
Organization Name : 组织名Organization Identifier: 组织标识Bundle Identifier : 唯一标示Language : 开发语言
Devices : 设备
XCode的上方是工具栏,有很多工具按钮。 Xcode的左侧是导航区域,包括:
项⺫导航 Command+1符号导航 Command+2搜索导航 Command+3问题导航 Command+4
在这里出现
测试导航 Command+5调试导航 Command+6断点导航 Command+7日志导航 Command+8
历史记录
CocoaTouch中常用的framework
包含项⺫所有的文件
集中了所有的工作区中定义的符号
对工作区中的所有文件执行搜索
构建项⺫过程中出现的任何错误和警告都会
测试程序导航
进入调试过程的主视图
查看设置的所有断点
保留开发人员最近的构建结果和运行日志的
iOS系统架构可以分为如下图所示的4层,CocoaTouch框架的地位不言而喻。CocoaTouch Layer(可触摸层):该框架基于iOS应用层直接调用层,如触摸事件、照相管理等,该层包含UIKit框架和Foundation框架。
Media Layer(媒体层):该层框架和服务依赖Core Services层,向CocoaTouch层提供画图和多媒体服务,如声音、图片、视频等。
Core Services Layer(核心服务层): 提供核心服务,例如字符串处理函数、集合管理、⺴络管理、URL处理工具、联系人维护、偏好设置等。
Core OS Layer(核心操作系统层):包含核心部分、文件系统、⺴络基础、安全特性、能量管理和一些设备驱动,还有一些系统级别的API。
在CocoaTouch层中很多技术都是基于Objective-C语言的。Objective-C语言为iOS提供了像集合、文件管理、⺴络操作等支持。像UIKit框架,它为应用程序提供了各种可视化组件,比如像窗口(Window)、视图(View)和按钮组件(UIButton)。Cocoa Touch层中的其他框架,对我们在应用程序中的开发来说也是非常有用的,如访问用户通信录功能框架、获取照片信息功能的框架、负责加速感应器和三维陀螺仪等硬件支持的框架。
1.4 项⺫的⺫录结构介绍
NewHelloWorldSupporting FilesFrameworksProducts
包含编写的大部分代码以及组成应用程序界面的文件包含所需要的非oc类的源代码文件和资源文件特殊的库,也包含图像和声音文件等资源
包含项⺫构件时所生成的应用程序
文件模板库(file template library)--包含一些文件模板。代码片段库(code snippet library)--包含一些代码片段。对象库(object library)--包含各种可重用对象。媒体库(media library)--包括用户所有的媒体文件。
1.5 应用程序的生命周期
//
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"1. ");
return YES;}
//
- (void)applicationWillResignActive:(UIApplication *)application {
// SMS
// 3D NSLog(@"2. ");
}
//
- (void)applicationDidEnterBackground:(UIApplication *)application{
//
// applicationWillTerminate NSLog(@"3. ");
}
//
- (void)applicationWillEnterForeground:(UIApplication*)application {
//
UIApplication * app = [UIApplication sharedApplication];
NSLog(@"4. ");}
//
- (void)applicationDidBecomeActive:(UIApplication *)application {
//
NSLog(@"5. ");}
//
- (void)applicationWillTerminate:(UIApplication *)application {
//
//info.plist -> Application does not run in background ->NO YES
NSLog(@"6. ");
}
// -(void)applicationDidReceiveMemoryWarning:(UIApplication*)application
{
// , NSLog(@"7. ");
}
main函数⻛骚的打了酱油,仅仅去调用了一个叫做UIApplicationMain的函数。UIApplicationMain函数会创建一个UIApplication的对象。每个iOS应用都有且仅有一个UIApplication对象,该对象的作用是维护一个消息循环,监听应用程序的各种事件并执行
相应地回调方法(callback method)。回调是一种常⻅的编程模式,当我们知道一件事情发生的时候要做什么,但是并不知道这件事情什么时候会发生就会用到回调的编程模式,注册一系列的回调方法,当事件发生时通过委托的对象调用这些方法。
1.main
2.UIApplicationMain
* UIApplication
* UIApplication delegate
3.delegate ( ) ( storyboard)
* , application:didFinishLaunchingWithOptions:
* application:didFinishLaunchingWithOptions: UIWindow* UIWindow rootViewController
*
1.6 UIWindow呈现的原理
// 应用程序加载完成时回调此方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.初始化窗体
_window = [[UIWindow alloc]initWithFrame:[[UIScreen
mainScreen]bounds]];//2.
_window.backgroundColor = [UIColor whiteColor];//3.
WLViewController * vc = [[WLViewController alloc]init];//4. _window.rootViewController = vc;//5.
[_window makeKeyAndVisible];return YES;
}
一个应用程序只有一个UIWindow的对象window必须得设置根视图控制器(主显示⻚面)每一个视图控制器UIViewController都自带一个UIView把某个UIViewController设置成根视图控制器则会把它自带的View添加到Window上,全屏显示
================== 控件 =================
【UILabel】UILabel是一个视图类,即UIView的子类,在iOS程序中,看的⻅,摸得着的,都是UIView的子类。UILabel是标签视图,用于显示文字信息
//UILabel常用属性
//
UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50, 20,200, 50)];
// x, y , weight, height
label.frame = CGRectMake(60, 200, 200, 400);
//
label.text = @"i'm label! i'm a beautiful label! i love myself and i am just a label!";
// tag
label.tag = 91;
//
label.font = [UIFont boldSystemFontOfSize:20];//
label.font = [UIFont fontWithName:@"Arial" size:25];//
NSArray * fonts = [UIFont familyNames];NSLog(@" :%@",fonts);
//
label.textColor = [UIColor blackColor];// label
label.textAlignment = NSTextAlignmentCenter;/*
NSTextAlignmentCenter =1 NSTextAlignmentLeft =0 NSTextAlignmentRight =2 */
// label 1 0 label.numberOfLines = 3;
// label = clear label.backgroundColor = [UIColor yellowColor];//
label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
/* ios6 7.1 UIBaselineAdjustmentAlignCenters label UIBaselineAdjustmentAlignBaseLines label UIBaselineAdjustmentNone label */
// label Xcode6.2 numberOfLines=1
//label.adjustsFontSizeToFitWidth = YES;
//
label.highlighted = YES;
//
label.highlightedTextColor = [UIColor redColor];// >0 <0 >0 <0 //label.shadowOffset = CGSizeMake(20, 20);
//
//label.shadowColor = [UIColor greenColor];
// label
// label.userInteractionEnabled = YES;// NO
// NO enabled=NO YES label.enabled = YES;
//
label.lineBreakMode = NSLineBreakByTruncatingTail;
/*
NSLineBreakByCharWrapping NSLineBreakByWordWrapping NSLineBreakByClipping NSLineBreakByTruncatingHead ...NSLineBreakByTruncatingMiddle ...NSLineBreakByTruncatingTail ...
*/
// view label label.center = self.view.center;// label view
[self.view addSubview:label];
【UIButton】
UIButton和UILabel都是UIView的子类型,UIView及其子类型都代表一个矩形区域,UILabel直接继承了UIView,而UIButton的父类UIControl继承了UIView,这有什么区别吗?答案是肯定的,UIView有一个叫做userInteractionEnabled的属性,UIView将其默认值设置为YES,但UILabel的这个属性默认是NO。换句话说,只有UIControl的子类将这个属性设置为YES,因此这些控件在默认的情况下是交互型控件,能够跟用户进行交互,比如UIButton可以接受用户点击的操作,而且UIControl的子类可以通过addTarget方法设置要处理的事件及其处理代码。
如何创建UIButton的对象
//1.
UIButton * btn1 = [[UIButton alloc]init];btn1.frame = CGRectMake(50, 50, 50, 50);
UIButton * btn2 = [[UIButton alloc]initWithFrame:CGRectMake(100, 50, 50, 50)];
UIButton * btn3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn3.frame = CGRectMake(150, 50, 50, 50); /*
UIButtonTypeCustom = 0, 自定义button type
// no
UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0), 系统 // standardsystem button
UIButtonTypeDetailDisclosure, 详情UIButtonTypeInfoLight,灰色信息
UIButtonTypeInfoDark,白色信息UIButtonTypeContactAdd,加号
UIButtonTypeRoundedRect = UIButtonTypeSystem, 圆角//Deprecated, use UIButtonTypeSystem instead
*/
//UIButton常用事件详解
//设定坐标
button.frame = CGRectMake(50, 50, 200, 200);
//设置背景色
button.backgroundColor = [UIColor redColor]; btn1.backgroundColor = [UIColor colorWithRed:COLOR green:COLOR blue:COLOR alpha:1];
//button状态1.normal正常 2. highligth高亮 3.disable禁用//4.select选择
//设置字体,跟UILabel设置是一样的
button.titleLabel.font = [UIFont systemFontOfSize:40]; btn3.titleLabel.font = [UIFont italicSystemFontOfSize:25];
//设定标题颜色
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
[btn1 setTitleColor:[UIColor colorWithRed:COLOR green:COLOR blue:COLOR alpha:1] forState:UIControlStateNormal];
//设置标题
[button setTitle:@"正常" forState:UIControlStateNormal];[button setTitle:@"高亮" forState:UIControlStateHighlighted];//设置button为禁用状态
//[button setEnabled:NO];
[button setTitle:@"禁用" forState:UIControlStateDisabled];
//设置图片
//1.设置前景图
//[button setImage:[UIImage imageNamed:@"untitled.jpg"]
forState:UIControlStateNormal];
//2.设置背景图
//[button setBackgroundImage:[UIImage
imageNamed:@"untitled.jpg"] forState:UIControlStateNormal];
//bundle包:程序和资源文件会上传到appStore
//UIImage imageNamed方法会加载图片到内存中不释放,小图片可以,大图片用其
他方法加载。//png格式的图片支持镂空,iOS应用中绝大多数素材都是PNG格式
//加载占有内存大得方法//1.找到图片在bundle中的路径
NSString * path = [[NSBundle mainBundle]
pathForResource:@"untitled" ofType:@"jpg"];//2.保存图片数据到NSData
NSData * data = [NSData dataWithContentsOfFile:path];//3.使用此图片
UIImage * image= [UIImage imageWithData:data];
//[button setImage:image forState:UIControlStateNormal];
[button setBackgroundImage:image forState:UIControlStateNormal];
//
btn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -50);//
btn.imageEdgeInsets = UIEdgeInsetsMake(0, -50, 0, 0);
//添加到父视图
[self.view addSubview:button];
//设置button禁用button.enabled = YES;//设置button选中button.selected = NO;
UIButton的taget-action机制
//Target Action :UIControlEventTouchDown按下//TouchUpInside (范围内)手指抬起一瞬间发生//TouchUpOutside (范围外)手指抬起一瞬间发生
[button addTarget:self action:@selector(buttonPress)
forControlEvents:UIControlEventTouchDown];
#pragma mark -实现button方法-(void)buttonPress{
NSLog(@"按下了");
static int i = 0;
UILabel * label = (id)[self.view viewWithTag:30];
label.text = [NSString stringWithFormat:@"button按下了%d次",i+
+];}
[mb addTarget:self action:@selector(onClicked:) forControlEvents:UIControlEventTouchUpInside];
// -(void)onClicked:(MyButton*) mb1{
}
=================================扩展=================================
1.UIApplication和UIApplicationDelegate的关系
1.UIApplication是程序的起始点,负责初始化和显示UIWindow2.负责加载应用程序的第一个UIView到UIWindow中3.帮助管理应用程序的生命周期4.截收到的事件,转给委托UIApplicationDelegate来处理,此委托可以
处理的事件包括:应用程序的生命周期、事件如程序启动和关闭、系统事件如来电等。
2.NSTimer 计时器
//创建定时器
//参数1:定时器的间隔(单位是秒)
//参数2:执行定时器的目标对象
//参数3:定时器执行的动作//参数4:是定时器的一个属性参数,一般不用,填nil即可//参数5:定时器是否重复执行,YES表示重复执行,NO表示只执行一次NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self
selector:@selector(run) userInfo:nil repeats:YES];//让定时器创建马上就停止
_timer.fireDate = [NSDate distantFuture];//启动定时器
_timer.fireDate = [NSDate distantPast];
(void)invalidate;这个是唯一一个可以将计时器从runloop中移出的方法。