我正在学习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/