UI(user interface)

搭建软件界面 (UI)

发送网络请求 多线程

网络数据解析

UIImageView     (图片)

UILabel         (文本标签)

UIButton        (按钮)

UISwitch        (开关)

UIProgressView  (进度条)

UITextField     (文本框)

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

QuartzCore 提供动画特效以及通过硬件进行渲染的能力

CoreGraphics 提供2D绘制的基与C的API

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

加法计算器:

UIView

屏幕上能看见的东西都是UIView(或者继承与UIView)

每一个UIView都是一个容器能容纳其他UIView

父控件包含子控件

UIViewController

每当显示一个界面先创建UIViewController再由UIViewController创建UIView

每个UIViewController控制一个全屏的UIView

Touch up inside单击事件

IBAction

能保证方法可以连线

相当于void

用来监听一些事件

IBOutlet

能保证属性可以连线

用来改变控件的属性

Bundle identifier app的唯一标识

company identifier公司的唯一标识

退出键盘

1.第一响应者:叫出键盘的控件

[self.num2 resignFirstResponder]; //让第一响应者不当第一响应者

2.[self.view endEditing:YES];

常见报错(连线出问题了):setValues:forUndefinedKey:]:this class is not key value coding

常见报错(方法找不到):unrecognized selector sent to instance

类扩展 (私有扩展)

@interface ViewController ()

@end

UIView的常见属性:

@property(nonatomic, readonly) UIView *superview;

获得自己的父控件对象

@property(nonatomic, readonly, copy) NSArray *subview;

获得自己的所有子控件对象

@property(nonatomic) NSInteger tag;

控件的ID\标识 父控件可以通过tag来找到对应的子控件

@property(nonatomic) CGAffineTransform transform;

控件的形变属性(可以设置旋转角度 比例缩放平移等属性)

@property(nonatomic) CGRect frame;

控件所在矩形框在父控件中的位置 尺寸(以父控件的左上角为坐标原点)

@property(nonatomic) CGRect bounds;

控件所在矩形的位置尺寸(以自己左上角为坐标原点所以bounds的x y值一般为0)

@property(nonatomic) CGPoint center;

控件中点的位置(以父控件的左上角为坐标原点)

frame\center\bounds

1.frame:能修改位置和属性

2.center:能修改位置

3.bounds:能修改尺寸(x\y一般都是0)

UIButton

normal(普通状态)(默认)

对应的枚举常量:UIControlStateNormal

highlighted(高亮状态)

对应的枚举常量:UIControlStateHighlighted

disabled(失效状态不可用状态)

对应的枚举常量:UIControlStateDisabled

不允许直接修改对象的结构体属性的成员

允许直接修改对象的结构体属性

修改frame属性(origin(x,y)位置  size(width,height)尺寸)

1.取出原来的属性

2.改变临时的属性

3.用临时属性覆盖原来的属性

动画

头尾式:

[UIView beginAnimations:nil context:nil]; //开始动画

[UIView setAnimationDuration:(float)] //默认为1/4秒

[UIView commitAnimations] //提交动画

Block式:

[UIView animateWithDuration:0.5 animations:^{

}];

界面的初始化:

#pragma mark控制器的view加载完毕的时候调用

- (void)viewDidLoad

{

[super viewDidLoad];

//创建按钮

UIButton *btn = [UIButton buttonWithType:UIbuttonWithTypeCustom];

//添加按钮

[self.view addSubview:btn];

//设置frame

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

// 设置背景色

btn.backgroundColor = [UIColor blueColor];

// 设置背景图片

UIImage *image = [UIImage imageNamed:@“btn_01”]; //通过文件名加载图片(凡是PNG图片都不用加扩展名)

[btn setBackgroundImage:(UIImage *)forState:(UIControlState)];

// 监听按钮点击

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

}

- (void)up

{

NSLog(@“——”);

}

transform属性(位置尺寸 旋转角度)

- (IBAction)up{

// 取得头像按钮

UIButton *head = (UIButton *)[self.view viewWithTag:10];

// 每次向上移动100的距离

head.transform =CGAffineTransformMakeTranslation(0,-100); //在原来x y方向增加减少多少距离

head.transform =CGAffineTransformTranslate(head.transform,0,-100); //连续增加减少多少距离

}

