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

Posted

技术标签:

【中文标题】iOS检测到屏幕左边缘外的拖动【英文标题】:iOS detect drag outside left edge of screen 【发布时间】:2014-03-28 12:05:40 【问题描述】:

在 iPad 中,当您将手指放在屏幕顶部或底部边缘之外,然后将其拖动到屏幕上时,会显示一个菜单。我该如何实现?

【问题讨论】:

你可以使用手势 【参考方案1】:

为此专门有一个手势识别器类,在ios 7 中引入。这是UIScreenEdgePanGestureRecognizer。它的文档是here。看看吧。

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

此外,您必须为每个边缘创建一个手势识别器。你不能 OR 边,所以UIRectEdgeAll 不起作用。

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

【讨论】:

对 monobrow 设备和顶部附件无效【参考方案2】:

你可以做这样的事情,这个例子是你希望平移手势只有在用户从屏幕右侧向内滑动 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);
   

【讨论】:

以上是关于iOS检测到屏幕左边缘外的拖动的主要内容,如果未能解决你的问题,请参考以下文章

网页模拟QQ面板的拖动效果

如何实现“向右拖动以关闭”导航堆栈中的视图控制器?

是否可以在 iOS 模拟器中进行边缘滑动?

ToolStrip控件左右拖拽移动效果实现

android 可拖拽View的简单实现

android 可拖拽View的简单实现