Question

I am having an issue where i have defined a UIScreenEdgePanGestureRecognizer to detect pan gesture appearing on the right edge of my device but the gesture is recognized sporadically:

I have the following code:

 _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!!!!");
}

The gesture is attached to a view with nothing on it.

Am I missing something?

Was it helpful?

Solution

I've managed to create a workaround. It is pretty straightforward. I've subclassed UIWindow and used touchesBegan/touchesMoved/etc. methods to simulate gesture recognition.

It works. UIWindow is not rotated automatically, so I have to transform touch coordinates accordingly.

Here is my version of the transformation:

- (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;
}

OTHER TIPS

I think there's bugs. My app is always in landscape mode, and I've set up the same thing as you, with it detecting the right edge. If that edge is the camera side of the iPad, it detects sporadically. If I flip over the iPad and the right edge is the button side, it works just fine. In fact, I'm having this problem with any gesture, not just this one.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top