UISlider返回两个Touch Up Inside事件,为什么会这样?

wil*_*lc2 6 iphone cocoa-touch uislider

我有一个滑块,我用它来设置某个浮动值.我将Value Changed连接到viewController中的方法.那部分工作正常.

我需要知道用户何时开始触摸控件但不一定是滑块更改的每一个瞬间(我收到了Value Changed事件).所以我将Touch Up Inside事件连接到viewController中的另一个方法.

问题是,当用户触摸UISlider控件时,该方法被调用两次.WTF?它与UIButton或其他触摸事件(如Touch Down)无关.

我认为,我可以解决它,但它似乎是滑块控件处理触摸的方式中的一个错误.有人知道它为什么会发生吗?

BTW:即使Touch Up Inside是唯一连接的事件,也会发生双触摸事件.

ben*_*ech 6

正因如此,它不会打破未来的更新

[customSlider addTarget:self action:@selector(sliderDown:) forControlEvents:UIControlEventTouchDown];

[customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventTouchUpInside];



- (void)sliderDown:(id)sender
{

    sliderused = NO;

}

- (void)sliderAction:(id)sender
{
    if(sliderused){
    return;
}

sliderused = YES;

//Your Code Here
}
Run Code Online (Sandbox Code Playgroud)


drv*_*ijk 0

我刚刚尝试过,我注意到同样的行为。它从两个地方调用,首先从UISlider的endTrackingWithTouch:withEvent:方法(由UIControl的touchesEnded:withEvent:方法调用),然后从同一个UIControl的touchesEnded:withEvent:方法(首先调用endTrakingWithTouch:withEvent:方法) 。

此外,当触摸在滑块之外结束时,该方法仅由 endTrackingWithTouch:withEvent: 方法调用一次。touchesEnded:withEvent: 方法调用此方法,但不会像触摸在控件内结束时那样调用回调。

无论如何,为什么要连接 Touch Up Inside?您想知道用户何时开始触摸控件吗?我认为你应该连接 Touch Down 而不是 Touch Up Inside。

编辑:我发现您需要更改后的值,并且更改后的值被调用得太频繁。我刚刚重新运行测试,并注意到以下内容。更改的值在两次 touch up 内部调用之间调用。也许你可以用它做点什么?