UI入门指导

  1. iOS学习路线:

C语言:数据类型、流程控制、函数、指针、字符串、结构体、枚举、预处理;

OC:面向对象、内存管理、分类、协议、Block、KVC/KVO、Foundation框架;

iOS基础: 

UIKit框架:基础视图:UIButton,UILabel,UIText菲尔德,UIImageView,UIScrollView等;

高级视图:UITableView,UIPickerView,
IB的行使等

自定义视图;

控制器: UINavigationController,
UITabBarController, 自定义视图控制器

触摸事件

手势

键盘处理

MVC方式、代理设计情势

公告机制

iOS高级:

数据存取:plist, 归档,SQLite等

多线程编程:GCD, NSOperationQueue,
NSThread

网络:NSURLConnection,AFNetworking,
CFNetworking

多媒体:音频、视频、相机、相册、流媒体

系统服务:推送、iCloud、内购、广告、蓝牙( Bluetooth® )、打电话、发短信、通信录,邮件

真机调试,发表

看好技术:二维码、加密、支付、XMPP即时通信

2.iOS支付一般必要哪些内容

图片 1

开发人士开发完应用程序后,必要把施用上传来App
Store(苹果的使用商店),苹果审核后出示在集团中,用户从App
Store中下载APP

  1. UI

    User
    Interface用户接口,用户通过UI和次序交互,提交请求,显示界面和结果。

可以那样敞亮,在iOS程序中,看得见的有些就是UI。类似于我们Mac机器的键盘、显示屏、触摸板等

图片 2

 

为了方便开发者开发出强劲的作用,苹果提供了丰盛多彩的框架

UI基特 – 创制和管理应用程序的用户界面

QuartzCore -提供动画特效以及由此硬件举行渲染的力量

CoreGraphics -提供2D绘制的基于C的API

CoreLocation -使用GPS和WIFI获取地方音讯

Map基特 -为应用程序提供内嵌地图的接口

AVFoundation – 音频处理

 

  1. UIKit框架

UIKit框架中提供了广大可视化的零件元素,我们运用UIKit框架提供的各类零件对象组合成赏心悦目的UI界面

图片 3

 

图片 4

亟需提示大家没需求一遍性全体左右所有控件的施用,也没必要了解某个控件的富有用法。iOS控件的用法都是一般的,先明白最关键、最常用的控件,其余控件用时再学

 

  1. 浅析界面中的控件

图片 5 

 

  1. 第一个iOS程序

图片 6

6.1 开发步骤

搭建UI界面,1个按钮,2个文本框,3个标签

监听按钮的点击事件

取得2个文本框的值,将最后结果突显出来

 

6.2 创制工程落到实处

 

7.  Xcode布局

7.1  菜单栏

7.2 工具栏:启动、停止,
显示与潜伏边栏

7.3 导航区(Cmd+0):

Project
Navigator(Cmd+1),管理当前工程的文本

Symbol
Navigator,管理当前工程的类、属性和艺术

Find Navigator,搜索

Issue Navigator, 问题导航

Test Navigator, 测试导航

Debug Navigator,
调试导航,会来得内存、CPU的挤占情形

BreakPoint
Navigator,显示所有断点,能够连忙跳转到断点

Report Navigator, 
日志导航,会显示当前项目的运转、调试等消息

 

7.4 编辑区

首要操作区域

7.5 实用工具区

7.5.1 对象相关属性区

当选某个对象后,在该区域彰显当前目标的连带属性

7.5.2 库区

文本模板库,代码片段库,对象库和媒体库

7.6 调试区

一般分为变量区和决定台八个区域

 

  1. 从main函数到AppDelegate

    Supporting Files
    中有main函数,在main函数中,仅仅是调用了UIApplicationMain函数.

    UIApplicationMain
    前五个参数为main函数的参数(可以通过edit
    Schema,设置main的参数);

