iOS:与UIButton的UIControlEventTouchUpOutside事件不一致的行为

时间:2011-07-21 16:31:22

标签: ios uibutton behavior

我希望从UIButton获得双重功能。

当用户触摸按钮时,我希望它立即触发行为A

但是如果用户在释放之前将手指拖到按钮之外,我还希望在释放时触发行为B.

所以,

        [presetButton addTarget: self 
                         action: @selector( presetButtonHit: )
               forControlEvents: UIControlEventTouchDown ];  

        [presetButton addTarget: self 
                         action: @selector( presetButtonSwipe: )
               forControlEvents: UIControlEventTouchUpOutside ];  

作为测试用例,我只需从相应的操作方法中记录“A”或“B”。

总是被正确击中。

然而,B是零星的。我可以有条不紊地用手指向下,拖出按钮,等待一秒钟然后松开。它通常不会发火。或者,如果我快速轻弹,它更有可能发射。但仍然是50-50。

我所有的都是带有背景图像和六个按钮的UIView。

我可以做些什么来追踪这个?

我宁愿到达它的底部而不是手动跟踪上下触摸的混乱;但如果我必须这样做,有什么干净的方式吗?从我所看到的它将是一个皇家PITA,我将不得不弄清楚触摸上/下是否在我的按钮的触摸上/下击中,设置标志等之前被击中。

1 个答案:

答案 0 :(得分:2)

这是重复的 Strange UIButton behavior: Is that normal?但我建议保留它,因为问题标题措辞得很好。

当我的手指按下按钮时,图像变暗

当我把手指拉开时,当我将一个看不见的圆周透过一个透明的厘米,超出按钮的框架时,图像会恢复原来的颜色

这是'释放'

之前通过将手指移开足够远来取消触摸的典型行为

如果你在这个区域内释放手指,它将触发内部的触摸。外面的SIM卡。

看起来苹果并没有预料到任何人会使用这些方法从UIButton获得双重功能。

现在,是否有任何简单的方法可以捕捉动作中的XY触摸坐标。该动作只接收按下的按钮的ID。

但这是一种优雅的方式:

http://sree.cc/iphone/handling-touche-events-for-uibuttons-in-iphone

UIControl具有检测拖动开始/移动/停止的方法。您可以覆盖它们并获取屏幕坐标。