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

我有一个看法。当您点击该视图时,我想显示一个UIPopoverController,并且还希望它像UIButton一样工作,因为当您按下它时它会“突出显示”。

我想做到这一点的方法是使用2个UIGestureRecognizer-一个UITapGestureRecognizer和一个UILongPressGestureRecognizer
我遇到的问题是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
}

最佳答案

如果您想要的行为类似于UIButton,为什么不只使用UIButton

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

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

现在,在-togglePopover内部,读取传递的手势识别器的state属性。 That is documented here。您正在寻找状态UIGestureRecognizerStateCancelled

关于ios - 关于UIGestureRecognizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19410461/

10-11 01:04