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

iOS:与UIButton'不一致的行为;s UIControlEventTouchUpOutside事件,ios,uibutton,behavior,Ios,Uibutton,Behavior,我想从UIButton获得双重功能 当用户按下按钮时,我希望它立即触发行为 但是,如果用户在释放按钮之前将手指拖出按钮,我也希望在释放按钮时触发行为B 所以 作为一个测试用例,我将简单地从相应的操作方法中记录'a'或'B' A总是被正确击中 然而,B是零星的。我可以有条不紊地用手指向下,拖动按钮的外侧,等一秒钟再松开。而且通常不会着火。或者,如果我做一个快速的轻弹,它更有可能开火。但仍然是50比50 我所拥有的只是一个带有背景图像和六个按钮的UIView 我该怎么做才能找到这个 我宁愿深入到它的

我想从UIButton获得双重功能

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

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

所以

作为一个测试用例,我将简单地从相应的操作方法中记录'a'或'B'

A总是被正确击中

然而,B是零星的。我可以有条不紊地用手指向下,拖动按钮的外侧,等一秒钟再松开。而且通常不会着火。或者,如果我做一个快速的轻弹,它更有可能开火。但仍然是50比50

我所拥有的只是一个带有背景图像和六个按钮的UIView

我该怎么做才能找到这个

我宁愿深入到它的底部,也不愿在手动上下跟踪润色的过程中乱来;但如果我必须这样做,有没有干净的方法?据我所见,这将是一个皇家皮塔,我必须在我的按钮触碰上/下、设置标志等之前确定触碰上/下是否被触碰。

这是 但我建议保留它,因为问题的标题措词很好

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

当我把手指拖开的时候,当我经过一个不可见的周长一厘米甚至超过按钮框架的时候,图像就会恢复到原来的颜色

这是“在释放之前将手指移动足够远以取消触摸”的典型行为

如果你在这个区域内松开手指,它将在里面触发润色。外面的sim卡

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

现在,有没有简单的方法从动作中捕捉XY触摸坐标。该操作只接收被按下按钮的ID

但这里有一个优雅的方式:

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

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

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