UIScreenEdgePanGestureRecognizer无法识别右边缘的手势

时间:2013-12-06 14:28:04

标签: ios objective-c ios7 uigesturerecognizer uipangesturerecognizer

我遇到了一个问题,我已经定义了一个UIScreenEdgePanGestureRecognizer来检测出现在设备右边缘的平移手势,但手势是零星识别的:

我有以下代码:

 _swipeInLeftGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeInFromRightEdge:)];
 _swipeInLeftGestureRecognizer.minimumNumberOfTouches = 1;
 _swipeInLeftGestureRecognizer.maximumNumberOfTouches = 1;
 [_swipeInLeftGestureRecognizer setEdges:UIRectEdgeRight];
 [self.view addGestureRecognizer:_swipeInLeftGestureRecognizer];

- (void)handleSwipeInFromRightEdge:(UIGestureRecognizer*)sender
{
    NSLog(@"swipe from right edge!!!!");
}

手势附在视图上,没有任何内容。

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

我设法创建了一种解决方法。这很简单。我已经将UIWindow子类化并使用了touchesBegan / touchesMoved / etc.模拟手势识别的方法。

有效。 UIWindow不会自动旋转,因此我必须相应地转换触摸坐标。

以下是我的转型版本:

- (CGPoint)transformPoint:(CGPoint)point {
    CGPoint pointInView = point;

    if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        pointInView.x = self.bounds.size.width - pointInView.x;
        pointInView.y = self.bounds.size.height - pointInView.y;
    } else if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft) {
        CGFloat x = pointInView.x;
        CGFloat y = pointInView.y;
        pointInView = CGPointMake(self.bounds.size.height - y, x);
    } else if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight) {
        CGFloat x = pointInView.x;
        CGFloat y = pointInView.y;
        pointInView = CGPointMake(y, self.bounds.size.width - x);
    }
    return pointInView;
}

答案 1 :(得分:2)

我认为有错误。我的应用程序始终处于横向模式,我设置了与您相同的功能,并检测到右边缘。如果该边缘是iPad的相机侧,则会偶尔检测到。如果我翻转iPad并且右边缘是按钮侧,它可以正常工作。事实上,我对任何手势都有这个问题,而不仅仅是这个。