其多少个参数指定当前应用程序的类名,假诺为nil,当前项目会创设一个UIApplication类的目的,也足以传递一个UIApplication子类,当前main函数就是基于第八个参数创设应用程序;一个UIApplication对象就代表一个应用程序;一个iOS程序启动后创建的第二个目的就是UIApplication对象;UIApplication对象是一个单例对象,可以通过[UIApplication
sharedApplication]来得到当前应用程序;UIApplication的一个第一办事就是拍卖用户事件,它会是一个种类,对用户的操作逐个处理;UIApplication还维护一个在眼前应用中开拓的Window列表;UIApplication一般会被予以一个代理对象(第4个参数),以拍卖应用程序生命周期事件,如程序的开行、关闭、进入后台、进入前台等。

第七个参数为眼前应用程序的代理类,main函数依照当前代理类成立一个delegate对象,并将该delegate对象赋值给UIApplication对象的delegate属性。该代理类是一个遵守UIApplicationDelegate
应用程序代理协议的类,当使用暴发一些系统级的风云时就会打招呼代理进行拍卖。如当来电或锁屏时会导致APP进入后台或终止,在APP受到类似烦扰时,会时有暴发局地系统事件,那时UIApplication会公告它的delegate对象,让代理来拍卖这么些系统事件。

  // 当应用程序启动已毕后系统会活动调用

  • (BOOL)application:(UIApplication
    *)application didFinishLaunchingWithOptions:(NSDictionary
    *)launchOptions {

    // Override point for customization after application launch.

    return YES;

}

    //
当来电话或短信,或者用户退出应用程序时,应用从活动状态转入非活动状态时调用,在该格局中间断正在实施的天职,使时钟无效,或暂停游戏

– (void)applicationWillResignActive:(UIApplication *)application {

    

}

//
当应用进入后台时调用,可以在该措施中保留用户数据,释放占用的资源,作废时钟,保存丰裕的次序状态以便利用重启时可以还原到眼前情况。需求小心的是当用户退出时,会调用这些办法,而不是application威·尔(W·ill)Terminate:方法

– (void)applicationDidEnterBackground:(UIApplication *)application {

 

}

    //
当应用从后台即将成为前台时调用,一般在该格局中恢复生机使用进入后台时保留的气象

– (void)applicationWillEnterForeground:(UIApplication *)application {

 

}

    //
当应用变为活动状态时调用,在该方法中启动在不活动状态中暂停的天职,倘使利用往日早已进去后台,可能要求刷新用户界面

– (void)applicationDidBecomeActive:(UIApplication *)application {

   

}

    //
当停止应用程序时调用该方式,若是适龄可以保存数据,若是程序已经进来后台后,该办法不会再被调用。可以安装Info.plist文件,修改Application
does not run in background属性设置为Yes后,程序将不再进入后台运行

– (void)applicationWillTerminate:(UIApplication *)application {

 

}

    //
可选方法,当系统内存紧张时,尝试释放当前利用的片段内存,要是内存还欠缺,应用则截止

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application{

    

}

 

9.主次的启航进程

在main函数中调用UIApplicationMain函数;

创建UIApplication对象,创建UIApplication的delegate对象;

开启一个轩然大波循环(Main
Runloop)监听系统级的事件;

只要没有storyboard故事板,程序启动完成后就会调用AppDelegate中的-
(BOOL)application:  didFinishLaunchingWithOptions:
方法,在该措施中开创UIWindow对象,成立和设置UIWindow的rootViewController根视图控制器,显示窗口;参考代码:

self.window = [[UIWindow
alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

    ViewController *vc = [[ViewController alloc]init];

    self.window.rootViewController = vc;

    

    [self.window makeKeyAndVisible];

 

假设有storyboard故事板的话,会依据Info.plist得到Main.storyboard,加载该故事板,创造UIWindow,设置UIWindow的rootViewController根视图控制器,突显窗口。

 

10 工程文件

AppDelegate.h和AppDelegate.m文件,应用的代办文件;

ViewController.h和ViewController.m文件,视图控制器,首要在视图控制器中编辑逻辑代码;

Main.storyboard故事板,默许程序的启动界面,可以在该视图中添加控件,默许处境下,该视图的控制器为ViewController;默认启动Main.storyboard故事板,可以在Info.plist文件中另行设置主故事板的称谓。在Main.storyboard中的View
Controller(视图控制器)的左边有一个箭头,表示该控制器是Initial View
Controller。

Assets.xcassets是一个图纸文件夹,用来储存项目图片,红色文件夹表示真实存在的文书夹,藏青色文件夹表示逻辑文件夹,便于在当前项目中管理相应的公文,不是动真格的存在的;

LaunchScreen.storyboard,是程序启动成功前的一个加载界面;

Info.plist是现阶段项目的相关新闻;

Supporting
Files逻辑文件夹,main函数在该文件夹中;

Products文件夹,保存生成的app

 

11 创造空工程

利用也可以不从Main.storyboard启动。可以去除掉Main.storyboard故事板,选中工程,在General选项卡中找到Main
Interface列表框,删除Main。

开拓AppDelegate.m文件,在文书顶部导入头文件

#import “ViewController.h”,

修改- (BOOL)application:(UIApplication
*)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {

    // Override point for customization after application launch.

    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen
mainScreen] bounds]];

    ViewController *vc = [[ViewController alloc]init];

    self.window.rootViewController = vc;

    

    [self.window makeKeyAndVisible];

return YES;

}

 

  1. 安装控件的习性

12.1 直接在Attributes
Inspector面板中安装

12.2在代码中装置

设置字体:lbl.font = [UIFont
boldSystemFontOfSize:24];

    NSLog(@”%@”, [UIFont familyNames]);在控制巴尔的摩输出协理的有所字体

设置文本颜色:    lbl.textColor =
[UIColor redColor];

设置文本的对齐格局:    lbl.textAlignment
= NSTextAlignmentRight;

字体自适应标签的增幅:    lbl.adjustsFontSizeToFitWidth = YES;
必要注意的是无法自适应中度

UILabel的换行,先安装最多显示的行数:   
lbl.numberOfLines = 3;

假设文字不够,实际上是几行就是几行;如若行高不够,能彰显几行就是几行;固然行数设置为0,表示不曾行数限制。

    然后安装换行中断情势:lbl.lineBreakMode = NSLineBreakByWordWrapping;

急需注意的是,在新本子的iOS中,ByWordWrapping、ByCharWrapping和ByClipping效果可能是如出一辙的,突显不完全时,截断后边的字符;

设置tag标记,是一个正整数:    lbl.tag =
123;可以由此tag标记快捷访问控件如:  (UILabel *)  [self.view
viewWithTag:123],

设置阴影的水彩和摇头:    lbl.shadowColor
= [UIColor yellowColor];

    lbl.shadowOffset = CGSizeMake(2, 2);

设置透明度: lbl.alpha = 0.8;

 

13 现有iOS设备的坐标系

13.1 黑莓设备的大大小小

普通屏1点==1像素,Retina屏,1点==2像素,6+
,1点==3像素

4s:
3.5寸, 320*480点, 640*960像素

5s: 4寸,
320*568点,
640*1136像素

6 : 4.7寸,
375*667点,
750*1334像素

6+:
5.5寸, 414*736点,
1242*2208像素,苹果会自动缩放到1080*2208像素

在准备APP所须要的图形时,须要预备三张相同的图,如:test.png(100*100)、test@2x.png(200*200)、test@3x.png(300*300),系统会依照当前设备自动选用相应的图形

 

13.2 frame和bounds

(1). frame 与 bounds的区别

-(CGRect)frame{

return CGRectMake(self.frame.origin.x, self.frame.origin.y,
self.frame.size.width, self.frame.size.height);

}

-(CGRect)bounds{

    return CGRectMake(0,0,
self.frame.size.width,self.frame.size.height);

}

bounds的原点是(0,0)点(就是view本身的坐标连串,默许永远都是0,0点),而frame的原点却是任意的(相对于父视图中的坐标地方)。

 

图片 7

 

        frame:
该view在父view坐标种类中的地点和分寸。(参照点是父view的坐标连串)

       
bounds:该view在当地坐标体系中的地点和尺寸。(参照点是地面坐标种类,就约等于ViewB自己的坐标系列,以0,0点为源点)

       
center:该view的中坚点在父view坐标连串中的地点和分寸。(参照电是父视图的坐标系列)

