user interface

UI(user interface)


搭建软件界面 UI

发送网络请求 多线程

网络数据解析


UIImageView     (图片)

UILabel         (文本标签)

UIButton        (按钮)

UISwitch        (开关)      

UIProgressView  (进度条)

UITextField     (文本框)


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

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

CoreGraphics 提供2D绘制的基与CAPI

CoreLocation 使用GPSWIFI获取位置信息


加法计算器:

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;

控件所在矩形的位置尺寸(以自己左上角为坐标原点所以boundsx 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

 

contentModeUIView的属性可以调整视图里面的内容位置


字典转模型

模型:存储数据

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

MModel数据模型

VView视图(界面)

CController(控制器)


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.在委托方调代理实现方法时先判断代理有没有实现这个方法




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值