iOS检测到屏幕左边缘之外的拖动

时间:2014-03-28 12:05:41

标签: ios ipad uipangesturerecognizer

在iPad中,当您将手指放在屏幕的顶部或底部边缘之外,然后将其拖动到屏幕上时,会显示一个菜单。你知道怎么做这样的事吗?

2 个答案:

答案 0 :(得分:6)

  • iOS 7中引入了特定的手势识别器类。这是UIScreenEdgePanGestureRecognizer。它的文档是here。看看吧。

  • 要在模拟器中测试,只需从边缘附近开始拖动(~15点)。

  • 此外,您还必须为每条边创建一个gestureRecognizer。你不能将OR边缘放在一起,因此UIRectEdgeAll将不起作用。

有一个简单的例子here。希望这有帮助!

答案 1 :(得分:1)

你可以做这样的事情,这个例子就是你希望平移手势只在用户从屏幕右侧向内滑动20px时才能工作的情况

首先将手势添加到您的窗口

- (void)addGestures {  
if (!_panGesture) {      
_panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; 
[_panGesture setDelegate:self]; 
[self.view addGestureRecognizer:_panGesture];   
}
}

添加检查后,您收到的触摸是否为平移手势,然后相应地执行操作

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {    
CGPoint point = [touch locationInView:self.view];
if (gestureRecognizer == _panGesture) {     
return [self slideMenuForGestureRecognizer:gestureRecognizer withTouchPoint:point]; 
} 
return YES;
}

以下是检查您的触控是否包含在您希望的区域

的方法
 -(BOOL)isPointContainedWithinBezelRect:(CGPoint)point {
   CGRect leftBezelRect; 
   CGRect tempRect; 
 //this will be the width between CGRectMaxXEdge and the screen offset, thus identifying teh region
   CGFloat bezelWidth =20.0;
   CGRectDivide(self.view.bounds, &leftBezelRect, &tempRect, bezelWidth, CGRectMaxXEdge); 
   return CGRectContainsPoint(leftBezelRect, point);
   }