Ale*_*one 21 iphone uiview ios uitapgesturerecognizer long-press
我正在构建一个iPhone应用程序,让用户重新排列屏幕上的一些UI元素.
如何在同一个UIView中添加点击手势识别器和长按手势识别器?当我从长按中抬起手指时,轻敲手势识别器会触发.如何在用户执行长按时暂时禁用轻敲手势识别器或阻止其触发?
谢谢!
Sno*_*man 53
要允许两个手势一起工作,请实现以下委托方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
为了使长按具有第一优先权,请执行以下操作:
[tapGesture requireGestureRecognizerToFail:longPress];
vgo*_*anz 10
要成功结合您需要:
1º添加到标题处的界面手势委托
@interface ViewController : ViewController <UIGestureRecognizerDelegate>
Run Code Online (Sandbox Code Playgroud)
2º创建手势事件并将视图添加到源文件中:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touch:)];
[tap setNumberOfTapsRequired:1]; // Set your own number here
[tap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol
UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTouch:)];
[longTap setNumberOfTapsRequired:0]; // Set your own number here
[longTap setMinimumPressDuration:1.0];
[longTap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol
[tap requireGestureRecognizerToFail:longTap]; // Priority long
[self.view addGestureRecognizer:tap];
[self.view addGestureRecognizer:longTap];
Run Code Online (Sandbox Code Playgroud)
3º在源文件中添加回调:
- (void) touch: (UITapGestureRecognizer *)recognizer
{
CGPoint location = [recognizer locationInView: self.HUDview];
if (recognizer.state == UIGestureRecognizerStateBegan)
{
NSLog(@"touch UIGestureRecognizerStateBegan");
}
if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"touch UIGestureRecognizerStateEnded");
//NSLog(@"Position of touch: %.3f, %.3f", location.x, location.y); // Position landscape
}
}
- (void) longTouch: (UILongPressGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan)
{
NSLog(@"longTouch UIGestureRecognizerStateBegan");
}
if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"longTouch UIGestureRecognizerStateEnded");
}
}
Run Code Online (Sandbox Code Playgroud)
4º设置手势识别器可用:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
作为替代方法,不要有两个单独的识别器 - 只需对两个事件使用LongPress识别器:
配置如下:
UILongPressGestureRecognizer* longPress = [ [ UILongPressGestureRecognizer alloc ] initWithTarget:self.nextResponder action:@selector(longPressEvent:)];
categoryPanelDrag.minimumPressDuration = 0.0;
Run Code Online (Sandbox Code Playgroud)
然后处理如下:
- (BOOL)longPressEvent:(UILongPressGestureRecognizer *)gesture {
// _dragStarted is a class-level BOOL
if(UIGestureRecognizerStateBegan == gesture.state) {
_dragStarted = NO;
}
if(UIGestureRecognizerStateChanged == gesture.state) {
_dragStarted = YES;
// Do dragging stuff here
}
if(UIGestureRecognizerStateEnded == gesture.state) {
if (_dragStarted == NO)
{
// Do tap stuff here
}
else
{
// Do drag ended stuff here
}
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15958 次 |
| 最近记录: |