是否有内置方法将手势识别器(特别是平移)添加到视图的右边缘或左边缘?

时间:2013-12-18 20:37:36

标签: ios objective-c ios7 uigesturerecognizer uipangesturerecognizer

在iOS 7中,有很多情况下用户可以从屏幕的左边缘或右边缘滑动手指以执行操作,例如弹出视图控制器或显示侧边栏。

是否有一种内置的方式来做到这一点,我完全忽略了某些方面(是的,我已经广泛搜索过)?或者是检查平底锅开始位置的框架位置的唯一方法?

这是因为如果用户从边缘拉出或说中间,我想执行不同的操作。

4 个答案:

答案 0 :(得分:3)

你有UIScreenEdgePanGestureRecognizer,它被添加到iOS7以检测,从屏幕边缘平移。对于从中间平移,正常的平移手势识别器就足够了,您可以检查平移手势是否足够接近中间。

答案 1 :(得分:3)

使用UIScreenEdgePanGestureRecognizer,但请检查它是否可用(因为它是iOS 7 +):

if (NSClassFromString(@"UIScreenEdgePanGestureRecognizer")) {
    UIScreenEdgePanGestureRecognizer *panRecognizer =
    [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self
                                                      action:@selector(handleScreenEdgePanGesture:)];
    panRecognizer.edges = UIRectEdgeLeft;
}

答案 2 :(得分:1)

设置手势

UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanning:)];
[self.view addGestureRecognizer:panGesture];

处理手势状态

- (void)handlePanning:(UIPanGestureRecognizer *)gestureRecognizer
{
    switch ([gestureRecognizer state])
    {
        case UIGestureRecognizerStateBegan:

            [self startDragging:gestureRecognizer];
            break;

         //u won't need following cases
        case UIGestureRecognizerStateEnded:
        case UIGestureRecognizerStateCancelled:
        case UIGestureRecognizerStateFailed:

            [self stopDragging:gestureRecognizer];
            break;

        default:
            break;
    }
}

识别拖动的起点

- (void)startDragging:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGPoint pointInSrc = [gestureRecognizer locationInView:yourVIEW];
}

答案 3 :(得分:0)

平移手势识别器是预定义的识别器,关于它可以用来确定用户移动手指的速度。如果你想知道运动开始的位置,你必须编写自己的识别器代码。这并不困难,当触摸开始和结束时,您会收到通知。