监听并捕获到长久按住屏幕的手势动作
创建一个UILongPressGestureRecognizer的实例对象,并把这个对象绑定在你的视图控制器里面。
numberOfTapsRequired 这个属性保存了用户的点击次数,当这个手势动作触发之前,并没有一个手势是在屏幕上的,当第一次把手指点击在屏幕上,然后拿开,这个动作可以称为一次点击事件。
numberOfTouchesRequired 这个属性保存了多少个手指点击了屏幕,因此你要确保你每次的点击手指数目是一样的,默认值为0;
minimumPressDuration 这个参数表示两次点击之间的时间长度。
allowableMovement:100 连续点击100次
@property(nonatomic,strong)UILongPressGestureRecognizer *longPressGestureRecognizer;
@property(nonatomic,strong)UIButton *dummyButton;
@synthesize longPressGestureRecognizer,dummyButton;
- (void)viewDidLoad
{
[superviewDidLoad];
self.view.backgroundColor = [UIColorwhiteColor];
dummyButton = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
dummyButton.frame =CGRectMake(0.0f,0.0f, 72.0f,37.0f);
dummyButton.center =self.view.center;
[self.viewaddSubview:dummyButton];
longPressGestureRecognizer = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(handleLongPressGestures:)];
longPressGestureRecognizer.numberOfTouchesRequired =2;
longPressGestureRecognizer.allowableMovement =100.0f;
longPressGestureRecognizer.minimumPressDuration =1.0;
[self.viewaddGestureRecognizer:longPressGestureRecognizer];
}
-(void)handleLongPressGestures:(UILongPressGestureRecognizer *)paramSender{
if([paramSenderisEqual:longPressGestureRecognizer]){
if(paramSender.numberOfTouchesRequired ==2){
CGPoint touchPoint1 = [paramSender locationOfTouch:0 inView:paramSender.view];
CGPoint touchPoint2 = [paramSender locationOfTouch:1 inView:paramSender.view];
CGFloat midPointX = (touchPoint1.x + touchPoint2.x)/2.0f;
CGFloat midPointY = (touchPoint1.y + touchPoint2.y)/2.0f;
CGPoint midPoint = CGPointMake(midPointX, midPointY);
dummyButton.center = midPoint;
}else{
NSLog(@"111");
}
}
}
监听捕获轻击的手势动作
创建一个UITapGestureRecognizer类的实例对象看,然后把他们绑定到我们的视图上。
@property(nonatomic,strong)UITapGestureRecognizer *tapGestureRecognizer;
tapGestureRecognizer = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(handleTaps:)];
tapGestureRecognizer.numberOfTouchesRequired =2;
tapGestureRecognizer.numberOfTapsRequired =3;
[self.viewaddGestureRecognizer:tapGestureRecognizer];
-(void)handleTaps:(UITapGestureRecognizer *)paramSender{
NSUInteger touchCounter = 0;
for(touchCounter = 0;touchCounter < paramSender.numberOfTouchesRequired; touchCounter++){
CGPoint touchPoint = [paramSender locationOfTouch:touchCounter inView:paramSender.view];
NSLog(@"Touch #%lu:%@",(unsignedlong)touchCounter+1,NSStringFromCGPoint(touchPoint));
}
}
NSStringFromCGPoint 把一个物理 的位置信息转换成一个NSString类型的数据。
放大和缩小的手势监听和处理
创建一个UIPinchGestureRecognizer类的实例化对象,然后把这个对象添加到你的视图中去。
@property(nonatomic,strong)UIPinchGestureRecognizer *pinchGestureRecognizer;
@property(nonatomic,strong)UILabel *myBlackLabel;
@property(nonatomic,unsafe_unretained)CGFloat currentScale;
@synthesize pinchGestureRecognizer,myBlackLabel,currentScale;
CGRect labelRect =CGRectMake(0.0f,0.0f, 200.0f,200.0f);
myBlackLabel = [[UILabelalloc]initWithFrame:labelRect];
myBlackLabel.center =self.view.center;
myBlackLabel.backgroundColor = [UIColorblackColor];
myBlackLabel.userInteractionEnabled =YES;
[self.viewaddSubview:myBlackLabel];
pinchGestureRecognizer = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(handlePinches:)];
[myBlackLabel addGestureRecognizer:pinchGestureRecognizer];
-(void)handlePinches:(UIPinchGestureRecognizer *)paramSender{
if (paramSender.state ==UIGestureRecognizerStateEnded) {
self.currentScale = paramSender.scale;
}elseif(paramSender.state ==UIGestureRecognizerStateBegan && self.currentScale != 0.0f){
paramSender.scale =self.currentScale;
}
if(paramSender.scale !=NAN && paramSender.scale !=0.0){
paramSender.view.transform =CGAffineTransformMakeScale(paramSender.scale, paramSender.scale);
}
}
手势动作状态有如下三种:
UIGestureRecognizerStateBegan
UIGestureRecognizerStateChanged
UIGestureRecognizerStateEnded