在IOS中如果项目遵循了导航栏的结构,就会拥有手势滑动返回的漂亮效果,
不过,我们公司的项目没有遵循导航栏的结构,但是产品需求有需要添加一个滑动返回上一层级的功能,则就用到了IOS7添加的
UIScreenEdgePanGestureRecognizer这个类,它是继承于UIPanGestureRecognizer的一个类,则项目中使用的时候,就必须遵循
UIGestureRecognizerDelegate这个代理了。
具体代码如下:
//添加右滑返回手势
if (isIOS7) {
UIScreenEdgePanGestureRecognizer *left2rightSwipe = [[UIScreenEdgePanGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
[left2rightSwipe setDelegate:self];
[left2rightSwipe setEdges:UIRectEdgeLeft];
[self.view addGestureRecognizer:left2rightSwipe];
}
手势响应的方法:
#pragma mark -- 在每个视图的左侧,添加右滑返回上一级的手势
- (void)handleSwipeGesture:(UIScreenEdgePanGestureRecognizer *)gestureRecognizer
{
[self.navigationController popViewControllerAnimated:YES];
}
手势的方向可以是上、下、左、右四个方向,
此时左滑返回是无法响应的,因为工程里面页面添加了一个UITableVIew,有其他手势的干扰,则此时需要解析你的滑动返回的手势,代码如下:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
return YES;
}else{
return NO;
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
BOOL result = NO;
if ([gestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
result = YES;
}
return result;
}