欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IOS实训周报-1:UI编程、本地存储和网络编程

程序员文章站 2022-04-11 13:17:24
...


UI编程

UI元素是我们应用程序里可以看见的任何可视元素,其中一些元素响应用户的操作,如按钮、文本字段,有其他的丰富内容,如图像、标签等。

在应用程序中编辑UI控件主要通过界面生成器和代码两种方法。

通过使用界面生成器拖放UI控件,可以简单快速添加UI控件;而通过代码添加UI控件则需通过:添加自定义方法 addXXX 在 ViewController.m 中更新 viewDidLoad等更繁琐的过程。


常用UI控件

  • UILabel:标签用于显示静态内容,包括单独的一行或多行。

  • UIImangView:图像视图用于显示一个简单的图像序列。

  • UIButton:按钮用于处理用户操作。

  • UISwitch:开关用作禁用和启用操作。

  • UITextField:文本字段是用户界面元素,使用应用程序来获取用户输入。

  • UITextView:文本视图用于显示滚动列表的文本信息可以被选中和编辑

  • UITableView: 列表控件(表格视图)由单元格 (一般可重复使用)
    组成,用于显示垂直滚动的视图,广泛应用于App的各个界面。常用的功能有TableView创建、更新、编辑与TableViewCell样式编辑、自定义、插入、移动、重用等

使用方法与具体代码实例


IOS绘图

IOS绘图主要有以下五个框架:

  • UIKit(最常用)

  • CoreGraphics

  • CoreAnimation

  • CoreImage

  • OpenGL-ES

其中UIKit框架提供的UIView是所有视图控件的基类,绘制方式主要有:视图叠加,设置透明度/边框/背景颜色,在drawRect(由系统回调,主动调用无效)实现绘制代码等。

关于课件推荐的 UIBezierPath:UIBezierPath这个类在UIKit中, 是Core
Graphics框架关于path的一个封装,使用此类可以定义简单的形状,如常用的矩形、圆形、椭圆、弧、不规则的多边形等。

创建和使用path对象步骤:

  1. 重写View的drawRect方法

  2. 创建UIBezierPath的对象

  3. 使用方法moveToPoint: 设置初始点

  4. 根据具体要求使用UIBezierPath类方法绘图

  5. 设置UIBezierPath对象相关属性(比如lineWidth、lineJoinStyle、aPath.lineCapStyle、color)

  6. 使用stroke 或者 fill方法结束绘图

UIBezierPath教程链接


ViewController

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁。ViewController管理应用中的众多视图。

  • 展示型ViewController:主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。

  • 容器型ViewController:用于控制和显示其他ViewController,如UINavigationController, UITabbarController。它们都有一个属性:viewControllers。
    其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。

详细教程


本地存储


IOS沙盒机制

