手势分为点击手势、捏合、滑动、左右滑动、长按、旋转等手势。ide
点击手势:动画
初始化
ui
UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizeralloc] initWithTarget:self action:@selector(fingerIncident:)];
设置手指数代理
singleFingerOne.numberOfTouchesRequired = 1;
设置点击数code
singleFingerOne.numberOfTapsRequired = 1;
设置代理orm
singleFingerOne.delegate= self;
添加到所属的view事件
[self.imageView addGestureRecognizer:singleFingerOne];
当单指单击与双击同时存在时,双击时会首先触发单击手势,所以须要对双击作注册ip
[singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
同理,触发双指点击时也会有先触发单指手势的状况ci
[doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];
//手指点击事件 - (void)fingerIncident:(UITapGestureRecognizer *)sender { if(sender.numberOfTouchesRequired==1) { //单指点击事件 if(sender.numberOfTapsRequired == 1) { //单指单击 NSLog(@"单指单击"); [sender.view.layer removeAllAnimations]; } elseif(sender.numberOfTapsRequired ==2 ){ //单指双击 NSLog(@"单指双击"); } } elseif (sender.numberOfTouchesRequired==2) { //双指点击事件 if(sender.numberOfTapsRequired == 1) { //双指单击 NSLog(@"双指单击"); } elseif(sender.numberOfTapsRequired ==2 ){ //双指双击 NSLog(@"双指双击"); } } }
2.捏合手势rem
UIPinchGestureRecognizer*pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)]; //imageView添加手势识别 [self.imageView addGestureRecognizer:pinchGesture];
//手指捏事件 -(void)handlePinchGesture:(UIPinchGestureRecognizer *)sender{ NSLog(@"捏"); if([sender state] ==UIGestureRecognizerStateEnded) { lastScale =1.0; return; } CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)senderscale]); CGAffineTransform newTransform =CGAffineTransformScale(sender.view.transform, scale, scale); [sender.view setTransform:newTransform]; lastScale = [sender scale]; }
3.旋转手势
UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizeralloc]initWithTarget: self action:@selector(handleRotateGesture:)]; [self.imageView addGestureRecognizer:rotateGesture];
//手指旋转事件 -(void)handleRotateGesture:(UIRotationGestureRecognizer *)sender{ NSLog(@"旋转"); NSLog(@"sender.scale=%f",sender.rotation); NSLog(@"sender.velocity=%f",sender.velocity); sender.view.transform=CGAffineTransformRotate(sender.view.transform, sender.rotation); sender.rotation=0; }
4.拖手势
UIPanGestureRecognizer*panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)]; [self.imageView addGestureRecognizer:panGesture];
//手指拖事件 -(void)handlePanGesture:(UIPanGestureRecognizer *)sender{ NSLog(@"拖"); NSLog(@"sender=%@",sender); CGPoint translation=[(UIPanGestureRecognizer*)sendertranslationInView:self.view]; //开始 if(sender.state==UIGestureRecognizerStateBegan) { x=sender.view.center.x; y=sender.view.center.y; } //进行中 if(sender.state==UIGestureRecognizerStateChanged) { sender.view.center=CGPointMake(x+translation.x, y+translation.y); } //结束 if(sender.state==UIGestureRecognizerStateEnded) { sender.view.center=CGPointMake(x+translation.x, y+translation.y); } }
5.左划
UISwipeGestureRecognizer*swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)]; swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;//不设置默认是右 [self.imageView addGestureRecognizer:swipeLeftGesture];
6.右划
UISwipeGestureRecognizer*swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)]; [self.imageView addGestureRecognizer:swipeGesture];
//手指左右滑动事件 -(void)handleSwipeGesture:(UISwipeGestureRecognizer *)sender{ if(sender.direction==UISwipeGestureRecognizerDirectionLeft) { NSLog(@"左滑"); } else{ NSLog(@"右滑"); } }
7.长按
UILongPressGestureRecognizer *longpressGesutre=[[UILongPressGestureRecognizeralloc]initWithTarget:self action:@selector(handleLongpressGesture:)]; //长按时间为1秒 longpressGesutre.minimumPressDuration=0.5; //容许15秒中运动 longpressGesutre.allowableMovement=3; //所需触摸1次 longpressGesutre.numberOfTouchesRequired=1; [self.imageView addGestureRecognizer:longpressGesutre]; [longpressGesutrerelease]; }
//手指长按事件 -(void)handleLongpressGesture:(UILongPressGestureRecognizer *)sender{ NSLog(@"长按"); if(sender.state==UIGestureRecognizerStateBegan) { CABasicAnimation* rotationAnimation_ = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; //角度转弧度 rotationAnimation_.fromValue = [NSNumber numberWithFloat:(-0.02)]; rotationAnimation_.toValue = [NSNumber numberWithFloat:(0.02)]; //动画时间 rotationAnimation_.duration = 0.1f; //动画次数 rotationAnimation_.repeatCount=FLT_MAX; //回退动画 rotationAnimation_.autoreverses = YES; //动画开始结束的快慢,设置为加速 rotationAnimation_.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; [[sender.view layer] addAnimation:rotationAnimation_forKey:@"revItUpAnimation"]; } }