【发布时间】:2026-01-05 04:05:02
【问题描述】:
我正在使用 UILongPressGestureRecognizer 类来处理是否选择了一项。
逻辑如下:用户在 1 秒内按下一个项目(UIView 子类)。一旦检测到手势,项目就会突出显示并可移动。
用户必须在屏幕上移动该项目而不停止触摸它。
我面临的问题是手势识别阴影 touchesBegan/Move/Ended 是项目类安排移动所必需的。
我尝试删除一旦检测到识别的手势并选择项目。但仍然向手势句柄发送消息,而不是调用 touches 方法。
任何人都知道有什么方法可以在不离开屏幕手指的情况下停止“听”手势识别器吗?
谢谢。
代码如下:
-(void)addGestures
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = iItemLongPressTime;
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"Long press Ended");
}
else {
if (self.isSelected) return;
if ([delegate respondsToSelector:@selector(singleTouch:)])
[delegate singleTouch:self];
[self removeGestureRecognizer:[self.gestureRecognizers objectAtIndex:0]];
NSLog(@"Long press detected.");
}
}
正如您在 else 分支中看到的,委托调用使所有过程都可以将此项目标记为选中,并且在删除识别器之后。
我错过了什么?
--编辑--
完成!这有效:
#pragma mark Gesture Functions
-(void)addGestures
{
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleLongPress:)];
longPress.minimumPressDuration = iItemLongPressTime;
[self addGestureRecognizer:longPress];
[longPress release];
}
- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {
if (sender.state == UIGestureRecognizerStateEnded) {
NSLog(@"Long press Ended");
}
else {
NSLog(@"Long press detected.");
if (self.isSelected) return;
if ([delegate respondsToSelector:@selector(singleTouch:)])
[delegate singleTouch:self];
[sender removeTarget:self action:@selector(handleLongPress:)];
sender.enabled = NO;
[self removeGestureRecognizer:sender];
}
}
问候!
【问题讨论】:
标签: iphone ios uigesturerecognizer