iOS UISlider值不匹配

时间:2017-03-24 18:07:17

标签: ios objective-c uislider

我在我的一个应用程序中实现了Vertical Slider,它扩展了UISlider。当滚动结束/完成时,我将使用Slider值向服务器发送命令。有时当我快速向上/向下滚动并释放时,滑块值在发送命令之前和发送命令之后都会不匹配。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
   NSLog(@"Value of Slider before sending command=%f",self.value);
   [self sendCommand]; // Here value is something else  
   [super touchesEnded:touches withEvent:event];
   NSLog(@"Slider value after sending command=%f",self.value); // Here value changed
}

但如果我在发送命令之前发出超级电话,那么一切正常。请解释是否有人知道为什么会这样。

[super touchesEnded:touches withEvent:event];

更有趣的事实是,如果我不打电话给超级,那么一切都运作良好。

3 个答案:

答案 0 :(得分:0)

这是因为方法[super touchesEnded:touches withEvent:event];是滑块根据交互更新其值的位置。因此,在调用super之前,该值已过期。

对super的调用通常应该是重写方法的第一行。

答案 1 :(得分:0)

即使名称touchesEnded:暗示滑块已完成更新,它仍然可能会根据用户抬起手指的方式更新值。如果你想到一个用户快速滑动然后抬起他们的手指,这是有道理的 - 他们可能期望它在那个方向上比他们的手指实际上走得更远。

答案 2 :(得分:-1)

  

当手指或Apple Pencil不再使用时,UIKit会调用此方法   触摸屏幕。许多UIKit类重写此方法并使用   它清理涉及相应处理的状态   触摸事件。此方法的默认实现转发   消息响应者链。在创建自己的子类时,   打电话给超级转发你自己没有处理的任何事件。对于   例如,{{1}}

     

如果在不调用super的情况下覆盖此方法(常用)   pattern),你还必须覆盖其他处理触摸的方法   事件,即使您的实现什么都不做。