UIGestureRecognizer 是一个具体手势的基类,提供了较为简单的手势实现方式
The concrete subclasses of UIGestureRecognizer are the following:
一个gesture recognizer是针对一个特定的view的(包含其subview),用UIView的方法addGestureRecognize:去关联一个view
一个gesture recognizer是不参与UIView的事件响应链的
各个手势使用时的代码:
UITapGestureRecognizer
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
-
- UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
- if (![tapGesture respondsToSelector:@selector(locationInView:)]) {
- [tapGesture release];
- tapGesture = nil;
- }else {
- tapGesture.delegate = self;
- tapGesture.numberOfTapsRequired = 1;
- tapGesture.numberOfTouchesRequired = 1;
- [self.view addGestureRecognizer:tapGesture];
- }
- }
- - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
- {
- UIView *view = [gestureRecognizer view];
-
- switch (gestureRecognizer.state) {
- case UIGestureRecognizerStateEnded:{
- NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");
- break;
- }
- case UIGestureRecognizerStateFailed:{
- NSLog(@"======UIGestureRecognizerStateFailed");
- break;
- }
- case UIGestureRecognizerStatePossible:{
- NSLog(@"======UIGestureRecognizerStatePossible");
- break;
- }
- default:{
- NSLog(@"======Unknow gestureRecognizer");
- break;
- }
- }
- }
-
- - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
-
- return YES;
- }
-
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
- return NO;
- }
-
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
- return YES;
- }
UIPinchGestureRecognizer
UIRotationGestureRecognizer
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
- if (![rotationGesture respondsToSelector:@selector(locationInView:)]) {
- [rotationGesture release];
- rotationGesture = nil;
- }else {
- rotationGesture.delegate = self;
-
- [self.view addGestureRecognizer:rotationGesture];
- }
- }
-
-
- - (void)handleGesture:(UIRotationGestureRecognizer *)gestureRecognizer
- {
- UIView *view = [gestureRecognizer view];
-
-
-
- CGFloat rotation = gestureRecognizer.rotation;
- NSLog(@"===rotation: %f", rotation);
-
- CGFloat velocity = gestureRecognizer.velocity;
- NSLog(@"======velocity: %f", velocity);
-
-
-
-
- switch (gestureRecognizer.state) {
- case UIGestureRecognizerStateEnded:{
- NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");
- break;
- }
- case UIGestureRecognizerStateBegan:{
- NSLog(@"======UIGestureRecognizerStateBegan");
- break;
- }
- case UIGestureRecognizerStateChanged:{
- NSLog(@"======UIGestureRecognizerStateChanged");
-
- gestureRecognizer.view.transform = CGAffineTransformRotate(gestureRecognizer.view.transform, gestureRecognizer.rotation);
- gestureRecognizer.rotation = 0;
-
- break;
- }
- case UIGestureRecognizerStateCancelled:{
- NSLog(@"======UIGestureRecognizerStateCancelled");
- break;
- }
- case UIGestureRecognizerStateFailed:{
- NSLog(@"======UIGestureRecognizerStateFailed");
- break;
- }
- case UIGestureRecognizerStatePossible:{
- NSLog(@"======UIGestureRecognizerStatePossible");
- break;
- }
- default:{
- NSLog(@"======Unknow gestureRecognizer");
- break;
- }
- }
- }
UISwipeGestureRecognizer
UIPanGestureRecognizer
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
-
- UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
- view.backgroundColor = [UIColor blueColor];
- [self.view addSubview:view];
-
-
- UIPanGestureRecognizer *panPressGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
- if (![panPressGesture respondsToSelector:@selector(locationInView:)]) {
- [panPressGesture release];
- panPressGesture = nil;
- }else {
- panPressGesture.delegate = self;
- panPressGesture.maximumNumberOfTouches = NSUIntegerMax;
-
- panPressGesture.minimumNumberOfTouches = 1;
- [view addGestureRecognizer:panPressGesture];
- }
- }
-
- - (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
- {
- UIView *view = [gestureRecognizer view];
-
-
-
- switch (gestureRecognizer.state) {
- case UIGestureRecognizerStateBegan:{
- NSLog(@"======UIGestureRecognizerStateBegan");
- break;
- }
- case UIGestureRecognizerStateChanged:{
- NSLog(@"======UIGestureRecognizerStateChanged");
-
-
-
- CGPoint translation = [gestureRecognizer translationInView:self.view];
- view.center = CGPointMake(gestureRecognizer.view.center.x + translation.x, gestureRecognizer.view.center.y + translation.y);
- [gestureRecognizer setTranslation:CGPointMake(0, 0) inView:self.view];
- break;
- }
- case UIGestureRecognizerStateCancelled:{
- NSLog(@"======UIGestureRecognizerStateCancelled");
- break;
- }
- case UIGestureRecognizerStateFailed:{
- NSLog(@"======UIGestureRecognizerStateFailed");
- break;
- }
- case UIGestureRecognizerStatePossible:{
- NSLog(@"======UIGestureRecognizerStatePossible");
- break;
- }
- case UIGestureRecognizerStateEnded:{
-
-
-
- NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");
-
- CGPoint velocity = [gestureRecognizer velocityInView:self.view];
- CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
-
-
- CGFloat slideMult = magnitude / 200;
-
- NSLog(@"magnitude: %f, slideMult: %f", magnitude, slideMult);
- float slideFactor = 0.1 * slideMult;
-
-
- CGPoint finalPoint = CGPointMake(view.center.x + (velocity.x * slideFactor),
- view.center.y + (velocity.y * slideFactor));
-
-
- finalPoint.x = MIN(MAX(finalPoint.x, 0), self.view.bounds.size.width);
- finalPoint.y = MIN(MAX(finalPoint.y, 0), self.view.bounds.size.height);
-
- [UIView animateWithDuration:slideFactor*2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
- view.center = finalPoint;
- } completion:nil];
-
- break;
- }
- default:{
- NSLog(@"======Unknow gestureRecognizer");
- break;
- }
- }
- }
UILongPressGestureRecognizer
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
- if (![longPressGesture respondsToSelector:@selector(locationInView:)]) {
- [longPressGesture release];
- longPressGesture = nil;
- }else {
- longPressGesture.delegate = self;
- longPressGesture.numberOfTapsRequired = 0;
- longPressGesture.minimumPressDuration = 0.1f;
- longPressGesture.numberOfTouchesRequired = 1;
- longPressGesture.allowableMovement = 10;
- [self.view addGestureRecognizer:longPressGesture];
- }
- }
-
-
- - (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
- {
- UIView *view = [gestureRecognizer view];
-
- switch (gestureRecognizer.state) {
- case UIGestureRecognizerStateEnded:{
- NSLog(@"======UIGestureRecognizerStateEnded || UIGestureRecognizerStateRecognized");
- break;
- }
- case UIGestureRecognizerStateBegan:{
- NSLog(@"======UIGestureRecognizerStateBegan");
- break;
- }
- case UIGestureRecognizerStateChanged:{
- NSLog(@"======UIGestureRecognizerStateChanged");
- break;
- }
- case UIGestureRecognizerStateCancelled:{
- NSLog(@"======UIGestureRecognizerStateCancelled");
- break;
- }
- case UIGestureRecognizerStateFailed:{
- NSLog(@"======UIGestureRecognizerStateFailed");
- break;
- }
- case UIGestureRecognizerStatePossible:{
- NSLog(@"======UIGestureRecognizerStatePossible");
- break;
- }
- default:{
- NSLog(@"======Unknow gestureRecognizer");
- break;
- }
- }
- }
-
- - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
- CGPoint currentPoint = [gestureRecognizer locationInView:self.view];
- if (CGRectContainsPoint(CGRectMake(0, 0, 100, 100), currentPoint) ) {
- return YES;
- }
-
- return NO;
- }
-
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
- return NO;
- }
-
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
- return YES;
转自:http://blog.csdn.net/namehzf/article/details/7424882
手势知多少
原文:http://www.cnblogs.com/mumoozhu/p/4600342.html