首页 > 代码库 > 第二天 回顾

第二天 回顾

1. IBAction的参数

========================================

- (IBAction)left:(UIButton *)button

 

1> 在OC中,绝大多数的控件监听方法的第一个参数就是控件本身

2> 默认连线时的参数类型是id

3> 如果要在监听方法中,方便控件的使用,可以在连线时或者连线后,修改监听方法的参数类型

 

2. 修改对象的结构体成员

========================================

在OC中,不允许直接修改“对象”的“结构体属性”的“成员”,但是允许修改“对象”的“结构体属性”

 

修改结构体属性的成员方法如下:

 

1> 使用临时变量记录对象的结构体属性

2> 修改临时变量的属性

3> 将临时变量重新设置给对象的结构体属性

 

3. 在程序开发中需要避免出现魔法数字(Magic Number)

========================================

使用枚举类型,可以避免在程序中出现魔法数字

 

1> 枚举类型实质上就是一个整数,其作用就是用来替代魔法数字

2> 枚举类型中,指定了第一个整数之后,后面的数字会递增

 

4. frame & bounds & center

========================================

1> frame可以修改对象的位置和尺寸

2> bounds可以修改对象的尺寸

3> center可以修改对象的位置

 

5. 首尾式动画

========================================

// beginAnimations表示此后的代码要“参与到”动画中

[UIView beginAnimations:nil context:nil];

// setAnimationDuration用来指定动画持续时间

[UIView setAnimationDuration:2.0];

 

self.headImageView.bounds = rect;

......

 

// commitAnimations,将beginAnimation之后的所有动画提交并生成动画

[UIView commitAnimations];

 

6. transform属性

========================================

在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度

 

常用的创建transform结构体方法分两大类

 

1> 创建“基于控件初始位置”的形变

CGAffineTransformMakeTranslation

CGAffineTransformMakeScale

CGAffineTransformMakeRotation

 

2> 创建“基于transform参数”的形变(是一个累加的效果)

CGAffineTransformTranslate

CGAffineTransformScale

CGAffineTransformRotate

 

补充:

在OC中,所有跟角度相关的数值,都是弧度值,180° = M_PI

正数表示顺时针旋转

负数表示逆时针旋转

 

提示:由于transform属性可以基于控件的上一次的状态进行叠加形变,例如,先旋转再平移

因此在实际动画开发中,当涉及位置、尺寸形变效果时,大多修改控件的transform属性,

而不是frame、bounds、center

 

7. 使用代码创建控件

========================================

在OC开发中,Storyboard中的所有操作都可以通过代码实现,程序员一定要熟练掌握代码布局界面的能力!

 

使用代码创建控件的步骤如下:

 

1> 使用控件对应类创建对象

2> 设置对象属性:frame\color\text\image\backgroundImage……

3> [self.view addSubview:btn];将控件添加到视图

 

设置控件监听方法的示例代码如下:

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

 

提示:

1> addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方法

2> 监听方法的第一个参数就是对象本身

3> 监听方法的第二个参数是监听控件的事件

 

8. viewDidLoad

========================================

viewDidLoad是视图加载完成后调用的方法,通常在此方法中执行视图控制器的初始化工作

 

在viewDidLoad方法中,一定不要忘记调用父类的方法实现!

[super viewDidLoad];

 


1. 界面分析

========================================

1> 需要读取或修改属性的控件需要设置属性

// 序号标签

// 图片

// 图片描述

// 左边按钮

// 右边按钮

2> 需要监听响应事件的对象,需要添加监听方法

// 左边按钮

// 右边按钮

 

2. 手码懒加载创建控件的步骤

========================================

1> 定义控件属性,注意:属性必须是strong的,示例代码如下:

@property (nonatomic, strong) UIImageView *icon;

2> 在属性的getter方法中实现懒加载,示例代码如下:

- (UIImageView *)icon

{

    if (!_icon) {

        // 计算位置参数

        CGFloat imageW = 200;

        CGFloat imageX = (320 - imageW) / 2;

        CGFloat imageH = 200;

        CGFloat imageY = 80;

        // 实例化图像视图

        _icon = [[UIImageView alloc] initWithFrame:CGRectMake(imageX, imageY, imageW, imageH)];

        // 将图像视图添加到主视图

        [self.view addSubview:_icon];

    }

    return _icon;

}

 

使用懒加载的好处:

1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

2> 每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

 

3. 使用Plist文件

========================================

使用Plist文件的目的:将数据与代码分离

 

加载方法:

NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"];

_imageList = [NSArray arrayWithContentsOfFile:path];

 

提示:通常在方法中出现File字眼,通常需要传递文件的全路径作为参数

 

第二天 回顾