UILongPressGestureRecognizer不会响应touch&保持

时间:2013-02-01 01:45:23

标签: ios objective-c cocoa-touch uigesturerecognizer

我正在为iPhone编写Objective-C程序。

我正在尝试实现UILongPressGestureRecognizer,并且无法让它按照我想要的方式运行。

想要做的事情很简单:

回应屏幕上按住的触摸。

只要触摸移动和触摸开始时,UILongPressGestureRecognizer就可以正常工作,但如果我在同一个地方按住触摸,则没有任何反应。

为什么?

我如何处理触摸开始,而不是移动,并保持在完全相同的位置?

这是我目前的代码。


// Configure the press and hold gesture recognizer 
touchAndHoldRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(touchAndHold:)]; 
touchAndHoldRecognizer.minimumPressDuration = 0.1; 
touchAndHoldRecognizer.allowableMovement = 600;
[self.view addGestureRecognizer:touchAndHoldRecognizer];

1 个答案:

答案 0 :(得分:12)

您描述的行为是您的手势识别器在您不移动时未接收到对您的处理程序的进一步调用的行为是标准行为。移动时这些手势的state属性属于UIGestureRecognizerStateChanged类型,因此如果事情没有改变,则不会调用您的处理程序。

你可以

  • state UIGestureRecognizerStateBegan state打电话给您的手势识别器时,启动重复计时器;
  • 使用UIGestureRecognizerStateCancelled UIGestureRecognizerStateFailedUIGestureRecognizerStateEndedinvalidate然后locationInView致电您的手势识别器并释放计时器;
  • 确保手势识别器方法在某些类属性中保存您要查找的任何值(例如@interface ViewController () @property (nonatomic) CGPoint location; @property (nonatomic, strong) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; gesture.minimumPressDuration = 0.1; gesture.allowableMovement = 600; [self.view addGestureRecognizer:gesture]; } - (void)handleTimer:(NSTimer *)timer { [self someMethod:self.location]; } - (void)handleGesture:(UIGestureRecognizer *)gesture { self.location = [gesture locationInView:self.view]; if (gesture.state == UIGestureRecognizerStateBegan) { self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]; } else if (gesture.state == UIGestureRecognizerStateCancelled || gesture.state == UIGestureRecognizerStateFailed || gesture.state == UIGestureRecognizerStateEnded) { [self.timer invalidate]; self.timer = nil; } [self someMethod:self.location]; } - (void)someMethod:(CGPoint)location { // move whatever you wanted to do in the gesture handler here. NSLog(@"%s", __FUNCTION__); } @end 或其他值)

所以,可能是这样的:

{{1}}