我有一个平移手势识别器,用于向上、向下、向左或向右拖动面板。当不可能进行平移时,我不允许识别器开始工作,以便触摸可以传递给面板内的其他UI元素。
但是,在iOS7上,有时在gestureRecognizerShouldBegin:和我的手势处理程序handlePan:之间,翻译会被重置。
但是,在iOS7上,有时在gestureRecognizerShouldBegin:和我的手势处理程序handlePan:之间,翻译会被重置。
- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer*)panGR
{
CGPoint trans = [panGR translationInView:self.view];
NSLog(@"should begin trans: (%.2f, %.2f)", trans.x, trans.y);
...
这段代码记录了:应该开始转换:(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:
中起作用并允许手势开始,但是当state
为UIGestureRecognizerStateBegan
时,在handlePan:
中无法确定该方向。
这是iOS7中的一个错误还是行为有意更改以适应新的手势类型?此外,有人能否提供一个解决此问题的好方法?
gestureRecognizerShouldBegin
和状态为UIGestureRecognizerStateBegan
的处理程序之间。我认为这是iOS7中的一个错误。 - jhabbottUIGestureRecognizerStateBegan
之后”时所想的是,在调用处理程序之前进行重置,对吗?我理解了这个问题并运行了一些代码来复现它 - 我同意您的观点,这种行为非常令人困惑,并且在某些情况下可能会引起麻烦,例如当您的gestureRecognizerShouldBegin
实现仅在相对较大的转换发生时(即可以在屏幕上看到的距离,如您的(18.00, 0.00)
)返回YES
。这就是我所理解的情况? - Wladek Surala