【问题标题】:UIButton drag finger into the boundsUIButton 将手指拖入边界
【发布时间】:2016-01-01 21:56:47
【问题描述】:

我正在尝试让某个特定事件发挥作用。 用户应该触摸一个按钮(A),这个按钮会弹出一些UIView,其中还有另一个按钮(B)。

如果用户 touchUpInside 按钮 A,弹出窗口应该消失,并且按钮 (B) 将不可点击。 但是,如果用户单击按钮 (A),然后将手指拖入按钮 (B),则此按钮 (B) 将被选中,但仅当用户 TouchUpInside 此按钮 (B) 时才会触发

我尝试了最明显的 TouchDragEnter 和 TouchDragInside,但它并没有达到我的预期,你必须先 touchDownInside 才能工作。由于TouchDownInside事件已经在按钮(A)上完成,它不能在按钮(B)上完成

我是否遗漏了什么,或者我应该继续为这种特殊行为创建一个我自己的子类?

为了增加一些难度,按钮 (A) 和按钮 (B) 不在同一个 UIView 上。

【问题讨论】:

  • 我认为 touchdraginside 不会触发 touchupinside!!!!他们完全不同!!!
  • @Mr.T 是的,我知道...这不是重点。

标签: ios objective-c uibutton touch-event


【解决方案1】:

我刚刚创建了一个名为PopMenu 的库,它完全实现了您提到的功能。这个想法是当您按下菜单按钮时它会弹出按钮并继续跟踪用户的手指,直到用户触摸屏幕。它返回用户结束触摸的按钮。

【讨论】:

    【解决方案2】:

    如果我要这样做,我会完全忽略 touchUpInside 等,而只关注拖动事件。在 touchesMoved 方法中,不断检查触摸的位置,以及它们是否与您关注的视图的矩形相交。

    类似这样的:(对于不完整的示例表示歉意)

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
        CGPoint currentPoint = [touch locationInView:self];
        if ( CGRectContainsPoint(imageView.bounds, locationInView) ) {
        // Point lies inside the bounds...
    

    【讨论】:

    • 当然我试过了...只有用户应该先触摸按钮 A(在视图 X 上)然后才能拖动到按钮 B(在视图 Y 上)...由于触摸事件发生在按钮 A(视图 X)上,因此不会从另一个视图调用任何其他触摸事件。
    • 您必须从两个按钮的超级视图中控制所有这些东西。我怀疑您是否可以从一种观点出发,同时超越其界限进入另一种观点。
    猜你喜欢
    • 2014-06-17
    • 2013-06-09
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多