逐步滑动视图

时间:2014-07-23 08:45:41

标签: objective-c ios7 uiviewanimation uiswipegesturerecognizer

我目前有一个菜单,我从左侧滑入。我已将UITapGestureRecognizer添加到主视图中。像这样:

UISwipeGestureRecognizer *recognizer;
    recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(toggleMenu:)];
    [recognizer setDirection:UISwipeGestureRecognizerDirectionRight];
    [self.view addGestureRecognizer:recognizer];

toggleMenu:然后执行以下操作:

int targetX = 260;
_menuIsShowing = YES;

[UIView animateWithDuration:0.25 animations:^{
        [_currentVC.view setFrame:CGRectMake(targetX, [_currentVC.view frame].origin.y,
                                             [_currentVC.view frame].size.width, [_currentVC.view frame].size.height)];
    } completion:^(BOOL finished) {

        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_resetNumberPadButtons object:self];

    }];

这很有效,但并不漂亮。当用户滑动足够远时toggleMenu:被调用并且菜单立即从左侧进入。然而,我希望菜单在用户滑动时逐渐进入 - 所以基本上将滑动距离与显示的菜单数量相关联。

由于

1 个答案:

答案 0 :(得分:2)

您想使用UIPanGestureRecognizer。将其添加到self.view并使用translationInView:方法获取平移的当前CGPoint并相应地重置滑动视图的框架。您还可以使用velocityInView方法强制手势识别器从左到右工作,并检查水平(x)组件。

CGPoint velocity = [recognizer velocityInView:yourView];
if (velocity.x > 0) {
    //left to right 
}

在这种情况下,使用继承自前者的UIScreenEdgePanGestureRecognizer可以实现最佳用户体验。使用此功能,您可以指定用户可以拖动的边缘。

Apple docs始终提供帮助: https://developer.apple.com/library/ios/documentation/uikit/reference/UIPanGestureRecognizer_Class/Reference/Reference.html https://developer.apple.com/library/ios/documentation/uikit/reference/UIScreenEdgePanGestureRecognizer_class/Reference/Reference.html