performSelector用法和cancelPreviousPerformRequestsWithTarget用法

performSelector:afterDelay : 相当于javascript的setinterval,就是说过多久运行该程序,方法格式如下:
[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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值