我有一个平移手势识别器来向上、向下、向左或向右拖动面板。当平移的方向不可能时,我不允许识别器开始,以便触摸可以转到面板中的其他 UI 元素。
但是,在 iOS7 上,翻译有时会在gestureRecognizerShouldBegin:
我的手势处理程序之间重置handlePan:
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer*)panGR
{
CGPoint trans = [panGR translationInView:self.view];
NSLog(@"should begin trans: (%.2f, %.2f)", trans.x, trans.y);
...
这记录:should begin trans: (18.00, 0.00)
- (void)handlePan:(UIPanGestureRecognizer*)panGR
{
CGPoint trans = [panGR translationInView:self.view];
switch(panGR.state)
{
case UIGestureRecognizerStateBegan:
NSLog(@"handlePan began trans: (%.2f, %.2f)", trans.x, trans.y);
...
这记录:handlePan began trans: (0.00, 0.00)
这意味着用于确定平移方向的共享代码(在本例中为右)工作gestureRecognizerShouldBegin:
并允许手势开始,但无法在handlePan:
何时确定state
is UIGestureRecognizerStateBegan
。
这是 iOS7 中的错误还是故意改变行为以适应新的手势类型?另外,任何人都可以提出解决此问题的好方法吗?