您的位置:首页 > 移动开发 > Objective-C

user interface

2015-10-27 14:58 519 查看

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

类扩展 (私有扩展)<
4000
/p>
@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.在委托方调代理实现方法时先判断代理有没有实现这个方法



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ui objective-c