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