- (IBAction)leftRotate{

// 取得头像按钮

UIButton *head = (UIButton *)[self.view viewWithTag:10];

//向左旋转45°

head.transform =CGAffineTransformMakeRotation(-M_PI_4); //在原来基础上旋转

head.transform =CGAffineTransformRotate(head.transform,-M_PI_4); //连续旋转

}

- (IBAction)big{

// 取得头像按钮

UIButton *head = (UIButton *)[self.view viewWithTag:10];

//向左旋转45°

head.transform =CGAffineTransformMakeScale(1.5,1.5); //在原来基础上缩放

head.transform =CGAffineTransformScale(head.transform,1.5,1.5); //连续缩放

}

图片浏览器(UIImageView)

序列帧动画

/**=======*/  文档注释(放在要注释的内容的上面敲代码的时候会有提示)

使用场合:

1.如果仅仅显示图片不需要监听图片的点击事件选择UIImageView

2.如果显示图片又监听图片的点击事件选择UIButton

UIButton中含有ImageView,Label

contentMode是UIView的属性可以调整视图里面的内容位置

字典转模型

模型:存储数据

copy:NSString

assign:基本数据类型

strong:一般对象

weak:UI控件

xib:描述软件界面轻量级 一般用来描述局部界面

storyboard:描述软件界面重量级 一般用来描述整个软件的所有界面

// 读取xib文件(会创建xib中的描述的所有对象并且按顺序放到数组中返回)

NSArray *objes = [[NSBundle mainBundle] loadNibNamed:@“MYxib” owner:nil options:nil];

封装:

3.使用xib封装一个自定义view的步骤

1>新建一个继承UIView的自定义view,假设类名叫做(MJAppView)

2>新建一个MJAppView.xib文件来描述MJAppView内部的结构

3>修改UIView的类型为MJAppView真是类型

4>将内部的子控件跟MJAppView进行属性连线

5> MJAppView提供一个模型属性

6>重写模型属性的set方法,因为在set方法中可以拿到外界传递的模型数据

7>把模型数据拆开,分别设置数据到对应的子控件中

8>补充:提供一个创建MJAppView的类方法,将读取xib文件的代码屏蔽起来

MVC:

M:Model数据模型

V:View视图(界面)

C:Controller(控制器)

Auto layout默认自动布局

// 删除父控件里的所有子控件

[self.answer.subViews makeObjectsPerform:@selecter(removeFormSuperView)];

Retina视网膜屏幕

所谓Retina屏幕就是高清视网膜屏幕 分辨率宽高是标准屏幕分辨率的2倍

只要文件名叫做Icon.png 就会自动被当做是应用程序的图标

一个app在启动过程中会全屏显示叫做Default.png的图片

UIScrollView

三个重要的属性:

scrollView.contentSize内容的尺寸大小     CGSize

scrollView.contentOffset内容的偏移量       CGPoint

scrollView.contentInsert内容的上下左右边距  CGRect

代理设计模式用途

监听的思想:可以让一个对象(代理)监听另一个对象(委托方)的状态

通知的思想:一个对象状态发生改变想通知另一个对象

// 停止定时器

[timer invalidate];

timer = nil; // 停止时候就把指针指向空释放定时器对象

// 开始定时器

[timer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(xxx) userInfo:nil repeats:YES];

userInteractionEnabled UIView的属性可以修改能不能与用户交互属性(包括点击事件) 父控件不能交互则它的所有子控件都不能交互

UITableView(表格视图)

dataSource 数据源

delegate  代理

cell.textLabel

cell.detailTextLabel (UITabelViewCellStyleSubtitle)

cell.imageView

cell复用机制:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

// 从缓存池中找到可以循环利用的cell

static NSString * cellID = @“cellID”;

UITableView * cell = [tableView dequeueResuableCellWithidentifier:cellID];

// 如果找不到就重新创建一个cell

if (!cell) {

cell = [[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseidentifier:cellID];

}

//设置cell的内容

cell.textLabel.text = @“”;

cell.imageView.image = [UIImageView imageNamed:@“”];

}

数据刷新:

1.修改模型数据

2.重新加载模型中的数据

全部刷新:

[tableView reloadData];

局部刷新:

NSString * path = [NSIndexPath indexPathForRow:row inSection:section];

[tableView reloadRowAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];

自定义cell

1.通过xib自定义cell

2.通过代码自定义cell

self.tableView.tableFooterView //tableView的尾部视图

self.tableView.tableHeaderView //tableView的顶部视图

如何利用xib封装View

