UI学习笔记---第五天
target...action设计模式 代理设计模式 手势识别器
target...action设计模式
耦合是衡量一个程序写的好坏的标准之一,耦合是衡量模块与模块之间关联程度的指标
"高内聚,低耦合"是面向对象编程的核心思想
方法参数一般都是对象本身
delegate实际模式
当⼀个类的某些功能需要被别⼈来实现,但是既不明确是些什么功能,又不明确谁来实现这些功能的时候,委托模式就可以派上用场。
目的是为了降低类之间的耦合性
如何用delegate实现解耦
delegate 也是用来解耦的,它不再简简单单让目标去执行一个动作了
而是delegate去处理一些列事件,就像UITextFieldDelegate一样,能检测将要开始编辑.return按钮点击等
使用场景:控件有些列时间点,控制器可以实现这个代理方法,以便在适当的时机做适当的事
delegate是实现一些列事件
UIImageView
UIImageView是iOS中用于显示图片的类,iOS中几乎所有看到的图片都是这个类来显示的
使用initWithImage:方法,创建UIImageView对象
使用initWithContentOfFile:方法,创建一个UIImage对象
手势识别器
手势识别器是对触摸事件做了封装,我们⽆需⾃己去判断某个手势是否触发,手势识别器本⾝身起到了识别作用,我们把重心放在识别之后要做什么操作上面。
⼿势识别器是iOS中⽐比较抽象的⼀个类,⽤于识别⼀个手势,所谓⼿ 势:有规律的触摸。
手势识别器有七个类分别是轻拍手势,平移手势,轻扫手势,缩放手势,旋转手势,长按手势以及屏幕边界平移手势
一旦指定的手势被识别,我们可以执行我们自己定义好的操作

如何使用识别器
我们不会直接使⽤⼿势识别器这个抽象父类,⽽是根据需要使用特定的手势识别器创建对象。
1、创建UIxxxGestureRecognizer对象,使用initWithTarget:action:⽅法;
2、配置要识别的⼿势的相关信息;
3、将⼿势添加到某个视图上;
4、实现手势识别器⾥里定义的方法
view的transform属性
transform是view的一个重要属性,它在矩阵层面上改变view的显示状态.能实现view的缩放.旋转.平移等功能
控制器中一部分手势代码
//单击
//- (void)changeColor:(UITapGestureRecognizer *)tap
//
//{
// self.view.backgroundColor = [UIColor randomColor];
// NSLog(@"哈哈哈哈");
//}
- (void)changeColor:(UISwipeGestureRecognizer *)swipe {
self.view.backgroundColor = [UIColor randomColor];
NSLog(@"hello!!!!!");
}
//平移
- (void)pan:(UIPanGestureRecognizer *)pan
{
CGPoint p = [pan translationInView:pan.view];
NSLog(@"__________________%@",NSStringFromCGPoint(p));
pan.view.transform = CGAffineTransformMakeTranslation(p.x, p.y);
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
} - (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
//对于target..action这种设计模式,action中方法的参数始终是当前对象(tap)
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)];
tap.numberOfTapsRequired = ;
//手势通常是与视图绑定的,用于识别这个视图上是否出现过指定的手势,如果出现过,会触发target的action事件
[self.view addGestureRecognizer:tap];
[tap release];
//左右轻扫
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)];
swipe.direction = UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft
; [self.view addGestureRecognizer:swipe];
[swipe release];
//上下轻扫
UISwipeGestureRecognizer *swipe1 = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)];
swipe1.direction = UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown
; [self.view addGestureRecognizer:swipe1];
[swipe1 release]; //平移
// UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
// [self.view addGestureRecognizer:pan];
// [pan release];
单击改变颜色,双击移动位置
//单击改变颜色实现方法
- (void)single:(TouchView *)touchview
{
CGFloat red = arc4random()%/255.0;
CGFloat green = arc4random()%/255.0;
CGFloat blue = arc4random() %/255.0;
self.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:];
}
//双击移动位置实现方法
- (void)doubletap:(TouchView *)touchview
{
//视图宽度
NSInteger width = self.frame.size.width;
//视图高度
NSInteger height = self.frame.size.height;
//移动后的x坐标
CGFloat x = arc4random() % (-width)+width/;
//移动后的y坐标
CGFloat y = arc4random() % ( -height)+height/;
self.center = CGPointMake(x, y);
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{ NSInteger tapcount = [[touches anyObject] tapCount];
if (tapcount ==) {
[self performSelector:@selector(single:) withObject:nil afterDelay:0.3];//延迟执行
}
if (tapcount == ) {
//点击为2时取消单击触发的事件
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(single:) object:nil];
[self doubletap:nil]; } }
UI学习笔记---第五天的更多相关文章
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
- Django学习笔记(五)—— 表单
疯狂的暑假学习之 Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path ...
- VSTO学习笔记(五)批量编辑Excel 2010 x64
原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助. ...
- python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
- Python学习笔记(五)
Python学习笔记(五): 文件操作 另一种文件打开方式-with 作业-三级菜单高大上版 1. 知识点 能调用方法的一定是对象 涉及文件的三个过程:打开-操作-关闭 python3中一个汉字就是一 ...
- QML学习笔记(五)— 做一个简单的待做事项列表
做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...
- .NET MVC 学习笔记(五)— Data Validation
.NET MVC 学习笔记(五)—— Data Validation 在实际应用中,我们需要对数据进行增查改删业务,在添加和修改过程中,无论你编写什么样的网页程序,都需要对用户的数据进行验证,以确数据 ...
- python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...
随机推荐
- 表单form的属性,单行文本框、密码框、单选多选按钮
基础表单结构: <body> <h1> <hr /> <form action="" name="myFrom" en ...
- 第二章 XHTML基础
1.一个网页,也就是一个XHTML文档,是由元素组成.元素定义了文本和图形在XHTML文档中的结构.XHTML文档的扩展名通常是.html或者htm. 2.XHTML元素使用XHTML标记定义,每个标 ...
- uva -- 10766
一开始我感觉是模板题 是不想写的 后来发现我的模板上没有 就敲了一遍 可以忽略这句屁话 在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少 ...
- jquery 字数限制
$("#TextArea1").keydown(function(){ 10 var curLength=$("#TextArea1").val().lengt ...
- 判断数据库内容,在页面显示自定义数据case when
判断数据库内容,在页面显示自定义数据 case when...then ...else...end 比如:数据库内容是这样: 通过sql语句判断,数据库的name字段,内容是月桂的,显示嫦娥,其他的显 ...
- 使用ASP.Net WebAPI构建REST服务(六)——Self-Host
Asp.Net WebAPI生成的是一个程序集,并不是独立的进程,因此,要运行的时候必须将其承载在相应的宿主上,一般比较常见的是IIS承载.很多时候,我们为了简化部署或者功能集成,需要将其承载到独立的 ...
- MySql插入记录时判断
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录. 这样的逻辑固然可以通过两条sql语句完成. SE ...
- Deep Learning In NLP 神经网络与词向量
0. 词向量是什么 自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化. NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representati ...
- struts中的数据校验
1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...
- 戴文的Linux内核专题:08内核配置(5)
转自Linux中国 Linux内核拥有许多可以配置的特性,接下来我们还有许多要配置. 下一个可以配置的特性是x86的随机数生成器(x86 architectural random number gen ...