1

我正在学习 iOS 开发,正在研究UIGestureRecognizer's.

我有一个看法。当您点击该视图时,我想显示 aUIPopoverController并且我还希望它像 a 一样UIButton在您按下它时“突出显示”。

我想这样做的方法是使用 2 UIGestureRecognizer- aUITapGestureRecognizer和 aUILongPressGestureRecognizer

我遇到的问题是 highlight 方法会立即被调用(我想要的),但是如果我将手指移动得足够远,UITapGestureRecognizer就会被取消。那时,我想调用另一个方法 ( unhighlight) 来恢复UIView的初始背景颜色,但我不知道如何做到这一点。

我对此很陌生,所以这个问题可能是基本的,我感谢任何人可以给我的任何帮助。

UIViewController

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(togglePopover)];

[self.view addGestureRecognizer:tap];

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(highlight)];
press.minimumPressDuration = 0.f; //highlight immediately
press.delegate = self; //set the delegate to self
[self.view addGestureRecognizer:highlight];


//the delegate part of the UIViewController
- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithOtherGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer {
  return YES; //allows allow simultaneous recognition of gestures on this view
}
4

2 回答 2

1

AUITapGestureRecognizer具有给定的行为,您刚刚在具体案例中进行了描述。

你所追求的可以用一个连续的手势识别器来完成,比如UIPanGestureRecognizer.

具体来说,一个连续的手势识别器动作方法将根据手势识别器通过的状态接收一系列调用。

其中一种状态是UIGestureRecognizerStateCancelled,因此您可以管理它以检测手势何时被取消,就像您的情况一样,并通过删除突出显示来采取相应的行动。另一方面,当您在UIGestureRecognizerStateBegan状态下调用您的操作时,您将突出显示该按钮。

您的操作方法将是这样的:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

  if (recognizer.state == UIGestureRecognizerStateBegan) {

     ...
  } else if (recognizer.state == UIGestureRecognizerStateCancelled) {

     ...
  }
}

另一种方法是创建您自己的手势识别器子类,您可以在其中处理touchesBegan:/touchesMoved:/touchesEnded:满足您需求的方法。

如果您查看UIGestureRecognizer 参考资料,您会发现大量信息。

于 2013-10-16T18:15:04.020 回答
0

如果您想要的行为就像 a UIButton,为什么不能只使用 a UIButton

否则,您必须在目标方法中捕获手势的状态。在为手势识别器声明动作目标时,请确保在目标名称后加一个冒号。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(togglePopover:)];

现在,在里面-togglePopover,读取state传递的手势识别器的属性。这是记录在这里。您正在寻找状态UIGestureRecognizerStateCancelled

于 2013-10-16T18:51:12.767 回答