1.新建一个xib文件描述一个view的内部结构

2.新建一个新的类(继承自某个系统自带的view 继承哪个类 取决于xib根对象的class)

3.新建类的类名最好与xib的文件名保持一致

4.将xib的控件与自定义的类连线

5.提供一个类方法快速返回一个创建好的自定义view(屏蔽从xib加载这个过程)

代理的规范:

1.协议名称:控件类名 + delegate

2.代理方法普遍都是@optional

3.把委托方当做参数加到协议方法中

4.在委托方调代理实现方法时先判断代理有没有实现这个方法

user interface相关推荐

  1. Go 学习笔记(71)— Go 接口 interface (接口定义、接口实现、接口调用、值接收者、指针接收者)

    1. 接口的定义 接口是和调用方的一种约定,它是一个高度抽象的类型,不用和具体的实现细节绑定在一起.接口要做的是定义好约定,告诉调用方自己可以做什么,但不用知道它的内部实现,这和我们见到的具体的类型如 ...

  2. Static interface methods are only supported starting with Android N (--min-api 24): void okhttp3.log

    错误内容如下 Error: Static interface methods are only supported starting with Android N (--min-api 24): vo ...

  3. Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)

    1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...

  4. Go 学习笔记(4)— Go 标识符、数据类型之间转换、布尔型、整型、浮点型、interface 类型

    1. 标识符整体分类 Go 标识符整体分类如下图所示: 2. 数据类型分类 Go 语言按类别有以下几种数据类型: 类型 描述 布尔型 布尔型的值只可以是常量 true 或者 false 数字类型 整型 ...

  5. php 类 接口的区别吗,PHP的接口类(interface)和抽象类(abstract)的区别

    /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候 ...

  6. java interface list_你了解注解内的@interface List么

    Annotation, Multi-valued annotation, nested annotation, 多值注解, 嵌套注解 今天在研究Spring MVC的Validation机制时(这里 ...

  7. TypeScript学习笔记之 接口(Interface)

    在java中,接口是用来定义一些规范,使用这些接口,就必须实现接口中的方法,而且接口中的属性必须是常量. javascript中是没有接口的概念的.所以TypeScript在编译成 JavaScrip ...

  8. 演示:思科IPS在线模式下Inline Interface Mode的响应行为(区别各个防御行为)

    演示:思科IPS在线模式下Inline Interface Mode的响应行为 演示目标:科IPS在线模式下InlineInterface Mode的响应行为. 演示环境:仍然使用图5.16所示的网络 ...

  9. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  10. interface IEngineControl封装引擎通用操作

    using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace SIAT ...

最新文章

  1. Python之Python 安装环境搭建
  2. 几个不错的java类、jar包及其依赖查找网站。。。
  3. Pyqt5_QWidget
  4. JavaScript: 对象
  5. 实施Exchange 2013中的 MailTip
  6. 《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物
  7. php网页执行流程,PHP程序的执行流程
  8. 2013年蓝桥杯软件大赛预赛java本科b组答案_2013年蓝桥杯软件大赛预赛C本科B组试题...
  9. 【考研数学】视频,你喜欢看哪位老师?
  10. 关于java前端的相关讲解
  11. 开发Windows物流管理系统——(一)前期准备
  12. QQ邮箱代收Gmail邮件,微信第一时间通知Gmail新收邮件
  13. pattern.compile java_Java Pattern compile(String)用法及代码示例
  14. 测试管理005:面对用户反馈的缺陷,测试人员能做些什么?
  15. 前沿重器[13] | 知乎query改写思路启示
  16. iOS 苹果内购 In-App Purchase 踩过的坑
  17. 栈、队列、数组的区别
  18. Echarts实战案例代码(9):图表纹理填充的解决方案(柱图为例)
  19. redis数据备份与恢复
  20. Tyvj 1047 乘积最大

热门文章

  1. c++小游戏合集(单人)
  2. java实现二叉堆,数据结构基础篇-二叉堆
  3. frps 多个_frp服务器server端是否支持多个frpc客户端?
  4. 基于DirectShow和FFmpeg的USB摄像头监控软件
  5. MySql数据库系统字符集
  6. eclipse注释模板修改时间为24小时制
  7. FT232USB串口通信线序
  8. 菜鸟教程 - Python 100例
  9. vue3 使用Element Plus <script lang=“ts“ setup>加上lang=“ts“后编译错误
  10. 蛋白质定位信号预测软件