长按和触摸开始

Posted

技术标签:

【中文标题】长按和触摸开始【英文标题】:long press and touchesBegan 【发布时间】:2014-05-04 08:49:14 【问题描述】:

当我在 ViewController 中检测到长按时,我会显示弹出菜单(添加 UIView 作为子视图)。当长按结束时,我会隐藏我的菜单(从超级视图中删除 UIView)。所以我的菜单只有在用户触摸屏幕时才可见。问题是当我按住并移动手指而不触摸时,我的菜单不会调用touchesBegantouchesMoved,所以我无法从菜单中选择任何按钮。除了从ViewController 传递事件之外,还有其他方法吗?我想在我的UIView 中执行此操作。请帮忙。

【问题讨论】:

【参考方案1】:

您最好的选择是将UIPanGestureRecognizer 添加到您的 ViewController 的视图中。 像这样:

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
[self.view addGestureRecognizer:panGestureRecognizer];

在实现handlePanGesture 中,您应该找到识别器相对于您的弹出视图的翻译。

-(void)handlePanGesture:(id)sender 
    UIPanGestureRecognizer *recognizer = sender;
    if (recognizer.state == UIGestureRecognizerStateChanged) 
        CGPoint translation = [recognizer translationInView:self.contentView];
        //Here you can use translation to detect what button touched with gesture
    

【讨论】:

以上是关于长按和触摸开始的主要内容,如果未能解决你的问题,请参考以下文章

UIbutton 长按和 Touch Up 里面

iOS结合长按和滑动手势

Vue 移动端的长按与触摸事件

Android系统判断长按和点击

如何让 onTouchEvent、长按和上下文菜单协同工作?

Vue 移动端的长按与触摸事件