- (void)viewDidLoad {
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTapped)];
[self.view addGestureRecognizer:tap];
_myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
_myView.center = self.view.center;
_myView.backgroundColor = [UIColor redColor];
[self.view addSubview:_myView];
//UIGestureRecognizer 手势识别器,能够把所在的view上的touch事件识别为相应的手势。
//这个类不能直接使用,需要使用它的各种子类。
单击手势
//创建手势时,需要制定target和方法,那么在手势触发时,就会调用绑定的方法。UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
//触发手势所需要的点击次数。
tapGesture.numberOfTapsRequired = 1;
//触发手势所需要的触摸点数。
tapGesture.numberOfTouchesRequired = 1;
//把手势识别器添加到view上,view上的touch时间就会被识别。
[_myView addGestureRecognizer:tapGesture];
双击手势
UITapGestureRecognizer *doubleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapGestureRecognized:)];//触发手势所需要的点击次数。
doubleTapGesture.numberOfTapsRequired = 2;
//触发手势所需要的触摸点数。
doubleTapGesture.numberOfTouchesRequired = 1;
//把手势识别器添加到view上,view上的touch时间就会被识别。
[_myView addGestureRecognizer:doubleTapGesture];
//tapGesture手势必须在doubleTapGesture手势识别失败时才能被识别。
[tapGesture requireGestureRecognizerToFail:doubleTapGesture];
长按手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)];
//触发长按手势的按压时间
longPress.minimumPressDuration = 0.5;
//手势触发前最大的允许移动距离。
longPress.allowableMovement = 10;
[_myView addGestureRecognizer:longPress];
捏合手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGestureRecognized:)];
[_myView addGestureRecognizer:pinch];
旋转手势
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGestureRecognized:)];
//手势也可以设置代理
rotation.delegate = self;
[_myView addGestureRecognizer:rotation];
滑动手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
[_myView addGestureRecognizer:pan];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
单击手势方法
- (void)tapGestureRecognized:(UITapGestureRecognizer *)gesture{
NSLog(@"点击了");
}
双击手势方法
NSLog(@"双击了");
}
长按手势方法
//gesture.state手势的状态。
if (gesture.state == UIGestureRecognizerStateBegan) {
NSLog(@"长按了");
//菜单控制器,单例类
UIMenuController *mc = [UIMenuController sharedMenuController];
UIMenuItem *redItem = [[UIMenuItem alloc] initWithTitle:@"红色" action:@selector(redItemClick)];
UIMenuItem *greenItem = [[UIMenuItem alloc] initWithTitle:@"绿色" action:@selector(greenItemClick)];
UIMenuItem *blueItem = [[UIMenuItem alloc] initWithTitle:@"蓝色" action:@selector(blueItemClick)];
mc.menuItems = @[redItem,greenItem,blueItem];
//UIMenuController所在的view必须能够成为第一响应者,而普通的UIView不能成为第一响应者,所以UIMenuController必须显示在自定义view上。
[self.view becomeFirstResponder];
//设置菜单控制器显示的位置和父视图。
[mc setTargetRect:_myView.frame inView:self.view];
//让菜单控制器显示
[mc setMenuVisible:YES animated:YES];
}
}
捏合手势方法
_myView.transform = CGAffineTransformScale(_myView.transform, gesture.scale, gesture.scale);
gesture.scale = 1;
}
旋转手势方法
_myView.transform = CGAffineTransformRotate(_myView.transform, gesture.rotation);
gesture.rotation = 0;
}
滑动手势方法
- (void)panGestureRecognized:(UIPanGestureRecognizer *)gesture{
CGPoint point = [gesture translationInView:self.view];
_myView.center = CGPointMake(_myView.center.x+point.x, _myView.center.y+point.y);
[gesture setTranslation:CGPointZero inView:self.view];
}
- (void)redItemClick{
_myView.backgroundColor = [UIColor redColor];
[self.view resignFirstResponder];
}
- (void)greenItemClick{
_myView.backgroundColor = [UIColor greenColor];
[self.view resignFirstResponder];
}
- (void)blueItemClick{
_myView.backgroundColor = [UIColor blueColor];
[self.view resignFirstResponder];
}