使用手势处理器处理用户触碰手势的编程步骤如下:
1.根据程序要处理的手势创建对应的手势处理器对象,创建的手势处理器时需要指定target和action参数--当该控件上发生触碰手势后,该target对象的action方法将会被激发。
2.如果该UI控件不允许用户交互,则将该UI空间的userInterfactionEnabled属性设置为YES;如果希望该控件可支持多点触碰,还需要将multipleTouchEnabled设置YES.
3.调用UI控件的addGestureRecognizer:方法添加该手势处理器
UITapGestureRecognizer提供了如下两个属性:
1.numberOfTapsRequired:指定该手势处理器只处理几次触碰事件
2.numberOfTouchesRequired:指定该手势处理器只处理几个手指的触碰事件
例子:
1.创建一个带有xib的Single View Application
2.在xib中先后拖入UILabel和UIView两个控件,如下图所示:
3.接着在项目自动生成的ViewController.h文件中加入如下代码:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
UILabel
UIView
}
@property(nonatomic, retain) IBOutlet UILabel *showPoint;
@property(nonatomic, retain) IBOutlet UIView *gv;
@end
再在ViewController.m文件中加上两个属性的synthesize
4.再回到xib中,先单击拖进去的UIView,然后选择属性栏的inspector栏目,接着在这个栏目中得Referencing Outlets下面点选圆形按钮,按住command键,然后拖动鼠标到File's Owner,这时会弹出两个属性的名称,选择gv即可,如下图所示:
这一步完成之后,再选择UILabel,执行与上图相同的步骤,只是拖动到File's Owner后选择的属性为showPoint。
5.在ViewController.m文件中加入如下代码:
@implementation
@synthesize
@synthesize gv;
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
// self.gv.layer.borderWidth = 2;
// self.gv.layer.cornerRadius = 6;
//设置gv空间支持用户交互
self.gv.userInteractionEnabled = YES;
//设置gv空间支持多点触碰
self.gv.multipleTouchEnabled = YES;
for(int i = 1; i < 6; i++) {
//创建手势处理器,指定使用该控制器的handleTap:方法处理手势
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
//设置该点击手势处理器只处理i次连击事件
numberOfTapsRequired
//设置该点击手势处理器只处理两个手指的触碰事件
gesture.numberOfTouchesRequired = 2;
//为gv空间添加手势处理
self.gv addGestureRecognizer:gesture];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//实现手势处理器的方法,该方法应该声明一个形参
//当该方法被激发时,手势处理器会作为参数传给该方法的参数
-(void) handleTap:(UITapGestureRecognizer
{
NSLog(@"start....");
NSInteger touchNum = gesture.numberOfTouches;
NSUInteger tapNum = gesture.numberOfTapsRequired;
self.showPoint.text = [NSString stringWithFormat:@"用户使用%d个手指进行触碰,触碰次数为:%d",touchNum,tapNum];
//指定2秒后清除label的文本
[self.showPoint performSelector:@selector(setText:) withObject:@"" afterDelay:2];
}
@end