您的位置:首页 > 其它

GesturesAndEventHandle常用手势

2016-02-26 20:09 204 查看
//单击手势必须在双击手势识别失败时才能识别
[singleTaprequireGestureRecognizerToFail:doubleTap];

【触摸事件】

//触摸的传递是从下往上

//事件的处理是从上往下

1、开始
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event {
printf("开始\n");
/*

timestamp:时间戳(从开机到触摸的时间间隔)

phase:触摸状态

tapCount:在某一时间段内的连续点击次数

view:触摸的视图

*/
UITouch *touch = [touches
anyObject];

NSLog(@"timestamp:%.2lf", touch.timestamp);
}

//滑动时一直调用,不能做耗时操作

2、移动
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event {
[supertouchesMoved:touches
withEvent:event];

//printf("移动\n");
UITouch *touch = [touches
anyObject];
if (touch.view ==self.label) {
CGPoint currentLocation = [touch
locationInView:self.view];
CGPoint previousLocation = [touch
previousLocationInView:self.view];
CGFloat deltaX = currentLocation.x-previousLocation.x;
CGFloat deltaY = currentLocation.y-previousLocation.y;
CGPoint center =
self.label.center;
center.x += deltaX;
center.y += deltaY;
self.label.center = center;
}
}

3、结束
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event {
[supertouchesEnded:touches
withEvent:event];
printf("结束\n");
UITouch *touch = [touches
anyObject];
if (touch.tapCount ==2) {

self.label.backgroundColor =RandomColor;
}
}

4、取消
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event {
printf("取消\n”);
}

1、点击(tap)

//手势都继承自UIGestureRecognizer

//点击手势

UITapGestureRecognizer *tgr = [[UITapGestureRecognizeralloc]
initWithTarget:selfaction:@selector(tapHandle:)];

//设置点击次数

tgr.numberOfTapsRequired =2;

//触摸点的个数

tgr.numberOfTouchesRequired =2;

//添加手势

[self.labeladdGestureRecognizer:tgr];
[tgrrelease];

2、长按(longPress)
- (void)longPressHandle:(UILongPressGestureRecognizer *)lpgr {
printf("%ld\n", lpgr.state);

if (lpgr.state ==UIGestureRecognizerStateBegan) {

printf("长按手势识别成功\n");

self.label.transform
= CGAffineTransformMakeScale(0.5,2.0);

} elseif (lpgr.state
==UIGestureRecognizerStateEnded) {

printf("长按手势识别结束\n");

self.label.transform =CGAffineTransformIdentity;
}

//长按手势

UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizeralloc]
initWithTarget:selfaction:@selector(longPressHandle:)];

//设置长按识别的最短持续时间

lpgr.minimumPressDuration =2;

[self.labeladdGestureRecognizer:lpgr];
[lpgrrelease];

3、慢速滑动,拖动(pan)
- (void)panHandle:(UIPanGestureRecognizer *)pgr {

//printf("state:%ld\n", pgr.state);

if (pgr.state ==UIGestureRecognizerStateChanged) {

//找到手势所在的视图
UIView *view = pgr.view;
CGPoint offset = [pgr
translationInView:self.view];
CGPoint center = view.center;
center.x += offset.x;
center.y += offset.y;
view.center = center;

//偏移效果会累加,每次都需要清除

[pgr setTranslation:CGPointZeroinView:self.view];
}
}

//滑动手势

UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizeralloc]
initWithTarget:selfaction:@selector(panHandle:)];

[self.labeladdGestureRecognizer:pgr];
[pgrrelease];

4、捏合(pinch)
- (void)pinchHandle:(UIPinchGestureRecognizer *)pgr {

//printf("state:%ld\n", pgr.state);

if (pgr.state ==UIGestureRecognizerStateChanged) {

pgr.view.transform =CGAffineTransformScale(pgr.view.transform,
pgr.scale, pgr.scale);

//捏合的比例效果会累加,每次都需重置
pgr.scale =1.0;
}
}

//捏合手势

UIPinchGestureRecognizer *pgr = [[UIPinchGestureRecognizeralloc]
initWithTarget:selfaction:@selector(pinchHandle:)];

[self.labeladdGestureRecognizer:pgr];
[pgrrelease];

5、旋转(rotation)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer
*)otherGestureRecognizer
{

//手势发生在同一视图上,允许同时有效
if (gestureRecognizer.view == otherGestureRecognizer.view) {
return
YES;
}

return
NO;
}

- (void)pinchHandle:(UIPinchGestureRecognizer *)pgr {

if (pgr.state ==UIGestureRecognizerStateChanged) {
pgr.view.transform =CGAffineTransformScale(pgr.view.transform,
pgr.scale, pgr.scale);
pgr.scale =1.0;
}
}

if (rgr.state ==UIGestureRecognizerStateChanged) {

rgr.view.transform =CGAffineTransformRotate(rgr.view.transform,
rgr.rotation);

//旋转角度效果会叠加,每次都需清除
rgr.rotation =0;
}

