如果现有的屏幕交互经过并在 UIView 上停止,则运行操作

Posted

技术标签:

【中文标题】如果现有的屏幕交互经过并在 UIView 上停止,则运行操作【英文标题】:Run action if a existing screen interaction passes over and stops on a UIView 【发布时间】:2016-11-01 08:07:54 【问题描述】:

如何向 uiview 添加一个动作,如果屏幕交互(长按)移动到 uiview 并在那里停留一段选定的时间,该动作将运行。

编辑:我有一个下拉菜单系统,长按按钮会显示菜单。然后用户将向下滑动到一个选项上,然后释放水龙头。我想知道发生在哪个菜单项上并采取相应措施。

【问题讨论】:

【参考方案1】:

将以下手势添加到您的 UIView 以实现长按功能。

    var longTap = UILongPressGestureRecognizer(target: self, action: #selector(self.longTouch))
    longTap.numberOfTapsRequired = 0 // Set your own number here
    longTap.minimumPressDuration = 1.0 //Set your duration here
    longTap.delegate = self// Add the <UIGestureRecognizerDelegate> protocol 
    self.view.addGestureRecognizer(longTap)

添加代理

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    return true

下面是选择器将被调用

func longTouch(_ recognizer: UILongPressGestureRecognizer) 
    if recognizer.state == .began 
        print("longTouch UIGestureRecognizerStateBegan")
    
    if recognizer.state == .ended 
        print("longTouch UIGestureRecognizerStateEnded")
    

Objective C 版本

    UILongPressGestureRecognizer *longTap = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTouch:)];
    [longTap setNumberOfTapsRequired:0]; // Set your own number here
    [longTap setMinimumPressDuration:1.0]; // Set your duration here
    [longTap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol
    [self.view addGestureRecognizer:longTap]; 

德尔盖特:-

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    return YES;

选择器:-

- (void) longTouch: (UILongPressGestureRecognizer *)recognizer

    if (recognizer.state == UIGestureRecognizerStateBegan)
    
        NSLog(@"longTouch UIGestureRecognizerStateBegan");
    
    if (recognizer.state == UIGestureRecognizerStateEnded)
    
        NSLog(@"longTouch UIGestureRecognizerStateEnded");
    

【讨论】:

可以在 obj c 中得到这个。我真的不知道 swift。 谢谢,我会试试这个。 我不认为这是我所追求的。我希望能够分辨出长按结束于哪个 UIView。我有一个下拉菜单系统,长按按钮会显示菜单。然后用户将向下滑动到一个选项上,然后释放水龙头。我想知道发生在哪个菜单项上并采取相应的行动。 Menu 是你的 UIButton 而 menuItems 是 UIButton 还是 UIView? UIViews。我可以添加 UIButton,但似乎我必须点击它们才能激活它。

以上是关于如果现有的屏幕交互经过并在 UIView 上停止,则运行操作的主要内容,如果未能解决你的问题,请参考以下文章

我可以立即停止第一个 UIView 动画并在同一视图上启动第二个动画吗?

用屏幕点击停止 UIView 动画

AnimateWithDuration 禁用 UIView 上的 userInteraction

阻止 UIView 离开屏幕

我的 react js 代码如何与现有的 Obj-C 逻辑交互?

可拖动的 UIView 与 Tab Bar 交互不正常