UIKit中包含了UIGestureRecognizer类,协议<UIGestureRecognizerDelegate>,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势:
1、拍击UITapGestureRecognizer (任意次数的拍击)
2、向里或向外捏UIPinchGestureRecognizer (用于缩放)
3、摇动或者拖拽UIPanGestureRecognizer (移动)
4、擦碰UISwipeGestureRecognizer (以任意方向)
5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)
6、长按UILongPressGestureRecognizer (长按)
一个手指,拍击两次手势
|
// 创建一个手势识别器 |
|
UITapGestureRecognizer *oneFingerTwoTaps = |
|
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerTwoTaps)] autorelease]; |
|
|
|
// Set required taps and number of touches |
|
[oneFingerTwoTaps setNumberOfTapsRequired:2]; |
|
[oneFingerTwoTaps setNumberOfTouchesRequired:1]; |
|
|
|
// Add the gesture to the view |
|
[[self view] addGestureRecognizer:oneFingerTwoTaps]; |
|
|
|
消息方法oneFingerTwoTaps |
|
(void)oneFingerTwoTaps |
|
{ |
|
NSLog(@"Action: One finger, two taps"); |
|
} |
// 单击的 Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSingleTapFrom)];
singleTapRecognizer.numberOfTapsRequired = 1; // 单击
[self.view addGestureRecognizer:singleRecognizer];
// 双击的 Recognizer
UITapGestureRecognizer* double;
doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleDoubleTapFrom)];
doubleTapRecognizer.numberOfTapsRequired = 2; // 双击
[self.view addGestureRecognizer:doubleRecognizer];
// 关键在这一行,如果双击确定偵測失败才會触发单击
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
两个手指,拍击两次手势
|
UITapGestureRecognizer *twoFingersTwoTaps = |
|
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersTwoTaps)] autorelease]; |
|
[twoFingersTwoTaps setNumberOfTapsRequired:2]; |
|
[twoFingersTwoTaps setNumberOfTouchesRequired:2]; |
|
[[self view] addGestureRecognizer:twoFingersTwoTaps]; |
|
|
|
消息方法twoFingersTwoTaps |
|
- (void)twoFingersTwoTaps { |
|
NSLog(@"Action: Two fingers, two taps"); |
|
}
|
一个手指向上、向下擦碰手势
|
// 向上擦碰 |
|
UISwipeGestureRecognizer *oneFingerSwipeUp = |
|
[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerSwipeUp:)] autorelease]; |
|
[oneFingerSwipeUp setDirection:UISwipeGestureRecognizerDirectionUp]; |
|
[[self view] addGestureRecognizer:oneFingerSwipeUp]; |
|
|
|
- (void)oneFingerSwipeUp:(UISwipeGestureRecognizer *)recognizer |
|
{ |
|
CGPoint point = [recognizer locationInView:[self view]]; |
|
NSLog(@"Swipe up - start location: %f,%f", point.x, point.y); |
|
} |
|
|
|
// 向下擦碰 |
|
UISwipeGestureRecognizer *oneFingerSwipeDown = |
|
[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerSwipeDown:)] autorelease]; |
|
[oneFingerSwipeDown setDirection:UISwipeGestureRecognizerDirectionDown]; |
|
[[self view] addGestureRecognizer:oneFingerSwipeDown]; |
|
|
|
- (void)oneFingerSwipeDown:(UISwipeGestureRecognizer *)recognizer |
|
{ |
|
CGPoint point = [recognizer locationInView:[self view]]; |
|
NSLog(@"Swipe down - start location: %f,%f", point.x, point.y); |
|
} |
旋转手势
|
UIRotationGestureRecognizer *twoFingersRotate = |
|
[[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersRotate:)] autorelease]; |
|
[[self view] addGestureRecognizer:twoFingersRotate]; |
|
|
|
- (void)twoFingersRotate:(UIRotationGestureRecognizer *)recognizer |
|
{ |
|
// Convert the radian value to show the degree of rotation |
|
NSLog(@"Rotation in degrees since last change: %f", [recognizer rotation] * (180 / M_PI)); |
|
} |
向里或向外捏的手
|
UIPinchGestureRecognizer *twoFingerPinch = |
|
[[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)] autorelease]; |
|
[[self view] addGestureRecognizer:twoFingerPinch]; |
|
|
|
- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer |
|
{ |
|
NSLog(@"Pinch scale: %f", recognizer.scale); |
|
} |
长按的手势
UILongPressGestureRecognizer *oneFingerLong = |
|
[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerLong:)] autorelease]; |
|
[[self view] addGestureRecognizer:oneFingerLong]; |
|
|
oneFingerLong.minimumPressDuration=2;
|
- (void)oneFingerLong:(UILongGestureRecognizer *)recognizer |
|
{ |
|
|
|
}
/* * gestureRecognizer 实现了委托,从而实现可以同时接受多个手势 * @return YES 则可以接受多个手势,NO 则同时只能接受一个手势 */ - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer { return YES; }
|
转载于:https://blog.51cto.com/yinjun98/998646