(来源与详细教程:沙盒机制整合 沙盒目录结构 文件读/写及管理 NSUserDefaults
IOS实训周报-1:UI编程、本地存储和网络编程

  • 概念:每个iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录。

  • 核心:sandbox对应用程序执行各种操作的权限限制

  • 特点:

    1. 每个应用程序的活动范围都限定在自己的沙盒里;
    2. 不能随意跨越自己的沙盒去访问别的应用程序沙盒中的内容;
    3. 在访问别人沙盒内的数据时需要访问权限。
  • 概括:

    1. 是一种安全体系的表现。
    2. 总体来说沙盒就是一种独立、安全、封闭的空间。
    3. 非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

    * APP之间不能相互通,唯独可以通过URL Scheme可以通信


文件目录获取及读写管理

获取各种文件目录路径

 	// 获取沙盒主目录路径
	NSString *homeDir = NSHomeDirectory();
	
	// 获取Documents目录路径
	NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
	
	// 获取Library的目录路径
	NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
	
	// 获取Caches目录路径
	NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
	
	// 获取tmp目录路径
	NSString *tmpDir =  NSTemporaryDirectory();

文件读写方法(以字符串为例):

    // 字符串写入沙盒
    // 在Documents下面创建一个文本路径,假设文本名称为objc.txt
    NSString *txtPath = [docPath stringByAppendingPathComponent:@"objc.txt"]; // 此时仅存在路径,文件并没有真实存在
    NSString *string = @"Objective-C";
    
    // 字符串写入时执行的方法
    [string writeToFile:txtPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"txtPath is %@", txtPath); 
    
    // 字符串读取的方法
    NSString *resultStr = [NSString stringWithContentsOfFile:txtPath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"resultStr is %@", resultStr);

文件管理器可以对文件进行操作(创建、删除、改名等)以及文件信息的获取

  • 创建文件夹
	// 创建文件管理对象
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    
    // 创建文件夹
    [fileManager createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil]; 
    NSLog(@"%@", dirPath);

  • 创建文件
    // 创建一个文件路径
    NSString *filePath = [docPath stringByAppendingPathComponent:@"objc.txt"]; 
    
    // 创建文件首先需要一个文件管理对象
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    
    // 创建文件
    [fileManager createFileAtPath:filePath contents:[@"Objective-C" dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
    NSLog(@"%@",filePath); 
    
    // 获取某个文件或者某个文件夹的大小
    NSDictionary *dic = [fileManager attributesOfItemAtPath:filePath error:nil];
    NSLog(@"%@", dic);
    NSNumber *number = [dic objectForKey:NSFileSize];
    NSInteger size = number.intValue; 
    NSLog(@"%@", number);

  • 文件移动
	// 创建文件管理器对象,进行文件移动操作
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    // 移动文件
    [fileManager moveItemAtPath:path toPath:desPath error:nil]; // 移动文件的核心代码


NSUserDefaults

NSUserDefaults是iOS系统提供的一个单例类(iOS提供了若干个单例类),通过类方法standardUserDefaults可以获取NSUserDefaults单例。

	NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSUserDefaults单例以key-value的形式存储了一系列偏好设置,key是名称,value是相应的数据。存/取数据时可以使用方法objectForKey:和setObject:forKey:来把对象存储到相应的plist文件中,或者读取。


网络编程

重要概念:

  • 客户端(Client):移动应用(iOS、android等应用)。

  • 服务器(Server):为客户端提供服务、提供数据、提供资源的机器。

  • 请求(Request):客户端向服务器索取数据的一种行为。

  • 响应(Response):服务器对客户端的请求做出的反应,一般指返回数据给客户端。

IOS实训周报-1:UI编程、本地存储和网络编程


HTTP基础

HTTP协议是在网络开发中最常用的协议,一次HTTP操作称为一个事务,其工作过程可分为四步:

  1. 客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。

  2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

  3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

  4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

HTTP协议


NSURLSession

苹果官方提供的网络请求API有两种: NSURLConnectionNSURLSession

  • NSURLSession 是在iOS 7发布时用于替代NSURLConncetion的

  • iOS 9之后,苹果放弃更新NSURLConnection

  • 推荐使用NSURLSession

使用NSURLSession发送 GET 请求的方法:

  1. 确定请求路径(一般由公司的后台开发人员以接口文档的方式提供),GET请求参数直接跟在URL后面;
  2. 创建请求对象(默认包含了请求头和请求方法【GET】),此步骤可以省略;
  3. 创建会话对象(NSURLSession);
  4. 根据会话对象创建请求任务(NSURLSessionDataTask);
  5. 执行Task;
  6. 当得到服务器返回的响应后,解析数据(XML|JSON|HTTP)。

使用NSURLSession发送 POST 请求的方法:

  1. 确定请求路径(一般由公司的后台开发人员以接口文档的方式提供);
  2. 创建可变的请求对象(因为需要修改),此步骤不可以省略;
  3. 修改请求方法为POST;
  4. 设置请求体,把参数转换为二进制数据并设置请求体;
  5. 创建会话对象(NSURLSession);
  6. 根据会话对象创建请求任务(NSURLSessionDataTask);
  7. 执行Task;
  8. 当得到服务器返回的响应后,解析数据(XML|JSON|HTTP)。

Demo:

	//NSURLSession
-(void)demo2{
    //访问百度首页 
    //1. 创建一个网络请求
    NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; 
    //2.创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    //3.获得会话对象
    NSURLSession *session=[NSURLSession sharedSession]; 
    //4.根据会话对象创建一个Task(发送请求)
     第一个参数:请求对象
     第二个参数:completionHandler回调(请求完成【成功|失败】的回调)
     data:响应体信息(期望的数据)
     response:响应头信息,主要是对服务器端的描述
     error:错误信息,如果请求失败,则error有值
     */
    NSURLSessionDataTask *dataTask=[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            //response : 响应:服务器的响应
            //data:二进制数据:服务器返回的数据。(就是我们想要的内容)
            //error:链接错误的信息
            NSLog(@"网络响应:response:%@",response); 
            //根据返回的二进制数据,生成字符串!NSUTF8StringEncoding:编码方式
            NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
            //在客户端直接打开一个网页!
            //客户端服务器:UIWebView
            //将浏览器加载到view上
            dispatch_async(dispatch_get_main_queue(), ^{ 
            //实例化一个客户端浏览器
            UIWebView *web = [[UIWebView alloc]initWithFrame:self.view.bounds]; 
            //加载html字符串:baseURL:基准的地址:相对路径/绝对路径
            [web loadHTMLString:html baseURL:nil];
            [self.view addSubview:web]; 
            }); 
            //        //在本地保存百度首页
            //        [data writeToFile:@"/Users/Liu/Desktop/baidu.html" atomically:YES]; 
        }
    ]; 
    //5.执行任务
    [dataTask resume];
}


AFNetworking

AFNetworking:轻量级网络请求开源框架,封装了原生的方法,使用前需要导入AFN框架。

  • GET请求

  • POST请求

  • Download请求

  • Upload请求

  • 网络状态检测

(参考文章:IOS网络请求 AFN框架

相关标签: IOS应用开发相关