UI入门指引

  1. iOS学习路线:

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

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

iOS基础: 

UIKit框架:基础视图:UIButton,UILabel,UITextField,UIImageView,UIScrollView等;

高级视图:UITableView,UIPickerView,
IB的下相当

自定义视图;

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

触摸事件

手势

键盘处理

MVC模式、代理设计模式

通知机制

iOS高级:

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

多线程编程:GCD, NSOperationQueue,
NSThread

网络:NSURLConnection,AFNetworking,
CFNetworking

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

系统服务:推送、iCloud、内购、广告、蓝牙、打电话、发少信、通讯录,邮件

真机调试,发布

香技术:二维码、加密、支付、XMPP即时通讯

2.iOS付出一般要如何内容

2018正版葡京赌侠诗 1

开发人员开发了应用程序后,需要拿以及流传App
Store(苹果的利用商店),苹果对后显得在店中,用户从App
Store中下载APP

  1. UI

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

得这么懂,在iOS程序中,看得见的组成部分即是UI。类似于我们Mac机器的键盘、显示器、触摸板等

2018正版葡京赌侠诗 2

 

以便利开发者开发出强劲的功能,苹果提供了各式各样的框架

UIKit – 创建和管理应用程序的用户界面

QuartzCore -提供动画特效和经硬件进行渲染的力

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

CoreLocation -用GPS和WIFI获取位置信息

MapKit -为应用程序提供内嵌地图的接口

AVFoundation – 音频处理

 

  1. UIKit框架

UIKit框架中提供了众可视化的零部件元素,我们运用UIKit框架提供的各种零件对象成成美丽的UI界面

2018正版葡京赌侠诗 3

 

2018正版葡京赌侠诗 4

内需提醒大家没必要一次性全部控制所有控件的运用,也从来不必要掌握有控件的富有用法。iOS控件的用法都是形似的,先控最关键、最常用之控件,其他控件用时重学

 

  1. 浅析界面中之控件

2018正版葡京赌侠诗 5 

 

  1. 第一个iOS程序

2018正版葡京赌侠诗 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 {

    

}

//
当应用上后台时调用,可以于拖欠法中保存用户数量,释放占用的资源,作废时钟,保存足够的主次状态以便利用还启时能够还原至手上状态。需要小心的凡当用户退时,会调用这个主意,而无是applicationWillTerminate:方法

– (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 iPhone设备的尺寸

普通屏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的原点却是随意的(相对于父视图中之坐标位置)。

 

2018正版葡京赌侠诗 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)); 

 

2018正版葡京赌侠诗 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后,单击这个按钮,就会触发UIControlEventTouchUpInside事件,系统接受该事件后,就见面付出当前目标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对象

Timer可以等一定之时空间隔,然后被目标对象发送一修指定的音讯。如创建一个钟对象,给window发送一久信息,告诉window在指定间隔后更新。

NSTimer和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的切近扩展中上加一个NSTimer成员变量

@interface ViewController (){

    NSTimer *_timer;        // 声明一个分子变量

}

@end

(3).
在viewDidLoad方法被,创建一个按钮,创建一个签,初始化NSTimer成员变量

– (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:UIControlStateNormal];

    [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;

}

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

2018正版葡京赌侠诗 9

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注