//旋转手势

UIRotationGestureRecognizer *rgr = [[UIRotationGestureRecognizeralloc]
initWithTarget:selfaction:@selector(rotationHandle:)];
rgr.delegate =self;

[self.labeladdGestureRecognizer:rgr];
[rgrrelease];

//再添加捏合手势

UIPinchGestureRecognizer *pgr = [[UIPinchGestureRecognizeralloc]
initWithTarget:selfaction:@selector(pinchHandle:)];

[self.labeladdGestureRecognizer:pgr];
[pgrrelease];

6、摇晃(motion)

//创建��视图

UIImageView *back = [[UIImageViewalloc]
initWithImage:[UIImageimageNamed:@"ShakeHideImg_women"]];

CGSize size =
self.view.frame.size;
back.center =CGPointMake(size.width/2,
size.height/2);
[self.viewaddSubview:back];
[backrelease];

//修改view背景色,与图片保持一致

self.view.backgroundColor
= [UIColorcolorWithRed:41/255.0green:45/255.0blue:46/255.0alpha:1];

//创建上下两张动画的图片
UIImage *upImage = [UIImageimageNamed:@"Shake_Logo_Up"];
UIImageView *upView = [[UIImageViewalloc]
initWithImage:upImage];
upView.center =CGPointMake(size.width/2,
(size.height-upImage.size.height)/2-20);
upView.tag =100;
[self.viewaddSubview:upView];
[upViewrelease];

UIImage *downImage = [UIImageimageNamed:@"Shake_Logo_Down"];
UIImageView *downView = [[UIImageViewalloc]
initWithImage:downImage];
downView.center =CGPointMake(size.width/2,
(size.height+downImage.size.height)/2-20);
downView.tag =200;
[self.viewaddSubview:downView];
[downViewrelease];
}
- (void)setAnimate {

#define MOVE_STEP 60
UIView *upView = [self.viewviewWithTag:100];
UIView *downView = [self.viewviewWithTag:200];

[UIViewanimateWithDuration:0.5animations:^{
//上面图片上移

upView.transform =CGAffineTransformMakeTranslation(0,
-MOVE_STEP);
//上面图片下移

downView.transform =CGAffineTransformMakeTranslation(0,MOVE_STEP);
}completion:^(BOOL finished) {

[UIViewanimateWithDuration:0.3animations:^{

upView.transform =CGAffineTransformIdentity;

downView.transform =CGAffineTransformIdentity;
}completion:^(BOOL finished) {

NSArray *names =@[@"shake_match.wav",@"shake_nomatch.wav"];
[selfperformSelector:@selector(playMusicWithName:)withObject:names[arc4random()%2]afterDelay:0.5];
}];
}];
}

- (void)playMusicWithName:(NSString *)name {

NSArray *names = [namecomponentsSeparatedByString:@"."];
NSString *file = [[NSBundlemainBundle]
pathForResource:names[0]ofType:names[1]];
NSURL *url = [NSURLfileURLWithPath:file];

SystemSoundID soundId;

AudioServicesCreateSystemSoundID((CFURLRef)url, &soundId);

AudioServicesPlayAlertSound(soundId);
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

printf("开始晃动\n");

[selfsetAnimate];

[selfplayMusicWithName:@"shake_sound_male.wav"];
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {

printf("晃动结束\n");
}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{

printf("晃动取消\n");
}

7、快速滑动,轻扫(swipe)
- (void)swipeHandle:(UISwipeGestureRecognizer *)sgr {

//printf("识别成功\n");

#define MOVE_STEP 50
CGPoint center = sgr.view.center;

switch (sgr.direction) {

caseUISwipeGestureRecognizerDirectionRight:
center.x +=MOVE_STEP;
break;

caseUISwipeGestureRecognizerDirectionLeft:
center.x -=MOVE_STEP;
break;

caseUISwipeGestureRecognizerDirectionDown:
center.y +=MOVE_STEP;
break;

caseUISwipeGestureRecognizerDirectionUp:
center.y -=MOVE_STEP;
break;
default:
break;
}
sgr.view.center = center;
}

UISwipeGestureRecognizerDirection dir[] = {

UISwipeGestureRecognizerDirectionRight,

UISwipeGestureRecognizerDirectionLeft,

UISwipeGestureRecognizerDirectionUp,

UISwipeGestureRecognizerDirectionDown
};
for (NSInteger i=0; i<sizeof(dir)/sizeof(dir[0]);
i++) {

//轻扫手势,相当与具有单一方向的滑动手势

UISwipeGestureRecognizer *sgr = [[UISwipeGestureRecognizeralloc]
initWithTarget:selfaction:@selector(swipeHandle:)];

//设置轻扫的方向
sgr.direction = dir[i];

[self.labeladdGestureRecognizer:sgr];
[sgrrelease];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: