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检测到屏幕左边缘外的拖动的主要内容,如果未能解决你的问题,请参考以下文章