performSelector:afterDelay : 相当于javascript的setinterval,就是说过多久运行该程序,方法格式如下:
cancelPreviousPerformRequestsWithTarget:取消前面所注册过performSelector方法,就是说当上面这个方法正在运行,比如我们希望10秒钟之后执行某一个方法,但是如何在没到10秒钟的情况下取消performSelector呢?就是用这个方法来实现的
实例:这个实例涉及到手势的知识,单击,界面背景变红色,双击变蓝色;然后里面运用到了performSelector和cancelPreviousPerformRequestsWithTarget,大家可以自己看一下
第一步:创建一个类(.h和.m对应的一组)
第二步:将xib的class设置为第一步创建的类
第三步:.h文件里面的内容:
第四步:.m文件里面的内容:
[self performSelector:@selector(方法名称) withObject:参数(传递给前面的方法所需傲的参数) afterDelay:秒(如果不到1秒则加f,如0.01)];
cancelPreviousPerformRequestsWithTarget:取消前面所注册过performSelector方法,就是说当上面这个方法正在运行,比如我们希望10秒钟之后执行某一个方法,但是如何在没到10秒钟的情况下取消performSelector呢?就是用这个方法来实现的
[[self class] cancelPreviousPerformRequestsWithTarget:self(请求的目标) selector:@selector(上面的performSelector所注册过的方法名称) object:nil];
实例:这个实例涉及到手势的知识,单击,界面背景变红色,双击变蓝色;然后里面运用到了performSelector和cancelPreviousPerformRequestsWithTarget,大家可以自己看一下
第一步:创建一个类(.h和.m对应的一组)
第二步:将xib的class设置为第一步创建的类
第三步:.h文件里面的内容:
#import <UIKit/UIKit.h>
@interface BIDMultiTapContoll : UIView
-(void)turnRed:(NSString *)first;
-(void)turnBlue:(NSString *)first secendAttr:(NSString *)secend;
@end
第四步:.m文件里面的内容:
#import "BIDMultiTapContoll.h"
@implementation BIDMultiTapContoll
-(void)turnRed:(NSString *)first{
self.backgroundColor=[UIColor redColor];
NSLog(@"%@",first);
}
-(void)turnBlue:(NSString *)first secendAttr:(NSString *)secend{
self.backgroundColor=[UIColor blueColor];
NSLog(@"first attr:%@",first);
NSLog(@"secend attr:%@",secend);
}
/*一般的方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=[touches anyObject];
if(touch.tapCount==1){
[self turnRed];
}
if(touch.tapCount==2){
[self turnBlue];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=[touches anyObject];
if(touch.tapCount==1){
[self turnRed];
}
if(touch.tapCount==2){
[self turnBlue];
}
}
*/
//以下涉及到延迟调用方法的问题
/*
延迟调用方法的方法:
[self performSelector:@selector(方法) withObject:参数 afterDelay:秒(如果不到1秒则加f,如0.01)];
就是说当我们点击某个事件的时候,需要等多少时间再执行该方法,第一个是方法的名称,如果withObject是nil,则直接是方法的名称,比如method,如果有参数(对应的方法为-(void)turnRed:(NSString *)first{}),则需要写成:method:,如果是多个参数,则”withObject:参数“后面的“afterDelay:秒”需要去掉,然后直接添加”withObject:参数“就可以了。
*/
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
//[touches anyObject]:调用任何一个触摸对象
//anyObject:在nsset里面的所有对象的其中一个,或者不包含任何一个对象
UITouch *touch=[touches anyObject];
if(touch.tapCount==2){
//[self class]:返回当前接收者(就是self本窗口对象)的类的类对象
//cancelPreviousPerformRequestsWithTarget:取消执行以前注册过的那一个:performSelector方法,也就是取消下面的那个:[self performSelector:@selector(turnRed) withObject:nil afterDelay:0.01f];
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(turnRed) object:nil];
}
if (touch.tapCount==1) {
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(turnBlue) object:nil];
}
}
//当第一次执行程序的时候,我们双击或单机都会首先调用这个方法
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch=[touches anyObject];
if(touch.tapCount==1){
//根据指定的时间延迟调用(或者说是注册)指定的方法
[self performSelector:@selector(turnRed:) withObject:@"first" afterDelay:0.9f];
}
if(touch.tapCount==2){
[self performSelector:@selector(turnBlue:secendAttr:) withObject:@"first" withObject:@"secend"];
}
}
@end