种种view都有一个地面坐标连串。这一个坐标种类作用相比主要,比如触摸的回调函数中的UITouch里面的>坐标值都是参照这些当地坐标种类的坐标。当然bounds那个特性也是参照那些地点坐标种类来的。其实当地坐标种类的基本点就是要精晓的它的原点(0,0)在什么样地方(这几个地点又是相对于上层的view的当地坐标连串而言的,当然最上面的一层view就是
window它的地面坐标连串原点就是显示屏的左上角了)。通过改动view的bounds属性可以修改本地坐标种类的原点地点。

 

例:

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 250)];  

 

[view1 setBounds:CGRectMake(-20, -20, 280, 250)];  

//设置了bounds后,view1左上角的坐标相当于原点的任务是-20,-20

view1.backgroundColor = [UIColor redColor];  

[self.view addSubview:view1];//添加到self.view  

NSLog(@”view1 frame:%@========view1 bounds:%@”,NSStringFromCGRect(view1.frame),NSStringFromCGRect(view1.bounds));  

 

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];  

view2.backgroundColor = [UIColor yellowColor];  

[view1 addSubview:view2];//添加到view1上,[那时候view1坐标系左上角源点为(-20,-20)]  

NSLog(@”view2 frame:%@========view2 bounds:%@”,NSStringFromCGRect(view2.frame),NSStringFromCGRect(view2.bounds)); 

 

图片 8

 

13.3 给控件重新安装大小及职分

CGRect newFrame = CGRectMake(100, 200,
200, 50);

    lbl.frame = newFrame;

无法那样一贯设置

lbl.frame.origin.x = 200; //error

  

  1. UIButton

按钮,可以对利用的点击作出响应。继承自UIControl,直接接轨自UIView。

14.1
通过鼠标从目的库中把按钮拖曳到视图中

 

14.2 通过代码添加

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(100,
100, 100, 40)];

    btn.backgroundColor = [UIColor cyanColor];

    [btn setTitle:@”button” forState:UIControlStateNormal];

    [btn setTitleColor:[UIColor redColor]
forState:UIControlStateNormal];

    [self.view addSubview:btn];

上边代码已毕了设置背景观、设置标题、设置标题颜色.

那儿用到一个情状,按钮常用
的情事包含常规情形、高亮状态、选中状态和剥夺状态。若是没有设置高亮状态的题目,缺省和正规情状标题一样。

设置按钮的当选状态:btn.selected =
YES;

设置禁用状态:btn.enabled = NO;

设置字体:    btn.titleLabel.font =
[UIFont boldSystemFontOfSize:28];

设置图片:[btn setImage:[UIImage
imageNamed:@”navigationbar_arrow_up”]
forState:UIControlStateNormal];
假设图片较小,默认情形下图片在左侧,文字在左侧。

设置按钮的背景图片:[btn
setBackgroundImage:[UIImage imageNamed:@”navigationbar_arrow_up”]
forState:UIControlStateNormal];

 

14.3 系统默许样式按钮

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];

    btn.frame = CGRectMake(100, 100, 200, 200);

    btn.backgroundColor = [UIColor redColor];

    btn.center = CGPointMake(100, 100);

近期不胜枚举种类样式按钮已经失效,不提出选拔系统button

 

14.4 添加事件

14.4.1
在故事板中,通过鼠标拖曳添加动作

14.4.2 通过代码添加

    [btn addTarget:self
action:@selector(buttonClicked )
forControlEvents:UIControlEventTouchUpInside];

首先个参数是接到事件的目标;第四个参数是收取到事件后需求进行的动作;第二个参数是收纳什么项目标风云。当运行APP后,单击那些按钮,就会触发UIControl伊芙ntTouchUpInside事件,系统接受该事件后,就会付出当前目的self(ViewController视图控制器)响应这几个事件,然后会跳转到buttonClicked方法中实践。

 

在ViewDidLoad方法的下边添加一个措施:

-(void)buttonClicked{

    self.view.backgroundColor = [UIColor lightGrayColor];

}

 

14.4.3 带参数的事件响应程序

(1). 添加动作时,可以指定参数,一般是眼下按钮本身

 

