我目前有一个菜单,我从左侧滑入。我已将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:
被调用并且菜单立即从左侧进入。然而,我希望菜单在用户滑动时逐渐进入 - 所以基本上将滑动距离与显示的菜单数量相关联。
由于
答案 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