第二天 回顾

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字眼,通常需要传递文件的全路径作为参数

时间: 2025-01-01 08:37:41

第二天 回顾的相关文章

java学习第二天 回顾运算符

一.回顾运算符: 补充: 三元运算符. 代码: /* 三目运算符: 三元运算符: 结构: 条件?条件成立的结果 :条件不成立的结果 ; */ class Demo1 { public static void main(String[] args) { int a = 10; int b = 9; int c =  b++>=a ? a++ : b+a; System.out.println(a);  //10 System.out.println(b);  //10 System.out.pri

(二)、Struts第二天

(二).Struts第二天 回顾: 问题: 1. Struts2的Action类是单例还是多例? Filter? Servlet? Listener? 2. 介绍struts2框架引入的相关jar包及作用? 3. Struts2 配置文件中,名称空间作用? 4. Struts2 执行流程 目标: 0. Action类的几种写法 1. Struts核心配置 * 常量配置 * 通配符/动态方法调用 * 全局视图.全局异常.Action配置各项的默认值 2. 拦截器 1. Action类的几种写法 1

面试题:hibernate 第二天

## Hibernate第二天 ## ### 回顾与反馈 ### Hibernate第一天 1)一种思想 : ORM OM(数据库表与实体类之间的映射) RM 2)一个项目 : CRM 客户关系管理系统 客户公司表 3)一个框架 : Hibernate 简化JDBC 面向对象的数据库操作 注意问题 : Hibernate简化了操作 但是牺牲了SQL的执行性能 线程问题 数据库连接放到线程 程序世界 程序运行期间 进程(一个软件运行期间驻留在内存中的一个程序) 与 进程接收到执行任务的时候 它就会

Javascript基础篇小结

Javascript基础篇小结 字数9973 阅读3975 评论7 喜欢28 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript操作DOM的本质是=获取+触发+改变 目的:就是用来操作内存中的DOM节点 修改D

32、mybatis

第一章回顾jdbc开发 1)优点:简单易学,上手快,非常灵活构建SQL,效率高 2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等) 开发者既要写业务逻辑,又要写对象的创建和销毁,必须管底层具体数据库的语法 (例如:分页). 3)适合于超大批量数据的操作,速度快 第二章回顾hibernate单表开发 1)优点:不用写SQL,完全以面向对象的方式设计和访问,不用管底层具体数据库的语法,(例如:分页)便于理解. 2)缺点:处理复杂业务时,灵活度差, 复杂的HQL难写难理解

30、springmvc

第一章回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章回顾struts2+Spring开发 1)需求:学生注册[add.jsp->StudentAction.java->addOK.jsp] 2)struts2框架有如下特点: 每次请求action时,都创建action实例 action类一成不变的直接或间接继续ActionSupport类 action类中的业务控

javascript笔记基础总结篇

Created at 2016-09-24 Updated at 2016-10-02 CategoryFront-End TagJavascript 转载请声明出处博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析 HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript 操作 

Traking-Learning-Detection TLD经典论文部分翻译

摘要 本文研究视频流中未知目标的长期跟踪问题.在第一帧,通过选定位置和大小定义跟踪目标.在接下来的每一帧中,跟踪任务是确定目标的位置和大小或者说明目标不存在.我们提出了一种新颖的跟踪框架(TLD),明确地将长期跟踪任务分解为跟踪.学习和检测.跟踪器完成目标在图像帧间地跟踪.检测器集中到当前为止所有到已经观测到的外观,并在必要时纠正跟踪器.学习阶段估计检测器的误差并更新,避免将来的误差.我们研究怎样识别检测器的误差,并从误差中学习.开发了一种新颖的学习方法(P-N学习),通过一对"专家"

目标跟踪文章翻译--基于主动特征选择的鲁棒目标跟踪

摘要:基于检测的自适应跟踪已经被广泛研究了且前景很好.这些追踪器的关键理念是如何训练一个在线有识别力的分类器,这个分类器可以把一个对象从局部背景中分离出来.利用从检测目标位置附近的当前帧中提取的正样本和负样本不断更新分类器.然而,如果检测不准确,样本可能提取的不太准确,从而导致视觉漂移.最近,基于跟踪的多实例学习(MIL)已经在某些程度上提出了一些解决这些问题的办法.它将样本放入正负包中,然后通过最大化似然函数用在线提升的办法选择一些特征.最后,被选择的特征相结合用于分类.然而,在MIL追踪里,