(2).
在丰富事变时,可以在响应音讯后添加一个冒号,如:

[btn addTarget:self action:@selector(buttonClicked: )
forControlEvents:UIControlEventTouchUpInside];

相应的响应措施修改为:

– (void)buttonClicked:(UIButton *)button{

    self.view.backgroundColor = [UIColor lightGrayColor];

    // 在措施中得以由此button来拜会当前响应事件的按钮

    [button setTitle:@”被点了” forState:UIControlStateNormal];

}

 

  1. 时钟NSTimer

15.1 创建NSTimer对象

提姆er可以等待一定的岁月间隔,然后给目的对象发送一条指定的新闻。如成立一个时钟对象,给window发送一条音信,告诉window在指定间隔后更新。

NS提姆(Tim)er和run
loops运行循环一起干活。

 

    /**

     *  创建一个时钟对象,该目的会立即参与到运行循环中

     *  

     *  第二个参数是时间距离

     *  第一个参数响应对象

     *  第多少个参数是响应措施

     *  首个参数是传递用户新闻

     *  第多少个参数是还是不是允许每隔指定的岁月间隔就发送四回音信

     *

     *  @return 重返一个时钟对象

     */

NSTimer _timer = [NSTimer
scheduledTimerWithTimeInterval:0.1 target:self
selector:@selector(moveLabel) userInfo:nil repeats:YES];

 

也足以先创立时钟,再手动把时钟添加到运行循环中,如:

NSTimer  _timer = [NSTimer
timerWithTimeInterval:0.1 target:self selector:@selector(moveLabel)
userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop] addTimer:_timer
forMode:NSRunLoopCommonModes];

 

15.2 实例

(1).
创制一个SingleView Application

(2). 
在ViewController的类扩充中添加一个NS提姆(Tim)er成员变量

@interface ViewController (){

    NSTimer *_timer;        // 声雅培(Abbott)个成员变量

}

@end

(3).
在viewDidLoad方法中,创造一个按钮,成立一个标签,开首化NS提姆(Tim)er成员变量

– (void)viewDidLoad {

    [super viewDidLoad];

    // 创造一个按钮

    [self createButton];

    // 成立一个标签

    [self createLabel];

    // _timer成员变量初阶化

    _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self
selector:@selector(moveLabel) userInfo:nil repeats:YES];

}

(4).
编写代码创造一个按钮

– (void)createButton{

    UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(50,
50, 200, 30)];

    btn.backgroundColor = [UIColor redColor];

    [btn setTitle: @”点自己起步或终止” forState:UIControlState诺玛(Norma)l];

    [btn addTarget:self action: @selector(startOrStop)
forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn];

}

编写代码,完善点击按钮的响应程序

– (void)startOrStop{

    static BOOL isRunning = YES;

    if (isRunning ) {

        [_timer setFireDate:[NSDate distantFuture]];

        isRunning = NO;

    }else{

        [_timer setFireDate:[NSDate distantPast]];

        isRunning = YES;

    }

}

(5).
创造一个标签

– (void)createLabel{

    UILabel *lbl = [[UILabel alloc]initWithFrame:CGRectMake(0, 0,
50, 30)];

    lbl.backgroundColor = [UIColor redColor];

    lbl.textColor = [UIColor blueColor];

    lbl.text = @”我是标签”;

    lbl.tag = 123;

    [self.view addSubview:lbl];

    

}

(6).
编写代码,完善定时器的响应措施

– (void)moveLabel{

    static int xOffset = 5, yOffset = 5 ;

    

    UILabel *lbl = (UILabel *) [self.view viewWithTag:123];

    

    CGRect frame = lbl.frame;

    frame.origin.x += xOffset;

    frame.origin.y += yOffset;

    

    CGFloat width = self.view.bounds.size.width;

    CGFloat height = self.view.bounds.size.height;

    

    if (frame.origin.x >= width || frame.origin.x < 0) {

        xOffset *= -1;

    }

    if (frame.origin.y >= height || frame.origin.y < 0 ) {

        yOffset *= -1;

    }

    

    lbl.frame = frame;

}

【注】实践是查验真理的唯一标准!最好应用纯代码敲一次

图片 9